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. C++ 检查Windows服务运行状态

    检查Windows服务运行状态  C++ Code  1234567891011121314151617181920212223242526272829303132333435363738394041 ...

  2. 修改了JS代码,刷新网页后,加载的JS还是原来旧的?

    本地修改JS脚本后,刷新网页看一下修改后的执行效果,结果调试显示加载的JS还是原来旧的,反复刷新均无效,郁闷! 解决办法:清理一下浏览器缓存(长经验了!)     Ctrl+Shift+Del 清除G ...

  3. poj 3414(简单bfs)

    题目链接:http://poj.org/problem?id=3414 思路:bfs简单应用,增对瓶A或者瓶B进行分析就可以了,一共6种状态. #include<iostream> #in ...

  4. windows下caffe如何单独编译proto文件

    利用protoc.exe即可编译. 在protoc.exe当前文件夹下打开cmd,输入命令如下: pushd %~dp0 echo "copying .proto and generated ...

  5. 【BZOJ4560】[JLoi2016]字符串覆盖 KMP+状压DP

    [BZOJ4560][JLoi2016]字符串覆盖 Description 字符串A有N个子串B1,B2,…,Bn.如果将这n个子串分别放在恰好一个它在A中出现的位置上(子串之间可以重叠)这样A中的若 ...

  6. cocos2d-X学习之主要类介绍:CCDirector

    在cocos2d-x里面,游戏的任何时间,只有一个场景对象实例处于运行状态,该对象可以作为当前游戏内容的整体包对象 Cocos2d-x引擎除了提供了CCDirector,还提供了一个CCDisplay ...

  7. 通过脚本同时运行几个spider

    # 通过脚本同时运行几个spider目录结构: 1.在命令行能通过的情况下创建两个spider如TestSpiderTest2Spider 2.在items.py的同级目录创建run.py文件,有三种 ...

  8. 13.php面向对象

    1.构造函数 public __construct() {} 2.析构函数 public __destruct() {} 3.对象调用属性 //数以调用时候要用    -> 而不是Java的点. ...

  9. Replay attack 回放攻击

    w http://baike.baidu.com/item/重放攻击 重放攻击(Replay Attacks)又称重播攻击.回放攻击或新鲜性攻击(Freshness Attacks),是指攻击者发送一 ...

  10. python基于yield实现协程

    def f1(): print(11) yield print(22) yield print(33) def f2(): print(55) yield print(66) yield print( ...