主要内容

差距

(不推荐)立体图像之间的视差图

差距不建议使用。使用disparityBMdisparitySGM代替。有关更多信息,请参见兼容性的考虑

描述

例子

disparityMap=差异(I1I2返回视差图,disparityMap,为一对立体图像,I1而且I2

disparityMap=差异(I1I2名称,值通过使用一个或多个视差算法提供额外的控制名称,值对参数。

例子

全部折叠

加载图像并将其转换为灰度。

I1 = imread(“scene_left.png”);I2 = imread(“scene_right.png”);

显示立体浮雕。使用红青色立体眼镜观看三维图像。

图imshow (stereoAnaglyph (I1、I2));标题(“立体图像的红青色合成视图”);

图中包含一个轴对象。标题为“红-青”的立体图像合成视图的axis对象包含一个类型为image的对象。

计算视差图。

disparityRange = [-6 10];disparityMap = rgb2gray(I1),rgb2gray(I2),“BlockSize”...15日,“DisparityRange”, disparityRange);

显示视差图。为了更好的可视化,使用视差范围作为imshow的显示范围。

图imshow (disparityMap disparityRange);标题(“差距地图”);colormap colorbar (gca、飞机)

图中包含一个轴对象。标题为“视差地图”的axes对象包含一个image类型的对象。

输入参数

全部折叠

输入图像引用为I1对应相机1,以二维灰度表示。立体图像,I1而且I2,必须进行修正,使相应的点位于相同的行上。您可以使用rectifyStereoImages函数。

的类可以提高函数的运行速度I1而且I2uint8,以及能被4整除的列数。输入的图像I1而且I2必须是实的,有限的,非稀疏的。他们必须是同一个班级。

数据类型:uint8|uint16|int16||

输入图像引用为I2对应摄像机2,用二维灰度表示。输入图像必须进行校正,使相应的点位于相同的行上。的类可以提高函数的运行速度I1而且I2uint8,以及能被4整除的列数。输入的图像I1而且I2必须是实的,有限的,非稀疏的。他们必须是同一个班级。

数据类型:uint8|uint16|int16||

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“方法”“BlockMatching”,指定“方法”属性设置为“BlockMatching”

视差估计算法,指定为逗号分隔的对,由'方法“BlockMatching”“SemiGlobal”.视差函数实现了基本的块匹配[1]半全局块匹配[3]算法。在“BlockMatching”方法,该函数通过比较图像中每个像素块的绝对差(SAD)的和来计算视差。在“SemiGlobal”匹配方法,该函数额外在相邻块上强制相似的视差。这一附加约束的结果是一个更完整的视差估计比“BlockMatching”方法。

算法执行以下步骤:

  1. 通过使用索贝尔滤波器计算图像对比度的测量。

  2. 计算中每个像素的视差I1

  3. 标记视差图的元素,disparityMap,计算结果并不可靠。该函数使用-最大浮点数“单一”)来标记这些元素。

视差范围,指定为逗号分隔的对,由'DisparityRange'和一个二元向量。两元素向量的格式必须为[MinDisparityMaxDisparity].两个元素都必须是整数,可以是负数。MinDisparity而且MaxDisparity一定在[-图像的宽度图像的宽度].两者之间的区别MaxDisparity而且MinDisparity必须能被16DisparityRange必须是实的,有限的,非稀疏的。如果相机过去拍I1是在相机的右边吗I2,然后MinDisparity肯定是负的。

视差范围取决于两个相机之间的距离和相机与感兴趣的物体之间的距离。增加了DisparityRange当摄像机距离较远或物体离摄像机较近时。中显示输入图像的立体浮雕,以确定配置的合理视差图像查看器app,并使用距离工具测量对应点对之间的距离。修改MaxDisparity与测量相对应。

方形块大小,指定为逗号分隔的对,由'BlockSize'和范围为[5255]的奇数。此值设置正方形块大小的宽度。该函数使用正方形像素块进行比较I1而且I2BlockSize必须是实的,有限的,非稀疏的。

