https://sanwen8.cn/p/2e41VC5.html

本文系微信公众号《大话成像》,知乎专栏《 all in camera》原创文章,转载请注明出处。

接着上一篇的说,其实在双摄像头的景深计算过程中如果只是按照上一篇文章介绍最简单的处理办法是一定得不到一个理想的景深图。并且在处理速度上也得不到一个理想的结果。其实这个和双目视觉上一般存在的一些和预想不同的视觉差情况相关的。

如区域太过平坦或者花纹接近很难判断是不是最匹配。

反光的表面的光斑

反光有虚影的表面

大物体边缘的背景信息不一致

观察角度变化导致的长度变化

甚至观察角度变化导致的一些形变

这些问题其实就是当两张图像上点不能简单的判断对应的时候算法如何处理。

其实在介绍这些问题之前。图片拍摄过程中的噪声也是关键问题。上一篇文章中最后处理的不满意的一个主要原因就是噪声引起的。

有些朋友也有过回复其实一个简单的策略就是针对原图或者景深图进行滤波减少对生成景深图的影响。在实际处理中可以对原图做预处理也可以对生成的景深图做处理。目前效果好的就是美颜那篇文章中提到的双边滤波。原因很简单,保边滤噪。


解决上面,有一类思路是对之前生成的景深图进行后处理。这个时候就要看下面的这个公式。其实公式本身很简单,Edata代表我们匹配的结果,Esmooth代表一般景深场景下的连续性。也就是说两者都在景深的评价过程中都应该考虑。这其实是符合多数的图像的常识的。在考虑到景深图的平滑性之后景深图的质量有了很大的提升。

因此基于一般性的常识,很多研究针对景深的后处理提出了一些算法

• Dynamic Programming!

• ScanlineOptimization!

• Graph Cuts!

• Belief Propagation, …!

下面就是GraphCut的处理,其主要思想还是减少景深图中小块的区域。但是其实这种做法是可以减少很多小的噪声,但是在某些细节部分也会带来一些误判。导致物品的边缘发生变化。

另外就是根据State-of-art的原则,假设所有一个颜色都是出于一个平面。每次分析的时候根据颜色对窗口中的像素进行权重的分配。这样确实能够解决一些边缘的问题。

但是在一些情况下如下面的人脸和斜面的状况下,还是很容易出现景深的判断错误。一般景深判断算法很难处理这类问题。


另外就是之前提到的背景信息不同问题的。这类问题使用不同权重的方法可以得到一定程度的改善。

还有个不错的方法是通过不同方向的扫描线的方法来进行。其方法是根据不同方向下判断线的连续性来进行景深图的处理。最后综合成一张最后的景深图。相对这个步骤比较多,大家有兴趣可以参照下

H. Hirschmüller. Stereovision in structured environments by consistent semi-global matching.这篇文章。

另外有一些算法的思路通过以左右两张图片分别做为参考图片,分别计算景深。然后取两者中较小的。这样可以解决掉很大一部分误判。但是相对来说运算时间增加了一倍。

目前还有一类针对改善景深图的方法是通过调整评价窗口的大小,位置甚至形状来实现。之前的简单的方法是采用参考点在中心部位取window.其实也可以可以根据颜色去取参考点出于边上的点。

又或者可以通过多个子窗口去评价,子窗口的的排列可以根据实际图形的情况。比如取相同颜色的区域。



最后甚至还可以根据不同状况下来调整用来采样的窗口大小。

但是大家可以注意到上面的改进算法都有一个特征,增加算法的复杂程度。于是也有很多人研究怎么样减少运算量。其中一种方法是通过整张图累加到计算点的和来代替之前的计算两张图的差的方法。方法很简单,但是如果图像比较大容易出现溢出的状况。大家有兴趣可以看下

F. Crow, Summed-area tablesfor texture mapping, Computer Graphics,

还有些数学很好的专家,推算出如何通过减少运算量实现一样的Box-Filtering运算结果M.Mc Donnel. Box-filtering techniques. Computer Graphics and Image Processing

现在有很多算法都根据实际使用的平台通过GPU进行算法的优化。更好的整体解决方案公司甚至通过FPGA或者定制芯片来进行景深计算的速度问题。随着技术的发展相信更精确的速度更快的景深计算方案会不断的出来。

景深计算在物体识别,AR增强领域是个最基础的研究。这篇文章中介绍一些方法都是一些比较基础的方法。实际上还有很多思路来解决一些单独方面的问题。其实现在如何计算景深的研究还在发展,前一段时间还看到一些论文利用深度学**来进行景深计算的改进,从论文的效果来看不错。但是在实际产品使用中往往是多种方法结合来使用。而且在最终的成效果和运行时间上进行平衡。

