此示例显示了如何使用estismsfundamentalmatrix.
那estissuncalibratedrection.
, 和探测拍摄
用于计算两个未校准图像的整流的功能,其中相机内在函数未知。
立体图像整流将图像投影到公共图像平面上,使得相应点具有相同的行坐标。该过程对立体声视觉有用,因为2-D立体声对应问题减少到1-D问题。作为示例,立体图像整流通常用作预处理步骤计算差异或创建一个胸角图像。
在同一场景的两个彩色图像中读取,从不同的位置取出。然后,将它们转换为灰度。匹配过程不需要颜色。
i1 = imread('yellowstone_left.png');i2 = imread('rellowstone_right.png');%转换为灰度。i1gray = rgb2gray(i1);i2gray = rgb2gray(i2);
并排显示两个图像。然后,显示彩色组合,演示图像之间的像素明显差异。
数字;imshowpair(i1,i2,'剪辑');标题('I1(左);I2(右)');数字;imshow(立体式(I1,I2));标题('复合图像(红左图像,青色 - 右图像)');
在方向和位置之间的图像之间存在明显的偏移。整改的目标是转换图像,使它们对齐,使得对应的点将出现在两个图像中的相同行上。
整流过程需要两种图像之间的一组点对应关系。要生成这些对应关系,您将收集来自两个图像的感兴趣点,然后选择它们之间的潜在匹配。采用探测拍摄
在两个图像中查找类似BLOB的功能。
blobs1 = detectsurfepures(i1gray,'米兰克斯德',2000);blobs2 = detectsurffeatures(i2gray,'米兰克斯德',2000);
可视化I1和I2中三十个最强的冲浪功能的位置和比例。请注意,并非所有检测到的功能都可以匹配,因为它们在图像中未检测到,或者由于它们中的一些由于相机运动而不存在于其中一个图像中。
数字;imshow(i1);抓住在;绘图(Selectstrongest(Blobs1,30));标题(i1'中的三十个最强的冲浪功能);数字;imshow(i2);抓住在;绘图(Selectstrongest(Blobs2,30));标题('I2'中的三十个最强的冲浪功能);
使用提取物质
和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'中的指定匹配点);
正确匹配的点必须满足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积分);
使用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));标题('纠正立体声图像(红色左图像,青色右图像)');
上述步骤中使用的参数已经设置为适合两个特定的立体图像。要处理其他图像,您可以使用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。