主要内容

使用自动特征匹配查找图像旋转和缩放

这个例子展示了如何自动确定一对图像之间的几何变换。当一个图像相对于另一个图像由于旋转和缩放而变形时,使用detectSURFFeatures而且estgeotform2d求旋转角度和比例因子。然后可以对扭曲的图像进行转换,以恢复原始图像。

第一步:读取图像

在工作区中添加一个图像。

原始= imread (“cameraman.tif”);imshow(原始);文本(大小(原始的,2),大小(原始的,1)+ 15,...图片由麻省理工学院提供...字形大小= 7,HorizontalAlignment =“对”);

步骤2:调整大小和旋转图像

规模= 0.7;J = imresize(原始、规模);尝试改变比例因子。θ= 30;注意,不旋转时,图像逆时针方向旋转你指定一个正的旋转角度。。要顺时针旋转图像,%指定为负。扭曲= imrotate (J,θ);试着改变角度。图imshow(扭曲)

您可以通过改变输入图像的缩放和旋转来进行实验。但是,请注意,在特征检测器无法找到足够的特征之前,您可以改变的比例是有限制的。

步骤3:找到图像之间的匹配特征

检测两个图像中的特征。

ptsOriginal = detectSURFFeatures(原始);ptsDistorted = detectSURFFeatures(扭曲);

提取特征描述符。

[featuresOriginal, validPtsOriginal] = extractFeatures(原始ptsOriginal);[featuresDistorted, validPtsDistorted] = extractFeatures(扭曲,ptsDistorted);

通过使用描述符来匹配特征。

indexPairs = matchFeatures (featuresOriginal featuresDistorted);

检索每个图像对应点的位置。

matchedOriginal = validPtsOriginal (indexPairs (: 1));matchedDistorted = validPtsDistorted (indexPairs (:, 2));

显示假定的点匹配。

图showMatchedFeatures(原始的、扭曲、matchedOriginal matchedDistorted);标题(“假定的匹配点(包括异常值)”);

步骤4:估计转换

使用统计鲁棒m估计样本一致性(MSAC)算法找到匹配点对对应的转换,该算法是RANSAC算法的变体。它在计算变换矩阵时去除异常值。由于MSAC算法采用了随机抽样,您可能会看到变换计算的不同结果。

[tform, inlierIdx] = estgeotform2d(matcheddistortion,matchedOriginal,“相似”);inlierDistorted = matchedDistorted (inlierIdx:);inlierOriginal = matchedOriginal (inlierIdx:);

显示变换计算中使用的匹配点对。

图;showMatchedFeatures(原始、扭曲、inlierOriginal inlierDistorted);标题(“匹配点(仅内嵌)”);传奇(“ptsOriginal”“ptsDistorted”);

第五步:求解比例和角度

使用几何变换,tform,恢复比例和角度。由于我们计算了失真图像到原始图像的变换,我们需要计算它的逆来恢复失真。

设sc = s*cos()设ss = s*sin()
则,Ainv = [sc ss tx;党卫军sc泰;0 0 1]
其中tx和ty分别是x和y的平移。

计算逆变换矩阵。

invTform =反转(tform);Ainv = invTform.A;党卫军= Ainv(1、2);sc = Ainv (1,1);scaleRecovered =函数(ss, sc);disp ([的恢复:num2str (scaleRecovered)])恢复一个正数值表示的旋转顺时针方向。thetaRecovered = atan2d (ss, sc);disp ([“恢复θ:”num2str (thetaRecovered)])
恢复刻度:0.70255恢复theta: 29.7616

恢复的值应该与您选择的比例和角度值相匹配步骤2:调整大小和旋转图像

控件的缩放和旋转角度属性中也可以使用缩放和旋转角度simtform2d对象。

disp ([“:”num2str (invTform.Scale)]) disp ([“RotationAngle:”num2str (invTform.RotationAngle)))
比例:0.70255旋转角度:29.7616

步骤6:恢复原始映像

通过对失真图像的变换,恢复原始图像。

outputView = imref2d(大小(原始));恢复= imwarp(扭曲、tform OutputView = OutputView);

比较恢复原始用蒙太奇的方式并排看他们。

图,imshowpair(原始的,恢复,“蒙太奇”

恢复(右)图像质量不匹配原始(左)图像由于失真和恢复过程。特别是图像的缩小会造成信息的丢失。边缘周围的工件是由于有限的转换精度。如果你要检测更多的点步骤3:找到图像之间的匹配特征,转换会更准确。例如,我们可以使用一个角落检测器detectFASTFeatures来补充SURF特征检测器,它可以发现斑点。图像内容和图像大小也会影响检测到的特征的数量。

Baidu
map