Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

この例では、回転およびスケールの変更によって違いの生じた 2 つのイメージの位置合わせとレジストレーションを行う方法を示します。回転角度と倍率を計算し、歪んだイメージを変換して元のイメージを復元することができます。

手順 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")

Figure contains an axes object. The axes object contains 2 objects of type image, text.

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

イメージのサイズ変更と回転を行うことによって、そのイメージの歪んだバージョンを作成します。imrotate は、正の回転角度が指定された場合、反時計回りの方向にイメージを回転させることに注意してください。

scaleFactor = 0.7;
distorted = imresize(original,scaleFactor);

theta = 30;
distorted = imrotate(distorted,theta);
imshow(distorted)

Figure contains an axes object. The axes object contains an object of type image.

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

この例では、3 組のコントロール ポイントが指定されています。

movingPoints = [128.6 75.4; 151.9 163.9; 192.1 118.6];
fixedPoints = [169.1 73.6; 135.6 199.9; 217.1 171.9];

コントロール ポイントを自分で指定する場合は、コントロール ポイント選択ツールを使用できます。このツールは、関数 cpselect を使用して開くことができます。

[movingPoints,fixedPoints] = cpselect(distorted,original,"Wait",true);

手順 4: アフィン変換の推定

関数 fitgeotform2d を使用して幾何学的変換をコントロール ポイントに当てはめます。この例では、歪みが回転と等方性スケーリングからのみ生じているので、相似変換を当てはめます。

tform = fitgeotform2d(movingPoints,fixedPoints,"similarity");

手順 5: 倍率と回転角度の復元

幾何学的変換 tform は、移動イメージを固定イメージに変換する方法を表します。移動イメージを作成するために固定イメージに適用した倍率と回転角度を求めるには、幾何学的変換の逆を使用します。

tformInv = invert(tform)
tformInv = 
  simtform2d with properties:

    Dimensionality: 2
             Scale: 0.7014
     RotationAngle: -29.6202
       Translation: [0.0051 89.0695]
                 R: [2x2 double]
                 A: [3x3 double]

Scale プロパティの値は、"手順 2: イメージのサイズ変更と回転" で設定した scaleFactor の値と一致するはずです。

RotationAngle プロパティの値は、"手順 2: イメージのサイズ変更と回転" で設定した角度 theta と同じ大きさになるはずです。ただし、RotationAngle の角度は、theta と反対の符号をもちます。符号が反対になるのは、simtform2d オブジェクトが固有座標の正の "x" 軸から正の "y" 軸への回転の量として回転角度を格納しているためです。イメージの場合、正の "x" 方向は右へ、正の "y" 軸は下へ向かいます。このため、正の回転角度は時計回りの方向になります。時計回りにおける正の回転角度は、反時計回りにおける負の回転角度に相当します。この逆も同じです。

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

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

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

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

montage({original,recovered})

Figure contains an axes object. The axes object contains an object of type image.

歪みと復元処理のため、復元された画質 (右) は元の画質 (左) と一致していません。特に、イメージを縮小すると情報が失われます。エッジ近辺にアーティファクトがあるのは、変換の精度に制限があるためです。「手順 3: コントロール ポイントの選択」でより多くのポイントを選択すると、変換の精度は高くなります。

参考

| | | | |

関連するトピック