此示例显示了如何使用estimateFundamentalMatrix
,estimateUncalibratedRectification
, 和探测拍摄
用于计算两个未校准图像的校正的函数,其中摄像机的本质是未知的。
立体图像校正将图像投影到一个共同的图像平面上,使其对应点具有相同的行坐标。这个过程对于立体视觉是有用的,因为二维立体匹配问题被简化为一维立体匹配问题。例如,立体图像校正常被用作预处理步骤计算差异或者创造浮雕图像。
在同一场景的两个彩色图像中读取,从不同的位置取出。然后,将它们转换为灰度。匹配过程不需要颜色。
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));标题(合成图片(红色-左边图片,青色-右边图片));
图像在方向和位置上有明显的偏移。校正的目标是变换图像,对齐它们,使相应的点出现在两幅图像的同一行上。
整流过程需要两种图像之间的一组点对应关系。要生成这些对应关系,您将收集来自两个图像的感兴趣点,然后选择它们之间的潜在匹配。用探测拍摄
在两幅图像中寻找斑点状特征。
blobs1 = detectSURFFeatures (I1gray,'米兰克斯德',2000);blobs2 = detectsurffeatures(i2gray,'米兰克斯德',2000);
可视化I1和I2中三十个最强的冲浪功能的位置和比例。请注意,并非所有检测到的功能都可以匹配,因为它们在图像中未检测到,或者由于它们中的一些由于相机运动而不存在于其中一个图像中。
图;imshow (I1);持有上;绘图(Selectstrongest(Blobs1,30));标题(i1'中的三十个最强的冲浪功能);图;imshow (I2);持有上;绘图(Selectstrongest(Blobs2,30));标题(“I2中SURF的30个最强功能”);
使用提取物质
和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'中的指定匹配点);
正确匹配的点必须满足极子约束。这意味着一个点必须位于它的对应点所确定的极线上。您将使用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的内点”);
使用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。