双camera景深计算
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景深计算的更多相关文章
- 双camera景深计算 (1)
http://www.52rd.com/S_TXT/2016_6/TXT85047.HTM?WebShieldDRSessionVerify=Wz3h6srvu76qRI4MFxK8 前面介绍了双ca ...
- c语言数字图像处理(二):图片放大与缩小-双线性内插法
图像内插 假设一幅大小为500 * 500的图像扩大1.5倍到750 * 750,创建一个750 * 750 的网格,使其与原图像间隔相同,然后缩小至原图大小,在原图中寻找最接近的像素(或周围的像素) ...
- css常见双栏和三栏布局
左侧固定右侧自适应 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Unity 基于Cinemachine计算透视摄像机在地图中的移动范围
Unity中Cinemachine的基础功能介绍可详见之前写的博客: https://www.cnblogs.com/koshio0219/p/11820654.html 本篇的重点是讨论,在给定规则 ...
- POJ3352 Road Construction Tarjan+边双连通
题目链接:http://poj.org/problem?id=3352 题目要求求出无向图中最少需要多少边能够使得该图边双连通. 在图G中,如果任意两个点之间有两条边不重复的路径,称为“边双连通”,去 ...
- 移动平台Unity3D 应用性能优化
WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...
- 随便说说 post-processing
九月份一篇博都没更新,这段时间一直在unity的坑里爬不起来,感觉真的很绝望啊,仿佛对生活都失去了信心. 渲染问题并没有解决,目前方案只是减轻视觉冲突,降低违和感.项目AR产品也做的越来越艰难,开始经 ...
- 剖析虚幻渲染体系(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. ...
- shell面试题目总结
1.如何理解shell脚本中第一行#!/bin/sh #!为特殊的表示符,其后是解释此脚本的shell的路径.此脚本使用/bin/sh进行解释执行. 2.如何向脚本传递参数. 脚本名字 参数1 参数2 ...
随机推荐
- 几个比较经典的算法问题的java实现
1.八皇后问题 public class EightQueen { private static final int ROW = 16; private static final int COL = ...
- linux下的线程池
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了.如果线程创建和销毁时间相比任 ...
- RPolar项目进度记录
PolarMesDlg.cpp,中的 void PolarMesDlg::CImage2CImagedata(unsigned char* src,CImage* desimg,unsigned ch ...
- Java每日一题
1.(单选题)What will be printed when you execute the following code? class C { C() { System.out.print(&q ...
- 72、android状态栏一体化,状态栏改变颜色
只能在4.4以上版本使用. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- 62、常规控件(5)Navigation View –美观的侧滑视图
1.main_layout.xml <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.andr ...
- java中的字符集和编码
前言 上次对计算机中的“字符集”和“编码”分别进行了总结,并指出二者之间的区别,不要搞混了,不清楚的再回到上一章看一下.今天再总结下java中是如何使用字符集(主要是Unicode字符集,其他常用字符 ...
- 深入理解--SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层都有什么作用
SSM是sping+springMVC+mybatis集成的框架. MVC即model view controller. model层=entity层.存放我们的实体类,与数据库中的属性值基本保持一致 ...
- [LintCode] A + B 问题
Bit-by-Bit summation: class Solution { public: /* * @param a: The first integer * @param b: The seco ...
- 开源平台ghost博客系统
http://docs.ghost.org/installation/windows/ 不会安装的童鞋可以到这里论坛看看 此教程只说windows下的安装: mac的安装教程请移步这里 mac版安装 ...