差距

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

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

描述

例子

disparityMap=差异(I1I2返回视差图,disparityMap,用于一对立体图像,I1I2

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

例子

全部折叠

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

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

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

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

计算视差图。

差异范围= [-6 10];disparityMap =差距(rgb2gray (I1) rgb2gray (I2),“BlockSize”...15,“DisparityRange”, disparityRange);

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

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

输入参数

全部折叠

输入图像引用为I1对应于相机1,在二维灰度中指定。立体影像,I1I2,必须纠正,使相应的点位于同一行。可以使用rectifyStereoImages函数。

可以通过设置类来提高函数的运行速度I1I2uint8,以及能被4整除的列数。输入的图像I1I2必须是实的,有限的,非稀疏的。它们必须是同一个类。

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

输入图像引用为I2对应于相机2,以二维灰度表示。必须对输入图像进行校正,使相应的点位于同一行上。可以通过设置类来提高函数的运行速度I1I2uint8,以及能被4整除的列数。输入的图像I1I2必须是实的,有限的,非稀疏的。它们必须是同一个类。

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

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

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

视差估计算法,指定为逗号分隔对,由'方法”,要么“BlockMatching”“SemiGlobal”.视差函数实现了基本的块匹配[1]和半全局块匹配[3]算法。在“BlockMatching”方法,通过比较图像中每个像素块的绝对差值(SAD)和来计算视差。在“SemiGlobal”在匹配方法中,该函数还对相邻块施加类似的视差。这种额外的约束导致了比在“BlockMatching”方法。

算法执行以下步骤:

  1. 通过使用Sobel滤波器计算图像的对比度。

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

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

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

视差范围取决于两个摄像机之间的距离以及摄像机和感兴趣的物体之间的距离。增加了DisparityRange当相机距离很远或物体离相机很近时。要为您的配置确定一个合理的视差,请在中显示输入图像的立体浮雕imtool使用Distance工具测量对应点对之间的距离。修改MaxDisparity与测量值相对应。

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

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

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

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

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

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

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

p1成为形象中的一个点1
步骤1:函数搜索点p1它在形象上是最匹配的2(从左到右检查)并找到点p2
步骤2:函数搜索p2它在形象上是最匹配的1(从右到左检查)并找到点p3.
如果搜索返回一个距离p1p3.大于DistanceThreshold,函数标记点的视差p1是不可靠的。

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

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

纹理<XTextureThresholdBlockSize2

X表示输入图像类支持的最大值,万博1manbetxI1I2

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

输出参数

全部折叠

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

该函数通过三个步骤计算视差图:

  1. 通过使用Sobel滤波器计算图像的对比度。

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

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

提示

如果你得到的视差图看起来很嘈杂,尝试修改DisparityRange.视差范围取决于两个摄像机之间的距离以及摄像机和感兴趣的物体之间的距离。增加了DisparityRange当相机距离很远或物体离相机很近时。要为您的配置确定一个合理的视差,请在中显示输入图像的立体浮雕imtool使用Distance工具测量对应点对之间的距离。修改MaxDisparity与测量值相对应。

兼容性的考虑

全部展开

不建议从R2019a开始

参考文献

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

[2] Bradski, G.和A. Kaehler,学习OpenCV:使用OpenCV库的计算机视觉, O'Reilly, Sebastopol, CA, 2008。

[3] Hirschmuller、H。基于半全局匹配和互信息的精确高效立体图像处理计算机视觉与模式识别,2005。

扩展功能

介绍了R2011b