主要内容

差距

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

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

描述

例子

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

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

例子

全部折叠

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

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

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

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

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

计算视差图。

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

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

图imshow(DisparityMap,DisparityRange);标题(“差距地图”);colormap colorbar (gca、飞机)

图中包含一个轴对象。具有标题差异映射的轴对象包含类型图像的对象。

输入参数

全部折叠

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

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

数据类型:uint8|uint16|int16||双倍的

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

数据类型:uint8|uint16|int16||双倍的

名称-值参数

指定可选的逗号分隔的对名称,值论点。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:“方法”“BlockMatching”,指定了“方法”财产将设置为“BlockMatching”

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

算法执行以下步骤:

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

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

  3. 标记视差地图的元素,disparityMap,计算不可靠。该函数使用-realmax.'单身的')标记这些元素。

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

视差范围取决于两个摄像机之间的距离以及摄像机和感兴趣的物体之间的距离。增加了disparityrange.当相机距离很远或物体离相机很近时。要为您的配置确定合理的视差,请在图像查看器应用程序,使用距离工具测量对应点对之间的距离。修改MaxDisparity与测量值相对应。

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

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

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

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

K最好的估计差距,让V为对应的SAD(绝对值差和)值。
考虑V作为整个差距范围内最小的悲伤价值,和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表示输入图像类支持的最大值,金宝appI1I2

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

输出参数

全部折叠

对立体图像的视差图,返回为-经过-N2-D灰度图像。该函数以与输入图像相同的大小返回视差图,I1I2.输出的每个元素指定图像参考中对应像素的视差为I1.返回的差异值舍入为 1 16 像素。

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

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

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

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

提示

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

兼容性的考虑

展开全部

不建议从R2019a开始

参考

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

[2] Bradski, G.和A. Kaehler,学习OpenCV:使用OpenCV库的计算机视觉,奥里利,塞巴斯托波尔,加州,2008年。

[3] Hirschmuller、H。基于半全局匹配和互信息的精确高效立体图像处理,计算机愿景和模式识别国际会议,2005年。

扩展功能

介绍了R2011b