差距

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

差距不建议使用。使用不平等disparitySGM相反。有关更多信息,请参阅兼容性的考虑

描述

实例

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

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

例子

全部崩溃

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

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”,差异范围);

显示视差图。为了更好地显示,请使用视差范围作为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”“半全球化”。视差函数实现基本块匹配[1]和半全局块匹配[3]算法。在“BlockMatching”方法,该函数通过比较图像中每个像素块的绝对差之和(SAD)来计算视差“半全球化”在匹配方法中,该函数会在相邻块上额外强制相似的视差。这种额外的约束会导致比原始块更完整的视差估计“BlockMatching”方法。

算法执行以下步骤:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

纹理<X*纹理保留*块大小2.

X表示输入图像类支持的最大值,金宝appI1I2

纹理保留必须是实的,有限的,非稀疏的。

输出参数

全部崩溃

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

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

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

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

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

提示

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

兼容性的考虑

全部展开

不建议从R2019a开始

参考文献

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

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

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

扩展功能

在R2011b中引入