このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,イメージのペアの間に見られる幾何学的変換を自動的に判定する方法を説明します。あるイメージをもう1つのイメージと比べて回転とスケールによる歪みが見られる場合に,detectSURFFeatures
およびestimateGeometricTransform2D
を使用して回転角度と倍率を求めます。その後,歪んだイメージを変換して元のイメージを復元することができます。
イメージをワークスペースに読み取ります。
原始= imread (“cameraman.tif”);imshow(原始);文本(大小(原始的,2),大小(原始的,1)+ 15,…图片由麻省理工学院提供,…“字形大小”7“HorizontalAlignment”,“对”);
规模= 0.7;J = imresize(original, scale);尝试改变比例因子。θ= 30;扭曲= imrotate (J,θ);试着改变角度。图中,imshow(扭曲)
入力イメージのスケールと回転を変化させて実験できます。ただし,スケールの変更可能な量には制限があり,それを超えると特徴検出器が十分な特徴を検出できなくなります。
両方のイメージで特徴を検出します。
ptsOriginal = detectSURFFeatures(原始);ptsDistorted = detectSURFFeatures(扭曲);
特徴記述子を抽出します。
[featuresOriginal, validptsororiginal] = extractFeatures(original, ptsororiginal);[featuresdistortion, validptsdistortion] = extractFeatures(扭曲的,扭曲的);
その記述子を使用して特徴をマッチングします。
indexPairs = matchFeatures(featuresOriginal, featuresdistortion); / /匹配特征
各イメージについて対応するポイントの位置を取得します。
matchedOriginal = validPtsOriginal (indexPairs (: 1));matchedDistorted = validPtsDistorted (indexPairs (:, 2));
推定的なポイントのマッチを表示します。
图;showMatchedFeatures(原始、扭曲、matchedOriginal matchedDistorted);标题(“假定匹配点(包括异常值)”);
RANSACアルゴリズムのバリエーションである,統計的にロバストなMSAC (M-estimator样品一致)アルゴリズムを使用して,マッチするポイントのペアに対応した変換を求めます。これにより,変換行列の計算中に外れ値が削除されます。MSACアルゴリズムでは無作為抽出が使われるため,変換の計算結果は変動することがあります。
[tform, inlierIdx] = estimateGeometricTransform2D(…matchedDistorted matchedOriginal,“相似”);inlierdistortion = matcheddistortion (inlierIdx,:);inlierOriginal = matchedOriginal(inlierIdx,:);
変換の計算で使用されたマッチするポイントのペアを表示します。
图;showMatchedFeatures(原始、扭曲、inlierOriginal inlierDistorted);标题('匹配点(仅内联)');传奇(“ptsOriginal”,“ptsDistorted”);
幾何学的変換tformを使用して,スケールと角度を復元します。歪んだイメージから元のイメージへの変換は計算済みなので,歪みを復元するにはその逆変換を計算しなければなりません。
设sc = s*cos()设ss = s*sin()
Then, Tinv = [sc -ss 0;党卫军sc 0;tx泰1]
其中tx和ty分别是x和y的平移。
逆変換行列を計算します。
Tinv = tform.invert.T;党卫军= Tinv (2, 1);sc = Tinv (1,1);scalercovered = sqrt(ss*ss + sc*sc
scalercovered = single 0.7010 thetaRecovered = single 30.2351
復元された値は,次で選択したスケールと角度の値に一致しなければなりません。「手順2:イメージのサイズ変更と回転」。
歪んだイメージを変換して元のイメージを復元します。
outputView = imref2d(大小(原始));恢复= imwarp (tform扭曲,“OutputView”, outputView);
モンタージュで恢复
と原始
を並べて比較します。
图,imshowpair(原始的,恢复,“蒙太奇”)
歪みと復元処理のため,恢复
(右)の画質は原始
(左)の画質と一致していません。特に,イメージを縮小すると情報が失われます。エッジ近辺にアーティファクトがあるのは,変換の精度に制限があるためです。「手順3:イメージ間で一致する特徴の検出“でより多くの点を検出していれば,変換はより正確になります。たとえば,コーナー検出器detectFASTFeaturesを使用して,ブロブを検出する冲浪特徴量検出器を補うことができます。また,イメージの内容とサイズも,検出される特徴の数に影響を与えます。