这个例子展示了如何自动确定一对图像之间的几何变换。当一幅图像因旋转和缩放而相对于另一幅图像失真时,使用detectSURFFeatures
和estimateGeometricTransform
找到的旋转角度和比例因子。然后,您可以将失真图像恢复原始图像。
带来的图像到工作空间。
原始= imread('cameraman.tif');imshow(原件);文本(大小(原始,2),大小(原始,1)15,...“麻省理工学院的图片由”,...'字体大小',7,'水平对齐',“对”);
规模= 0.7;J = imresize(原始,缩放);%尝试不同的比例因子。THETA = 30;扭曲= imrotate(J,THETA);%尝试改变角度,θ-。图中,imshow(失真的)
您可以通过改变输入图像的缩放和旋转试验。但是,请注意,是有一定限度的金额之前特征检测部未能找到足够的功能,你可以改变的规模。
检测两个图像中的特征。
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);标题(“推定的匹配点(包括异常值)”);
找到对应于使用所述统计稳健M估计采样一致性(MSAC)算法,这是RANSAC算法的一个变型的匹配点对的变换。而计算的变换矩阵它去除异常值。您可能会看到,因为由MSAC算法采用随机抽样的变换计算的不同的结果。
[TForm的,inlierDistorted,inlierOriginal] = estimateGeometricTransform(...matchedDistorted,matchedOriginal,“相似”);
在变换的计算所使用的显示器的匹配点对。
数字;showMatchedFeatures(原始的,扭曲的,inlierOriginal,inlierDistorted);标题(“匹配点(正常值只)”);传奇('ptsOriginal','ptsDistorted');
使用几何变换,tform,恢复比例和角度。由于我们计算了从失真到原始图像的变换,我们需要计算它的逆来恢复失真。
让SC = S * COS(THETA)让SS = S * SIN(THETA)
则Tinv = [sc -ss 0;党卫军sc 0;tx泰1]
其中tx和ty分别为x和y的翻译。
计算逆变换矩阵。
TINV = tform.invert.T;SS = Tinv的(2,1);SC = Tinv的(1,1);scaleRecovered = SQRT(β* SS + SC * SC)thetaRecovered = ATAN2(SS,SC)* 180 / PI
scaleRecovered =单0.7010 thetaRecovered =单30.2351
回收的价值应与选定的规模和角度值第2步:调整大小和旋转图像。
通过将失真图像恢复原始图像。
outputView = imref2d(大小(原始));恢复= imwarp (tform扭曲,'OutputView',outputView);
比较恢复
至原始
看着他们并排侧蒙太奇。
人物,imshowpair(原件,恢复,'剪辑')
该恢复
(右)图像质量不匹配原始
(左)图像因失真而恢复过程。特别是图像的收缩会造成信息的丢失。边缘的伪影是由于转换精度的限制。如果你发现更多的点步骤3:寻找图像之间的匹配特征,转型会更准确。例如,我们可以使用一个角落探测器,detectFASTFeatures,以补充其发现斑点的SURF特征检测器。图像内容和图像大小也影响的检测到的特征的数量。