对比度阈值范围,指定为逗号分隔的对,由'ContrastThreshold'和范围(0,1]中的标量值。对比度阈值定义了一个可接受的对比度值范围。增加这个参数会导致标记为不可靠的像素减少。ContrastThreshold必须是实的,有限的,非稀疏的。

唯一性的最小值,指定为逗号分隔的对,由'UniquenessThreshold'和一个非负整数。增加这个参数会导致标记更多像素的函数不可靠。当像素的唯一性值较低时,为其计算的视差不太可靠。将阈值设置为0禁止唯一性阈值设置。UniquenessThreshold必须是实的,有限的,非稀疏的。

该函数将唯一性定义为最优视差估计和非最优视差估计的比值。例如:

K是最好的估计视差,让V为对应的SAD (Sum of Absolute Difference)值。
考虑V为整个视差范围内最小的SAD值,和v为整个视差范围内最小的SAD值,除KK1,K+ 1。
如果v<V* (1+0.01UniquenessThreshold),则该函数将像素的视差标记为不可靠。

两点之间从左到右图像检查的最大距离,指定为逗号分隔的对,由'DistanceThreshold'和一个非负整数。增加这个参数会导致标记为不可靠的像素减少。相反,当您降低距离阈值时,您将增加视差图的可靠性。您可以将此参数设置为空矩阵[]禁用它。DistanceThreshold必须是实的,有限的,非稀疏的。

距离阈值指定一个点之间的最大距离I1同样的一点I2.该函数以以下方式查找距离并标记像素:

p1是图像中的一个点1
第一步:函数搜索点p1在图像上的最佳匹配2(从左到右检查)并找到点p2
步骤2:函数搜索p2在图像上的最佳匹配1(从右向左检查)并找到点p3.
如果搜索返回之间的距离p1而且p3.大于DistanceThreshold,函数表示该点的视差p1是不可靠的。

最小纹理阈值,指定为逗号分隔的对,由'TextureThreshold'和一个范围为[0,1)的标量值。纹理阈值定义了一个像素可靠的最小纹理值。像素块的纹理越低,计算出的像素视差就越不可靠。增加这个参数会导致更多像素被标记为不可靠。可以设置为0禁用它。此参数仅在设置时生效方法“BlockMatching”

像素的纹理被定义为饱和度对比度的和BlockSize——- - - - - -BlockSize窗口周围的像素。当纹理低于下面定义的值时,该函数认为为像素计算的视差不可靠并标记它:

纹理<XTextureThresholdBlockSize2

X表示输入图像类支持的最大值,万博1manbetxI1而且I2

TextureThreshold必须是实的,有限的,非稀疏的。

输出参数

全部折叠

视差图为一对立体图像,返回为——- - - - - -N二维灰度图像。该函数返回与输入图像大小相同的视差图,I1而且I2.输出的每个元素指定图像引用中对应像素的视差为I1.返回的视差值四舍五入为 1 16 像素。

该函数分三步计算视差图:

  1. 通过使用索贝尔滤波器计算图像对比度的测量。

  2. 通过使用块匹配和绝对差(SAD)计算每个像素的视差。

  3. 可选地,标记包含不可靠的视差值的像素。该函数将像素设置为-返回的值最大浮点数('”)。

提示

如果生成的视差图看起来有噪声,请尝试修改DisparityRange.视差范围取决于两个相机之间的距离和相机与感兴趣的物体之间的距离。增加了DisparityRange当摄像机距离较远或物体离摄像机较近时。中显示输入图像的立体浮雕,以确定配置的合理视差图像查看器app,并使用距离工具测量对应点对之间的距离。修改MaxDisparity与测量相对应。

参考文献

[1] Konolige K,小视觉系统:硬件与实现,第8届机器人研究国际研讨会论文集,第203-212页,1997。

布拉德斯基,G.和A.凯勒,学习OpenCV:使用OpenCV库的计算机视觉,奥莱利,塞瓦斯托波尔,加利福尼亚州,2008年。

[3]赫施穆勒,H。基于半全局匹配和互信息的精确高效立体处理,计算机视觉与模式识别国际会议,2005。

扩展功能

版本历史

在R2011b中引入

全部展开