未校准的立体图像整流

此示例显示了如何使用estismsfundamentalmatrix.estissuncalibratedrection., 和探测拍摄用于计算两个未校准图像的整流的功能,其中相机内在函数未知。

立体图像整流将图像投影到公共图像平面上,使得相应点具有相同的行坐标。该过程对立体声视觉有用,因为2-D立体声对应问题减少到1-D问题。作为示例,立体图像整流通常用作预处理步骤计算差异或创建一个胸角图像。

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

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

i1 = imread('yellowstone_left.png');i2 = imread('rellowstone_right.png');%转换为灰度。i1gray = rgb2gray(i1);i2gray = rgb2gray(i2);

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

数字;imshowpair(i1,i2,'剪辑');标题('I1(左);I2(右)');数字;imshow(立体式(I1,I2));标题('复合图像(红左图像,青色 - 右图像)');

在方向和位置之间的图像之间存在明显的偏移。整改的目标是转换图像,使它们对齐,使得对应的点将出现在两个图像中的相同行上。

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

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

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

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

数字;imshow(i1);抓住;绘图(Selectstrongest(Blobs1,30));标题(i1'中的三十个最强的冲浪功能);数字;imshow(i2);抓住;绘图(Selectstrongest(Blobs2,30));标题('I2'中的三十个最强的冲浪功能);

第3步:找到推定点对应

使用提取物质matchfeatures.用于找到推定点对应的功能。对于每个BLOB,计算冲浪功能向量(描述符)。

[特征1,validblobs1] =提取物(i1gray,blobs1);[特征2,validblobs2] =提取物(i2gray,blobs2);

使用绝对差异(SAD)度量标准的总和来确定匹配功能的指标。

IndexPairs = MatchFeatures(特性1,功能2,'公制''伤心'......'matchthreshold'5);

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

matchedpoints1 = vidbblobs1(indexpaitor(:,1),:);matchedpoints2 = videnblobs2(indexPairs(:,2),:);

在合成图像的顶部显示匹配点,即组合立体声图像。请注意,大多数匹配都是正确的,但仍有一些异常值。

数字;ShowMatchedFeatures(I1,I2,MatchedPoints1,MatchedPoints2);传奇('I1'中的指定点'I2'中的指定匹配点);

第4步:使用eMIPOLAR约束删除异常值

正确匹配的点必须满足eMipolar约束。这意味着一个点必须位于由其对应点决定的末端线上。你将使用estismsfundamentalmatrix.函数来计算基本矩阵并找到符合eMipolar约束的最基于。

[FMATRIX,EPIPOLARINLIERS,状态] = estImationFundamentalMatrix(......matchedpoints1,matchedpoints2,'方法''ransac'......'numtrials',10000,'distancethreshold',0.1,'置信度',99.99);如果状态〜= 0 ||isepipoleinimage(Fmatrix,尺寸(i1))......||IsepopoleInimage(FMATrix',尺寸(I2))错误([“没有足够的匹配点或”......'骨骼在图像内部。你可能需要'......'检查并提高检测到的特征质量'......'和/或改善图像的质量。]);结尾Inlierpoints1 = matchedpoints1(epipolarinliers,:);Inlierpoints2 = matchedpoints2(epipolarinliers,:);数字;ShowMatchedFeatures(I1,I2,Inlierpoints1,Inlierpoints2);传奇('I1'中的Inlier积分'I2'中的Inlier积分);

第5步:纠正图像

使用estissuncalibratedrection.函数来计算整流变换。这些可用于转换图像,使得相应的点将出现在同一行上。

[t1,t2] = estmisinguncalibratedrection(fmatrix,......InLierpoints1.Location,Inlierpoints2.Location,Size(I2));tform1 = projective2d(t1);tform2 = projective2d(t2);

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

[I1Rect,I2Rect] = rectifyStereoImages(I1,I2,Tform1,Tform2);数字;imshow(立体榕节(i1rect,i2rect));标题('纠正立体声图像(红色左图像,青色右图像)');

步骤6:概括整改过程

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

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

参考

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

[2]哈特利,r;Zisserman,A。“计算机愿景中的多视图几何”。剑桥大学出版社,2003年。

[3]哈特利,R。“捍卫八点算法。”IEEE®论文的Transaction and Machinal Intelligence,V.19 N.6,1997年6月。

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