- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenCV学习笔记(18)双目测距与三维重建的 OpenCV实现问题集锦(三)立体
匹配与视差计算
四、双目匹配与视差计算
立体匹配主要是通过找出每对图像间的对应关系,根据三角测量原理,得到视差图;在获得了视差信
息后,根据投影模型很容易地可以得到原始图像的深度信息和三维信息。立体匹配技术被普遍认为是 立体视觉中最困难也是最关键的问题,主要是以下因素的影响:
(1) 光学失真和噪声(亮度、色调、饱和度等失衡)
(2) 平滑表面的镜面反射
(3) 投影缩减(Foreshortening)
(4) 透视失真(Perspective distortions)
(5) 低纹理(Low texture)
(6) 重复纹理(Repetitive/ambiguous patterns)
(7) 透明物体
(8) 重叠和非连续
目前立体匹配算法是计算机视觉中的一个难点和热点,算法很多,但是一般的步骤是:
A、匹配代价计算
匹配代价计算是整个立体匹配算法的基础,实际是对不同视差下进行灰度相似性测量。常见的方法有
灰度差的平方 SD(squared intensity differences),灰度差的绝对值 AD(absolute intensity
differences)等。另外,在求原始匹配代价时可以设定一个上限值,来减弱叠加过程中的误匹配的
影响。以 AD法求匹配代价为例,可用下式进行计 算,其中 T为设定的阈值。
图 18
B、 匹配代价叠加
一般来说,全局算法基于原始匹配代价进行后续算法计算。而区域算法则需要通过窗口叠加来增强匹
配代价的可靠性,根据原始匹配代价不同,可分为:
图 19
C、 视差获取
对于区域算法来说,在完成匹配代价的叠加以后,视差的获取就很容易了,只需在一定范围内选取叠
加匹配代价最优的点(SAD和 SSD取最小值,NCC 取最大值)作为对应匹配点,如胜者为王算法 WTA
(Winner-take-all)。而全局算法则直接对原始匹配代价进行处理,一般会先给出一个能量评 价函
数,然后通过不同的优化算法来求得能量的最小值,同时每个点的视差值也就计算出来了。
D、视差细化(亚像素级)
大多数立体匹配算法计算出来的视差都是一些离散的特定整数值,可满足一般应用的精度要求。但在
一些精度要求比较高的场合,如精确的三维重构中,就需要在初始视差获取后采用一些措施对视差进 行细化,如匹配代价的曲线拟合、图像滤波、图像分割等。
有关立体匹配的介绍和常见匹配算法的比较,推荐大家看看 Stefano Mattoccia 的讲义 Stereo
Vision: algorithms and applications,190页的 ppt,讲解得非常形象详尽。
1. opencv2.1和 opencv2.0在做 stereo vision方面有什么区别了?
2.1版增强了 Stereo Vision方面的功能:
(1) 新增了 SGBM 立体匹配算法(源自 Heiko Hirschmuller的《Stereo Processing by Semi-global
Matching and Mutual Information》), 可以获得比 BM 算法物体轮廓更清晰的视差图(但低纹理
区域容易出现横/斜纹路,在 GCstate-fullDP 选项使能时可消减这种异常纹路,但对应区域视差变
为 0,且运行速度会有所下降),速度比 BM 稍慢, 352*288的帧处理速度大约是 5 帧/秒;
(2) 视差效果:BM SGBM GC;处理速度:BM SGBM GC ;
(3) BM 算法比 2.0版性能有所提升,其状态参数新增了对左右视图感兴趣区域 ROI 的支持(roi1 和
roi2,由 stereoRectify函数产生);
(4) BM 算法和 GC 算法的核心代码改动不大,主要是面向多线程运算方面的(由 OpenMP 转向 Intel
TBB);
(5) cvFindStereoCorrespondenceBM 函数的 disparity参数的数据格式新增了 CV_32F 的支持,这
种格式的数据给出实际视差,而 2.0 版只支持 CV_16S,需要除以 16.0 才能得到实际的视差数值。
2. 用于立体匹配的图像可以是彩色的吗?
在 OpenCV2.1中,BM和 GC算法只能对 8位灰度图像计算视差,SGBM算法则可以处理 24位(8bits*3)
彩色图像。所以在读入图像时,应该根据采用的算法来处理图像:
int color_mode = alg == STEREO_SGBM ? 1 : 0;
/////////////////////////////////////////////////////////////////
文档评论(0)