ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

イメージの回転とスケーリングの検出

この例では、回転およびスケールの変更によって違いの生じた 2 つのイメージの位置合わせとレジストレーションを行う方法を示します。対応するポイントを手動で選んでから、fitgeotrans を使用して回転角とスケール係数を検出します。その後、元のイメージを復元するために歪んだイメージを変換することができます。

手順 1: イメージの読み取り

イメージをワークスペースに読み取ります。

original = imread('cameraman.tif');
imshow(original);
text(size(original,2),size(original,1)+15, ...
    'Image courtesy of Massachusetts Institute of Technology', ...
    'FontSize',7,'HorizontalAlignment','right');

手順 2: イメージのサイズ変更と回転

scale = 0.7;
distorted = imresize(original,scale); % Try varying the scale factor.

theta = 30;
distorted = imrotate(distorted,theta); % Try varying the angle, theta.
figure, imshow(distorted)

手順 3: コントロール ポイントの選択

コントロール ポイントの選択ツールを使用して、少なくとも 2 組のコントロール ポイントを選択します。

movingPoints = [151.52  164.79; 131.40 79.04];
fixedPoints = [135.26  200.15; 170.30 79.30];

事前に選択されたポイントを使用してこの例の残りを実行できますが、自分でポイントを選択して結果が異なることを確認してください。

cpselect(distorted,original,movingPoints,fixedPoints);

[ファイル] メニュー、[ポイントをワークスペースへ保存] オプションを選択して、コントロール ポイントを保存します。ポイントを保存して変数 movingPointsfixedPoints を上書きします。

手順 4: 変換の推定

無反射相似変換をコントロール ポイントに近似します。

tform = fitgeotrans(movingPoints,fixedPoints,'nonreflectivesimilarity');

手順 5 および手順 6 の実行後、'NonreflectiveSimilarity' の代わりに 'affine' を使用して、手順 4 から手順 6 までを繰り返してください。何が起こりますか? 結果は 'NonreflectiveSimilarity' を使用した場合と同じですか?

手順 5: スケールと角度の解

幾何学的変換 tformtform.T に変換行列を含んでいます。変換には回転およびスケールのみが含まれているのがわかっているため、スケールと角度を復元する計算は比較的簡単です。

Let sc = s*cos(theta)
Let ss = s*sin(theta)
Then, Tinv = invert(tform), and Tinv.T = [sc -ss  0;
                                          ss  sc  0;
                                          tx  ty  1]
where tx and ty are x and y translations, respectively.
tformInv = invert(tform);
Tinv = tformInv.T;
ss = Tinv(2,1);
sc = Tinv(1,1);
scale_recovered = sqrt(ss*ss + sc*sc)
theta_recovered = atan2(ss,sc)*180/pi
scale_recovered =

    0.7000


theta_recovered =

   29.3741

scale_recovered および theta_recovered の復元された値が「手順 2: イメージのサイズ変更と回転」で選択したスケール値および角度値と一致しなければなりません。

手順 6: 元のイメージの復元

幾何学的変換 tform および original の空間参照に関する知識を使って、回転およびスケーリングされたイメージ distorted を変換して、元のイメージを復元します。'OutputView' の名前と値のペアは、リサンプリングされた出力イメージの解像度とグリッド サイズの指定に使用されます。

Roriginal = imref2d(size(original));
recovered = imwarp(distorted,tform,'OutputView',Roriginal);

モンタージュで recoveredoriginal を並べて比較します。

figure, imshowpair(original,recovered,'montage')

歪みと復元のプロセスであるため、recovered (右) の画質は original (左) の画質と一致しません。特に、イメージを縮小すると情報が失われます。境界線周辺が不自然になるのは、変換の精度が限られているためです。「手順 3:コントロール ポイントの選択」で多くのポイントを選択すると、変換はより正確になります。

この情報は役に立ちましたか?