主要内容

自動特徴マッチングを使用したメジの回転とスケルの検出

この例では,。ある▪▪メ▪ジをもう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を使用して,ブロブを検出する冲浪特徴量検出器を補うことができます。。