光场相机由于能够捕获相机内部光线的强度和方向而得到整个光场,可以实现重聚焦(refocus)和视角变换等功能。进而可以进行深度估计获取深度图,前面说过利用重聚焦的图像进行深度估计,今天说一下利用不同视角的图像进行深度估计。

仍然是以Lytro Illum为例

由于每一个微透镜后面的15*15个像素能够记录来自主镜头的225条光线信息,因此取每一个微透镜后面同一位置的像素可以得到一个视角下的图像,遍历15*15个像素,就能够得到225个不同视角下的图像。这些图像之间视角上又偏移,即视差,可以使用匹配的方法进行深度的计算。还是以Tao的文献里的算法来说,这次说的是correspondence,就是各个视角下图像的匹配关系。

Tao的算法里是利用整个传感器获得的光场图像进行计算的,图像尺寸为8115*6510(单个视角下的图像尺寸为541*434,也就是微透镜的个数)。只要能够理解坐标之间的关系,这样就不用提取每一个视角的图像了。

先贴一下源文献里的介绍:主要就是这两个公式(4)和(5),并不复杂。

算法过程如下:

1.重聚焦过程中获取不同像平面下的传感器图像(光场图像8115*6510),一共256幅。

2.对每一幅光场图像,取每一个微透镜后面对应15*15个像素的平均值,然后在窗口内求出方差。这样可以得到一幅方差图(图像尺寸541*434),为了增加鲁棒性,会对方差图做一个均值滤波的操作得到匹配代价图。

3.方差作为匹配代价,针对每一个宏像素点处,遍历所有的匹配代价图,去方差最小的那一幅,记录其索引值(0~255)。

4.根据索引值找到对应的alpha值,从而得到像距V=alpha*F。

5.根据物象公式1/U +1/V = 1/F 就可以求得该像素点处的深度。

博主之前做过双目立体匹配获取视差图(stereo matching),感觉这个匹配的过程有点儿古怪,和stereo matching 不太一样。后来细想,其实还是相通的,只不过融合了refocus后,求深度的过程就简单化了。求方差的过程其实就是计算matching cost ,在微透镜后的窗口内计算方差就是对每一个视角与平均值average进行匹配。而大家知道,重聚焦其实就是shift-sum-average过程,如果微透镜后面的像素点值越接近,那么shift-sum-average后的点就越清晰,否则就会越模糊。方差就能够体现这一重要特性。方差越小,说明该点是重聚焦后所有图像对应位置最清晰的点,也就是在对焦的平面上,这样其实就由转化为了看哪一点最清晰的问题了,和defocus模糊线索殊途同归。

该文献中最后利用马尔科夫随机场MRF对这两种深度图进行了全局优化,目前还没有完全理解,以后理解了再写出来。

现在模糊线索和视差线索都介绍完了,纯属自己看文献和代码的理解,如有错误的地方,还望不吝指教~~~

参考文献

[1] Tao M W, Hadap S, Malik J, et al. Depth from combining defocus and correspondence using light-field cameras[C]//Proceedings of the IEEE International Conference on Computer Vision. 2013: 673-680.

[2] 杨德刚, 肖照林, 杨恒, 等. 基于光场分析的多线索融合深度估计方法[J]. 计算机学报, 2015, 38(12): 002437-2449.

利用光场进行深度图估计(Depth Estimation)算法之二——匹配算法的更多相关文章

  1. 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法

    前面几篇博客主要说了光场相机,光场相机由于能够记录相机内部整个光场,可以实现重聚焦(模糊线索)和不同视角的变换(视差线索),同时也可以利用这个特性进行深度估计(Depth Estimation). 先 ...

  2. 泡泡一分钟:Towards real-time unsupervised monocular depth estimation on CPU

    Towards real-time unsupervised monocular depth estimation on CPU Matteo Poggi , Filippo Aleotti , Fa ...

  3. 【HEVC帧间预测论文】P1.9 Coding Tree Depth Estimation for Complexity Reduction of HEVC

    Coding Tree Depth Estimation for Complexity Reduction of HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见: ...

  4. deep learning+ Depth Estimation

    Depth estimation/stereo matching/optical flow @CVPR 2017 Unsupervised Learning of Depth and Ego-Moti ...

  5. 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...

  6. Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对“基数”以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了“HyperLogLog”,从而引出了Card ...

  7. [转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

    利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha ...

  8. 算法(二)之遗传算法(SGA)

    算法(二)之遗传算法(SGA) 遗传算法(Genetic Algorithm)又叫基因进化算法或进化算法,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,属于启发式搜索算法一种. 下面通过下 ...

  9. 隐马尔可夫模型HMM与维特比Veterbi算法(二)

    隐马尔可夫模型HMM与维特比Veterbi算法(二) 主要内容: 前向算法(Forward Algorithm) 穷举搜索( Exhaustive search for solution) 使用递归降 ...

随机推荐

  1. Vue-cli 创建的项目如何跨域请求

    感谢BeArchitect的技术支持 问题描述: 使用 Vue-cli 创建的项目,开发地址是 localhost:8023,需要访问 localhost:9000 上的接口 分析原因: 不同域名之间 ...

  2. IDEA第八章----远程调试

    大家有没有遇到相同分支的代码在本地就是没有问题的,但是到测试环境死活不能实现功能,且还不报错.通常我们的解决办法就是打日志,然后一点一点跟踪日志. 这时我们在想如果也可以按照本地一样能断点测试的程序就 ...

  3. Java 测试驱动开发--“井字游戏” 游戏实战

    TDD 介绍 TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论.TDD的原理是在开发功能代码之前,先编写单元测试用 ...

  4. vscode运行前端代码

    vscode 可安装静态web服务器  Live Server用于运行前端代码,方便调试.最新的 Live Server已支持php动态页面. 安装方法是,点击左侧第五个图标,打开"扩展&q ...

  5. 微信小程序跳一跳辅助程序(手动版)

    最近,微信官方推出了demo小程序游戏<跳一跳>,这个游戏操作简单,容易上手,却又不容易获得高分,受到很多人的喜爱(emm...这游戏有毒).自己也尝试了玩了几次,作为一个手残+脑残的资深 ...

  6. 模拟uClinux系统调用

    这篇文章原来放在CU上的,现在挪过来了.CU上设置不可见了. 1.  目标 这里主要是实验一下uclinux的系统调用. 2.   环境 OS                :vmware + red ...

  7. Virtualbox虚拟机安装与设置

    Virtualbox与VMware类似,都是虚拟机软件,在win10下安装Virtualbox直接默认安装即可.版本:VirtualBox-5.2.0-118431-Win.exe 安装完成后,点击左 ...

  8. jquery/Js属性无效

    今天遇到个很奇葩的问题,就是checkbox的onchange时间无效,我一共写了两个checkbox的onchange事件,但就是只有一个能用,本来我以为是jquery的兼容问题,但是换成js还是不 ...

  9. OpenCV探索之路(二):图像处理的基础知识点串烧

    opencv图像初始化操作 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using n ...

  10. 一次完整的http的请求过程

    一个完整的http的完成请求过程: 输入网址-> 域名解析-> tcp的三次握手-> 建立tcp连接后发起http 请求-> 服务器响应http ,发送数据给浏览器->  ...