自動特徴マッチングを使用したメジの回転とスケルの検出
この例では,。ある▪▪メ▪ジをもう1▪▪の▪▪メ▪ジと比べて回転とスケ▪ルによる歪みが見られる場合に,detectSURFFeatures
およびestgeotform2d
を使用して回転角度と倍率を求めます。。
手順1:@ @メ,@ @ジの読み取り
。
原文= imread(“cameraman.tif”);imshow(原始);文本(大小(原始的,2),大小(原始的,1)+ 15,...图片由麻省理工学院提供,...字形大小= 7,HorizontalAlignment =“对”);
手順2:econeconメeconeconeconズ変更と回転
量表= 0.7;J = imresize(original,scale);试着改变比例因子。Theta = 30;注意,imrotate旋转图像在逆时针方向你指定一个正的旋转角度。。为了顺时针旋转图像,%指定-。扭曲= imrotate(J,-theta);试着改变角度。图imshow(扭曲)
入力メジのスケルと回転を変化させて実験できます。ただし,スケールの変更可能な量には制限があり,それを超えると特徴検出器が十分な特徴を検出できなくなります。
手順3:@ @
両方の▪▪メ▪▪ジで特徴を検出します。
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:変換の推定
RANSACアルゴリズムのバリエーションである,統計的にロバストなMSAC (M-estimator样品一致)アルゴリズムを使用して,マッチするポイントのペアに対応した変換を求めます。これにより,変換行列の計算中に外れ値が削除されます。Msacアルゴリズムでは無作為抽出が使われるため,変換の計算結果は変動することがあります。
[tform, inlierIdx] = estgeotform2d(matcheddistortion,matchedOriginal,“相似”);inlierIdx = matcheddistortion (inlierIdx,:);inlierOriginal = matchedOriginal(inlierIdx,:);
変換の計算で使用されたマッチするポ@ @ントのペアを表示します。
图;showMatchedFeatures(原始、扭曲、inlierOriginal inlierDistorted);标题(匹配点(仅限内线));传奇(“ptsOriginal”,“ptsDistorted”);
手順5:スケ,ルと角度の解
幾何学的変換tformを使用して,スケ,ルと角度を復元します。歪んだイメージから元のイメージへの変換は計算済みなので,歪みを復元するにはその逆変換を計算しなければなりません。
令sc = s*cos()令ss = s*sin()
然后,Ainv = [sc ss tx;-ss sc ty;0 0 1]
其中tx和ty分别是x和y的平移。
逆変換行列を計算します。
invTform = invert(tform);Ainv = invTform.A;ss = Ainv(1,2);sc = Ainv(1,1);scalercovered = hypot(ss,sc);disp ([“恢复规模:”num2str (scaleRecovered)])恢复一个正数值表示的旋转顺时针方向。thetaRecovered = atan2d(-ss,sc);disp (['恢复theta: 'num2str (thetaRecovered)])
恢复尺度:0.70255恢复theta: 29.7616
復元された値は,次で選択したスケ,ルと角度の値に一致しなければなりません。「手順2:econeconメeconeconeconズ変更と回転」。
simtform2d
オブジェクトの规模プロパティとRotationAngleプロパティでスケールと回転角度を求めることもできます。
disp ([“:”num2str (invTform.Scale)]) disp ([“RotationAngle:”num2str (invTform.RotationAngle)))
刻度:0.70255旋转角度:29.7616
手順6:元の@ # @メ@ # @ジの復元
歪んだメジを変換して元のメジを復元します。
outputView = imref2d(size(original));恢复= imwarp(扭曲,tform,OutputView= OutputView);
モンタ,ジュで恢复
と原始
を並べて比較します。
图,imshowpair(原始的,恢复,“蒙太奇”)
歪みと復元処理のため,恢复
(右)の画質は原始
(左)の画質と一致していません。特に,。エッジ近辺にア,ティファクトがあるのは,変換の精度に制限があるためです。「手順3:@ @でより多くの点を検出していれば,変換はより正確になります。たとえば,コーナー検出器detectFASTFeaturesを使用して,ブロブを検出する冲浪特徴量検出器を補うことができます。。