主要内容

未校准的立体图像整流

此示例显示了如何使用estimateFundamentalMatrix,estimateUncalibratedRectification, 和探测拍摄用于计算两个未校准图像的校正的函数,其中摄像机的本质是未知的。

立体图像校正将图像投影到一个共同的图像平面上,使其对应点具有相同的行坐标。这个过程对于立体视觉是有用的,因为二维立体匹配问题被简化为一维立体匹配问题。例如,立体图像校正常被用作预处理步骤计算差异或者创造浮雕图像。

第1步:阅读立体声图像对

在同一场景的两个彩色图像中读取,从不同的位置取出。然后,将它们转换为灰度。匹配过程不需要颜色。

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

并排显示两个图像。然后,显示彩色组合,演示图像之间的像素明显差异。

图;imshowpair(i1,i2,“蒙太奇”);标题('I1(左);I2(右)');图;imshow (stereoAnaglyph (I1、I2));标题(合成图片(红色-左边图片,青色-右边图片));

图像在方向和位置上有明显的偏移。校正的目标是变换图像,对齐它们,使相应的点出现在两幅图像的同一行上。

第2步:从每个图像中收集兴趣点

整流过程需要两种图像之间的一组点对应关系。要生成这些对应关系,您将收集来自两个图像的感兴趣点,然后选择它们之间的潜在匹配。用探测拍摄在两幅图像中寻找斑点状特征。

blobs1 = detectSURFFeatures (I1gray,'米兰克斯德',2000);blobs2 = detectsurffeatures(i2gray,'米兰克斯德',2000);

可视化I1和I2中三十个最强的冲浪功能的位置和比例。请注意,并非所有检测到的功能都可以匹配,因为它们在图像中未检测到,或者由于它们中的一些由于相机运动而不存在于其中一个图像中。

图;imshow (I1);持有;绘图(Selectstrongest(Blobs1,30));标题(i1'中的三十个最强的冲浪功能);图;imshow (I2);持有;绘图(Selectstrongest(Blobs2,30));标题(“I2中SURF的30个最强功能”);

步骤3:找到假定的点通信

使用提取物质matchfeatures.函数来寻找假定的点对应。对于每个blob,计算SURF特征向量(描述符)。

[featres1, validBlobs1] = extractFeatures(I1gray, blobs1);[featres2, 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:使用极面约束去除异常值

正确匹配的点必须满足极子约束。这意味着一个点必须位于它的对应点所确定的极线上。您将使用estimateFundamentalMatrix函数来计算基本矩阵并找到符合eMipolar约束的最基于。

[fMatrix, epipolarInliers, status] = estimateFundamentalMatrix(matchedPoints1 matchedPoints2,“方法”,'ransac','numtrials', 10000,“DistanceThreshold”, 0.1,'置信度',99.99);如果status ~= 0 || isEpipoleInImage(fMatrix, size(I1))||IsepopoleInimage(FMATrix',尺寸(I2))错误([“没有足够的匹配点或”'骨骼在图像内部。你可能需要'“检查并提高检测到的特征的质量”,"和/或提高你的图片质量"]);结束inlierPoints1 = matchedPoints1(epipolarInliers,:);inlierPoints2 = matchedPoints2(epipolarInliers,:);图;showMatchedFeatures(I1, I2, inlierPoints1, inlierPoints2);传奇(“I1的内点”,“I2的内点”);

第5步:纠正图像

使用estimateUncalibratedRectification函数来计算校正变换。这些可以用来变换图像,这样对应的点就会出现在同一行上。

[t1,t2] = estmisinguncalibratedrection(fmatrix,inlierPoints1。位置,inlierPoints2。位置、大小(I2));tform1 = projective2d (t1);tform2 = projective2d (t2);

纠正立体声图像,并将其作为立体声剖视图显示。您可以使用Red-Cyan立体声眼镜查看3D效果。

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

第六步:总结整改过程

上述步骤中使用的参数已设置为适合两个特定的立体图像。若要处理其他图像,可以使用CVEXRectifyStereoImages.功能,其中包含附加逻辑自动调整整流参数。下图显示了使用此函数处理一对图像的结果。

cvexRectifyImages ('停车垃圾_left.png','starllot_right.png');

参考

[1] Trucco,E;Verri,A。“3-D计算机愿景的介绍技术。Prentice Hall,1998年。

[2]哈特利,R;Zisserman,。计算机视觉中的多视图几何。剑桥大学出版社,2003。

[3]哈特利,R。"为八点算法辩护"《IEEE模式分析与机器智能汇刊》,第19卷第6期,1997年6月。

[4] Fischler,MA;棉铃,rc。“随机示例共识:用于模型适用于应用于图像分析和自动化制图的范式。”Comm。1981年6月24日的ACM 24。