本文参考StereoVision:   Algorithms and Applications     Stefano Mattoccia

Department ofComputer Science (DISI) University of Bologna

双camera景深计算的更多相关文章

  1. 双camera景深计算 (1)

    http://www.52rd.com/S_TXT/2016_6/TXT85047.HTM?WebShieldDRSessionVerify=Wz3h6srvu76qRI4MFxK8 前面介绍了双ca ...

  2. c语言数字图像处理(二):图片放大与缩小-双线性内插法

    图像内插 假设一幅大小为500 * 500的图像扩大1.5倍到750 * 750,创建一个750 * 750 的网格,使其与原图像间隔相同,然后缩小至原图大小,在原图中寻找最接近的像素(或周围的像素) ...

  3. css常见双栏和三栏布局

    左侧固定右侧自适应 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  4. Unity 基于Cinemachine计算透视摄像机在地图中的移动范围

    Unity中Cinemachine的基础功能介绍可详见之前写的博客: https://www.cnblogs.com/koshio0219/p/11820654.html 本篇的重点是讨论,在给定规则 ...

  5. POJ3352 Road Construction Tarjan+边双连通

    题目链接:http://poj.org/problem?id=3352 题目要求求出无向图中最少需要多少边能够使得该图边双连通. 在图G中,如果任意两个点之间有两条边不重复的路径,称为“边双连通”,去 ...

  6. 移动平台Unity3D 应用性能优化

    WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...

  7. 随便说说 post-processing

    九月份一篇博都没更新,这段时间一直在unity的坑里爬不起来,感觉真的很绝望啊,仿佛对生活都失去了信心. 渲染问题并没有解决,目前方案只是减轻视觉冲突,降低违和感.项目AR产品也做的越来越艰难,开始经 ...

  8. 剖析虚幻渲染体系(15)- XR专题

    目录 15.1 本篇概述 15.1.1 本篇内容 15.1.2 XR概念 15.1.2.1 VR 15.1.2.2 AR 15.1.2.3 MR 15.1.2.4 XR 15.1.3 XR综述 15. ...

  9. shell面试题目总结

    1.如何理解shell脚本中第一行#!/bin/sh #!为特殊的表示符,其后是解释此脚本的shell的路径.此脚本使用/bin/sh进行解释执行. 2.如何向脚本传递参数. 脚本名字 参数1 参数2 ...

随机推荐

  1. cobbler setting dnsmasq

    Currently cobbler can help generate a ISC DHCP configuration (package name: dhcpd) it can also alter ...

  2. cinder服务端的keystone认证机制

    keystone在openstack中的地位 Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用户的身份认证.基于角色的授权管理.其他OpenStack服务的地址发现和安全策 ...

  3. WPF 开源项目 【watcher】 守望者,一款监控,统计,分析你每天在自己电脑上究竟干了什么的软件

    时隔多年(两年),天天沉迷写PHP的我在连续加薪了逐渐发现自己不怎么写代码了. 甚至有一天我发现我连IDE 都没有打开,实在是太堕落了 为了及时悬崖勒马,回头是岸.为了鼓励自己专心写代码,我决定写一款 ...

  4. js 判断数组

    这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...

  5. Android实例-使用电话拨号器在移动设备上

    Android实例-使用电话拨号器在移动设备上 源文地址: http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Tutorial:_Using ...

  6. nvm-windows 手动安装 nvm use 无效 'node' 不是内部或外部命令,也不是可运行的程序

    按照这两位前辈的教程,安装了nvm-windows. http://www.cnblogs.com/yesyes/p/7403184.html http://blog.csdn.net/jingsi1 ...

  7. Windows窗口的层次关系(转)

    今天看到这篇文章,觉得蛮有用的,我之前也对这个不大了解,特转载此处. 转载地址:http://www.51testing.com/html/200804/n80848.html 在Window 的图形 ...

  8. C#中遍历ArrayList的三种方法

    using System; using System.Collections; using System.Linq; using System.Text; namespace ArrayListDem ...

  9. delphi ----寻找控件,以字符串类型的名称控件

    vari :Integer;beginfor i := 1 to 10 do(FindComponent('Edit'+inttostr(i)) as TEdit).Text := inttostr( ...

  10. Exchange Powershell:ForwardingAddress&InboxRule

    查询在邮箱上设置的转发功能: Get-Mailbox -server MX01 -Filter {ForwardingAddress -like '*'} | Select-Object Name, ...