disparityBM

使用块匹配计算的视差图

描述

disparityMap= disparityBM(I1I2计算视差图从一对整流立体图像的I1I2中,通过使用块匹配法。要了解更多关于整顿立体图像,看图像几何校正

disparityMap= disparityBM(I1I2名称,值使用一个或多个名称值对的参数指定的选项。

例子

全部收缩

加载一个整流立体对图像。

I1 = imread('rectified_left.png');I2 = imread('rectified_right.png');

创建将经整流的立体对图像的立体浮雕并显示它。可以在3-d通过使用红蓝立体眼镜观看图像。

A = stereoAnaglyph(I1,I2);图imshow(A)标题(“经整流的立体对图像的红色青色复合视图”

转换整流输入彩色图像灰度图像。

J1 = rgb2gray(I1);J2 = rgb2gray(I 2);

计算视差图。指定的视差为[0,48]的范围内,和唯一的20的最小值。

disparityRange = [0 48];disparityMap = disparityBM(J1,J2,'DisparityRange',disparityRange,'UniquenessThreshold',20);

显示视差图。的显示范围设定为相同的值的视差范围。

图imshow(disparityMap,disparityRange)标题(“差异图”)颜色表喷射彩条

输入参数

全部收缩

输入图像作为参考I1对应于摄像机1,指定为2-d的灰度图像或gpuArray宾语。该函数使用这个图像作为用于计算视差图的参考图像。输入图像I1I2必须是真实的,有限的,非稀疏。也,I1I2必须是相同的大小和相同的数据类型。

数据类型:||INT16|UINT8|UINT16

输入图像作为参考I2对应于照相机2,指定为2-d的灰度图像或gpuArray宾语。输入图像I1I2必须是真实的,有限的,非稀疏。I1I2必须是相同的大小和相同的数据类型。

数据类型:||INT16|UINT8|UINT16

名称 - 值对参数

指定可选的用逗号分隔的对名称,值参数。名称是参数的名称和是对应的值。名称必须出现引号内。您可以按照任何顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例:disparityBM(I1,I2, 'DisparityRange',[0 64])

视差的范围,指定为逗号分隔的一对组成的'DisparityRange'和具有以下形式的两个元素的矢量[MinDisparityMaxDisparity]。MinDisparity是最小的差距,MaxDisparity是最大的差距。该范围内必须满足的条件取决于输入图像的类型。

如果输入图像是宽的灰度图像ñ, 然后:

  • MinDisparityMaxDisparity必须在范围(整数 -ññ)。

  • 该之间的差异MaxDisparityMinDisparity值必须由16和小于输入图像的宽度整除。

如果输入图像gpuArray宽度的对象ñ, 然后:

  • 的价值MinDisparity必须等于零。

    的价值MaxDisparity必须是在范围(16,ñ)。如果ñ大于256,则MaxDisparity必须小于选为或等于256。

    该之间的差异MaxDisparityMinDisparity值必须由16整除。

对于视差的范围的默认值是[0 64]。有关选择视差的范围的更多信息,请参阅选择差异的范围

平方块的大小,指定为逗号分隔的一对组成的'BLOCKSIZE'和一个奇整数。此值指定整流立体对图像中使用块匹配的像素的搜索窗口的宽度。的范围内的大小的平方块依赖于输入图像的类型。

如果输入图像的灰度图像,'BLOCKSIZE'值必须在[5,255]的范围内的奇整数。

如果输入图像gpuArray对象时,'BLOCKSIZE'值必须在[5,51]的范围内的奇整数。

默认值是15。

对比阈值的范围内,指定为逗号分隔的一对组成的'ContrastThreshold'和范围内的标量值(0,1]。对比度阈值定义的对比度值的可接受范围。如果参考图像中的像素的对比度值低于对比阈值,然后,计算该像素的视差被认为是靠不住。视差较少的像素提高这个参数结果被标记为不可靠的。

唯一性的最小值,指定为逗号分隔的一对组成的'UniquenessThreshold'和一个非负整数。

该功能标记的估计差异值ķ一个像素是不可靠的,如果:

v<V×(1 + 0.01×UniquenessThreshold

哪里V是对应于视差值绝对差的和(SAD)ķv是在整个视差范围最小SAD值,不包括ķķ-1,ķ+1。

增加的价值UniquenessThreshold结果在更多的像素差异值被标记为不可靠的。要禁用唯一性阈值,将该值设置为[]

注意

如果输入图像gpuArray对象,那么'UniquenessThreshold'名称 - 值对参数不适。

在立体像对图像共轭的像素之间的最大距离,指定为逗号分隔的一对组成的'DistanceThreshold'和一个非负整数。距离阈值指定的像素之间的最大距离I1和相同的像素发现I2

对于像素p1在参照图像I1,函数执行左到右的检查,以找到其最佳匹配像素p2在图像I2。对于像素p2,函数执行右到左的检查,以找到其最佳匹配像素p3在参照图像I1。如果之间的距离p1p3比更大DistanceThreshold中,功能标记的视差的像素p1在参照图像I1为不可靠的。

增加的价值DistanceThreshold结果在较少的像素差异值被标记为不可靠的。相反,减小的值DistanceThreshold,提高了视差图的可靠性。到禁止使用距离阈值的,将该值设置为[]

注意

如果输入图像gpuArray对象,那么'DistanceThreshold'名称 - 值对参数不适。

最小纹理阈值,指定为逗号分隔的一对组成的'TextureThreshold'和在范围[0,1)的标量值。

一个像素的结构被定义为饱和的对比度上计算总和BLOCKSIZE-通过-BLOCKSIZE窗口的像素周围。纹理阈值定义为一个像素具有可靠的视差值最小纹理值。该功能为考虑的像素是不可靠的,如果差距:

质地<强度最大×TextureThreshold×BLOCKSIZE2

哪里质地是一个像素的结构。强度最大是最大值由输入图像的数据类型支持金宝appI1I2

增加的价值'TextureThreshold'结果在更多的像素差异值被标记为不可靠的。要禁用质感门槛,将该值设置为[]

输出参数

全部收缩

视差图整流立体对图像,返回为2-d的灰度图像或gpuArray宾语。该函数返回视差图具有相同的大小作为输入图像I1I2。在这个输出中的每个值是指立体对图像中的共轭象素之间的位移。有关计算视差图的详细信息,请参阅计算视差图使用块匹配

数据类型:

更多关于

全部收缩

图像几何校正

输入图像I1I2必须计算视差图之前予以纠正。整流确保了立体对图像中的对应点在相同的行。您可以通过纠正输入立体对图像rectifyStereoImages功能。参考图像必须整顿和视差图计算一样。

算法

全部收缩

选择差异的范围

视差的范围必须被选择来覆盖最小和经整流的立体对图像中的对应像素之间的水平位移的最大量。可以从立体对图像的立体浮雕确定近似水平移位值。通过计算整流图像的立体浮雕stereoAnaglyph功能。通过使用显示在图像查看器的立体浮雕imtool功能。为了测量立体对图像中的对应点之间的水平移位量中,选择测量距离来自工具菜单中的图像浏览器。选择视差基于该测量的范围内的最小和最大视差值。

例如,该图中显示的整流立体对图像的立体浮雕和立体对图像中的对应点之间测得的水平移位值。的最小和最大位移值分别计算为8和31。基于这些值,视差的范围可以被选择为[0,48]。

计算视差图使用块匹配

该功能通过以下步骤计算视差图:

  1. 通过使用给出的块匹配法计算每个像素的视差[1]

    • 对于CPU - 绝对差的和(SAD)作为在块匹配成本函数。成本函数估计所述整流立体对图像中的像素之间的移位。

    • 对于GPU - 平方差的总和(SSD)被用作在块匹配成本函数。成本函数估计所述整流立体对图像中的像素之间的移位。

  2. 可选,标志着基础上,对不可靠的像素ContrastThresholdUniquenessThresholdDistanceThresholdTextureThreshold名称 - 值对。该功能将不可靠的差距值为NaN

参考

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

[2] Bradski,G。和A. Kaehler。学习OpenCV的:计算机视觉与OpenCV库。塞瓦斯托波尔,CA:O'Reilly Media公司,2008年公司。

扩展功能

介绍了在R2019a