主要内容

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

这个例子展示了如何自动确定一对图像之间的几何变换。当一个图像相对于另一个图像被旋转和缩放扭曲时,使用detectSURFFeaturesestimateGeometricTransform2D寻找旋转角度和比例因子。然后,您可以变换扭曲的图像恢复原始图像。

步骤1:读取图像

将映像带到工作区中。

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

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

规模= 0.7;J = imresize(原始,缩放);%尝试改变比例因子。θ= 30;扭曲= imrotate (J,θ);试试改变角度。图中,imshow(扭曲)

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

第三步:寻找图像之间的匹配特征

检测两幅图像的特征。

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

提取特征描述符。

[featuresOriginal, validptsorigal] = extractFeatures(original, ptsorigal);[featresdistortion, validptsdistortion] = extractFeatures(畸变的,失真的);

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

indexPairs = matchFeatures(featuresOriginal, featuresdistortion);

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

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

显示假定的点匹配。

图;showMatchedFeatures(原始、扭曲、matchedOriginal matchedDistorted);标题(“假定匹配点(包括离群点)”);

步骤4:估计变换

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

[tform, inlierIdx] = estimategeometritransform2d (...matchedDistorted matchedOriginal,“相似”);inlierdistortion = matcheddistortion (inlierIdx,:);inlierOriginal = matchedOriginal(inlierIdx,:);

显示匹配点对用于计算变换。

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

第五步:计算比例和角度

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

设sc = s cos()设ss = s sin()
然后,Tinv = [sc -ss 0;党卫军sc 0;tx泰1]
其中tx和ty分别是x和y的转换。

计算逆变换矩阵。

Tinv = tform.invert.T;党卫军= Tinv (2, 1);sc = Tinv (1,1);scarerecovered = sqrt(ss*ss + sc*sc) thetaRecovered = atan2(ss,sc)*180/pi
scalerrecovered = single 0.7010 thetaRecovered = single 30.2351

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

步骤6:恢复原始图像

通过对扭曲图像进行变换,恢复原始图像。

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

比较恢复原始用蒙太奇的手法把它们放在一起看。

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

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