主要内容

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

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

第一步:读取图像

将图像带入工作区。

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

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

量表= 0.7;J = imresize(original, scale);试着改变比例因子。Theta = 30;扭曲= imrotate(J, θ);试着改变角度。图中,imshow(扭曲)

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

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

检测两个图像中的特征。

ptsorigoriginal =检测特征(原始);ptsdistortion = detectsurfeatuatures(扭曲的);

提取特性描述符。

[featresoriginal, validptsorigoriginal] = extractFeatures(original, ptsorigoriginal);[featuresdistortion, validptsdistortion] = extractFeatures(扭曲,ptsdistortion);

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

indexPairs = matchFeatures(featuresOriginal, featuresdistortion);

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

matchedOriginal = validptsorigoriginal (indexPairs(:,1));matcheddistortion = validptsdistortion (indexPairs(:,2));

显示假定的点匹配。

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

步骤4:估计转换

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

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

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

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

第五步:求出比例和角度

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

令sc = s*cos()令ss = s*sin()
那么,Tinv = [sc -ss 0;Ss sc 0;[n .]
其中tx和ty分别是x和y的平移。

计算逆变换矩阵。

Tinv = tform.invert;ss = Tinv(2,1);sc = Tinv(1,1);scalercovered =√(ss*ss + sc*sc) thetaRecovered = atan2(ss,sc)*180/pi
thetaRecovered = single 30.2351

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

步骤6:恢复原始映像

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

outputView = imref2d(size(original));恢复= imwarp(扭曲的,tform,“OutputView”, outputView);

比较恢复原始用蒙太奇的方式把他们放在一起看。

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

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