主要内容

未校准的立体形象整改

这个例子展示了如何使用estimateFundamentalMatrix,estimateStereoRectification,detectSURFFeatures函数来计算两个未校准的整改图片,相机的intrinsic是未知的。

立体形象整改项目图片到一个通用的图像平面的方式对应的坐标点有相同的行。立体视觉的这个过程是非常有用的,因为二维立体通信问题是减少到一个一维问题。作为一个例子,立体图像矫正通常是用作计算或创建一个预处理步骤浮雕图像。更多细节,请参阅深度估计从立体视频的例子。

第一步:阅读立体图像对

读两个彩色图像相同的场景,从不同的位置。然后,将其转换成灰度。颜色不匹配所需的过程。

I1 = imread (“yellowstone_left.png”);I2 = imread (“yellowstone_right.png”);%转换为灰度。I1gray = im2gray (I1);I2gray = im2gray (I2);

显示两个图像。然后,显示一个颜色组合展示pixel-wise图像之间的差异。

图imshowpair (I1、I2“蒙太奇”)标题(“I1(左);I2(右)”)

图包含一个坐标轴对象。坐标轴对象与标题I1(左);I2(右)包含一个类型的对象的形象。

图imshow (stereoAnaglyph (I1、I2))标题(“合成图像(红色-左图,青色,右图)”)

图包含一个坐标轴对象。坐标轴对象标题复合图像(红色-左图,青色,右图)包含一个类型的对象的形象。

之间有一个明显的偏移方向和位置的图像。整顿的目的是将图像,调整它们,这样对应点在图像将出现在相同的行。

第二步:收集每个图像的兴趣点

精馏过程需要一组点两幅图像之间的对应关系。来生成这些通讯,你会收集两图像的兴趣点,然后选择它们之间潜在的匹配。使用detectSURFFeatures找到图像状的特性。

blobs1 = detectSURFFeatures (I1gray MetricThreshold = 2000);blobs2 = detectSURFFeatures (I2gray MetricThreshold = 2000);

可视化的位置和规模三十I1和I2最强冲浪特性。请注意,并不是所有的检测功能可以不匹配,因为他们发现在两个图像或因为他们中的一些没有出现在图像由于摄像机运动之一。

图imshow (I1)情节(selectStrongest (blobs1 30)标题(“I1三十最强冲浪功能”)

图包含一个坐标轴对象。坐标轴对象与标题三十最强I1冲浪特性包含3图像类型的对象,线。一个或多个行显示的值只使用标记

图imshow (I2)情节(selectStrongest (blobs2 30)标题(“I2三十最强冲浪功能”)

图包含一个坐标轴对象。坐标轴对象与标题三十最强I2冲浪特性包含3图像类型的对象,线。一个或多个行显示的值只使用标记

第三步:找到公认的对应点

使用extractFeaturesmatchFeatures通讯功能找到公认的点。对于每一个blob,计算海浪特征向量(描述符)。

[features1, validBlobs1] = extractFeatures (I1gray blobs1);[features2, validBlobs2] = extractFeatures (I2gray blobs2);

使用绝对差异的总和(SAD)指标来确定指标的匹配特性。

indexPairs = matchFeatures (features1 features2,公制=“悲伤”,MatchThreshold = 5);

为每个图像检索匹配点的位置。

matchedPoints1 = validBlobs1 (indexPairs (: 1):);matchedPoints2 = validBlobs2 (indexPairs (:, 2):);

显示匹配点在合成图像,结合立体图像。注意到大部分的比赛是正确的,但仍然有一些异常值。

图showMatchedFeatures (I1、I2 matchedPoints1 matchedPoints2)传说(“在I1推定地匹配点”,“I2推定地匹配点”)

图包含一个坐标轴对象。坐标轴对象包含4图像类型的对象,线。一个或多个行显示的值只使用这些对象标记代表推定地匹配点在I1, I2推定地匹配点。

步骤4:使用纵向约束删除离群值

正确匹配点必须满足纵向约束。这意味着一个点必须躺在纵向线由其相应的点。您将使用estimateFundamentalMatrix函数来计算基本矩阵和找到满足的内围层纵向约束。

(fMatrix、epipolarInliers、状态)= estimateFundamentalMatrix (matchedPoints1 matchedPoints2方法=“RANSAC”,NumTrials = 10000, DistanceThreshold = 0.1,信心= 99.99);如果状态~ = 0 | | isEpipoleInImage (fMatrix大小(I1))| | isEpipoleInImage (fMatrix ',大小(I2))错误([“不够匹配点被发现或”“核点在图像。检查”“和提高检测质量特性”,“和图像”。]);结束inlierPoints1 = matchedPoints1 (epipolarInliers:);inlierPoints2 = matchedPoints2 (epipolarInliers:);图showMatchedFeatures (I1、I2 inlierPoints1 inlierPoints2)传说(“在I1窗点”,“I2窗点”)

图包含一个坐标轴对象。坐标轴对象包含4图像类型的对象,线。一个或多个行显示的值只使用标记这些对象代表窗点在I1, I2窗点。

第五步:纠正图像

使用estimateStereoRectification函数计算整流转换。这些可以用来转换图像,这样对应点会出现在相同的行。

[tform1, tform2] = estimateStereoRectification (fMatrix,inlierPoints1.Location inlierPoints2.Location,大小(I2));

纠正立体图像,并显示立体浮雕。您可以使用red-cyan立体眼镜,就能看到3 d效果。

[I1Rect, I2Rect] = rectifyStereoImages (I1、I2 tform1 tform2);图imshow (stereoAnaglyph (I1Rect I2Rect)标题(“纠正立体影像(红色-左图,青色,右图)”)

图包含一个坐标轴对象。坐标轴对象与标题纠正立体影像(红色-左图,青色,右图)包含一个类型的对象的形象。

第六步:推广精馏过程

上述步骤中使用的参数已经设置为适合这两个特定的立体影像。处理其他图像,你可以使用cvexRectifyStereoImages函数,它包含额外的逻辑来自动调节整流参数。下图显示了一对图像处理的结果使用这个函数。

cvexRectifyImages (“parkinglot_left.png”,“parkinglot_right.png”);

图包含一个坐标轴对象。坐标轴对象与标题纠正立体影像(红色-左图,青色,右图)包含一个类型的对象的形象。

引用

[1]Trucco E;维利,A。“入门三维计算机视觉的技术。”Prentice Hall, 1998.

[2]哈特利,R;Zisserman,。在计算机视觉“多视图几何。”Cambridge University Press, 2003.

[3]哈特利,R。“在8点算法的防御。”IEEE® Transactions on Pattern Analysis and Machine Intelligence, v.19 n.6, June 1997.

[4]>马;葛,RC。“随机样本共识:一个范例模型拟合应用图像分析和自动制图。”Comm. Of the ACM 24, June 1981.