主要内容

使用自动功能匹配查找图像旋转和刻度

此示例显示如何自动确定一对图像之间的几何变换。当一个图像通过旋转和缩放相对于另一个图像被扭曲时,使用探测拍摄estimateGeometricTransform2d.找到旋转角度和比例因子。然后,您可以转换扭曲的图像以恢复原始图像。

第1步:读取图像

将图像带入工作区。

原始= imread('cameraman.tif');imshow(原创);文字(尺寸(原件,2),尺寸(原版,1)+15,......“图片由马萨诸塞州理工学院提供”......'字体大小'7,'水平对齐''正确的');

第2步:调整大小并旋转图像

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

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

第3步:查找图像之间的匹配功能

检测两个图像中的特征。

ptsoriginal =探测器(原版);ptsdistorted =检测到(扭曲);

提取功能描述符。

[特征诡计,validptsoriginal] =提取物(原始,冒号);[具有截图,validptsdistorted] =提取物(扭曲,ptordistored);

使用其描述符匹配功能。

IndexPairs = MatchFeatures(特点,具有特色);

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

matchedoriginal = validptsoriginal(indexpairs(:,1));matcheddistored = validptsdistorted(indexPairs(:,2));

显示推定点匹配。

数字;ShowMatchedFeatures(原版,扭曲,Matchedoriginal,MatchedDistorted);标题('提供匹配的积分(包括异常值)');

第4步:估计转型

使用统计上鲁棒的M估计的样本共识(MSAC)算法找到与匹配点对对应的转换,这是RANSAC算法的变型。计算转换矩阵时,它会删除异常值。由于MSAC算法采用的随机采样,您可能会看到变换计算的变化结果。

[tform,inlieridx] = estimateGeometricTransform2D(......matcheddistorted,matchedoriginal,'相似');Inlierdistorted = matchedDistorted(Inlieridx,:);Inlieriginal = MatchedOriginal(Inlieridx,:);

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

数字;ShowMatchedFeatures(原始,扭曲,inlieriginal,Inlierdistort);标题('匹配点(仅限最基于)');传奇('ptsoriginal''ptsdistorted');

第5步:解决规模和角度

使用几何变换,tform,恢复比例和角度。由于我们从扭曲到原始图像的转换,我们需要计算其反向恢复失真的反向。

让sc = s * cos(theta)让ss = s * sin(θ)
然后,TINV = [SC -SS 0;ss sc 0;TX TY 1]
其中tx和ty分别是x和y翻译。

计算逆变换矩阵。

tinv = tform.invert.t;ss = tinv(2,1);sc = tinv(1,1);scalerecovered = sqrt(ss * ss + sc * sc)thetarecovered = atan2(ss,sc)* 180 / pi
scalerecovered =单个0.7010 Thetarecovered =单身30.2351

恢复的值应符合所选的比例和角度值第2步:调整大小并旋转图像

第6步:恢复原始图像

通过转换扭曲的图像来恢复原始图像。

OutputView = IMREF2D(大小(原始));恢复= imwarp(扭曲,tform,'OutputView',OutputView);

比较恢复原来的通过在蒙太奇中并排看他们。

图,imshowpair(原始,恢复,'剪辑'

恢复(右)图像质量不匹配原来的(左)图像由于失真和恢复过程。特别地,图像缩小导致信息损失。边缘周围的伪影是由于变换的有限精度。如果你要检测更多要点第3步:查找图像之间的匹配功能,转型将更加准确。例如,我们可以使用拐角探测器检测到,以补充找到斑点的冲浪特征检测器。图像内容和图像大小也影响了检测到的功能的数量。