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