イメージの回転とスケーリングの検出
この例では、回転およびスケールの変更によって違いの生じた 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")

手順 2: イメージのサイズ変更と回転
イメージのサイズ変更と回転を行うことによって、そのイメージの歪んだバージョンを作成します。imrotate は、正の回転角度が指定された場合、反時計回りの方向にイメージを回転させることに注意してください。
scaleFactor = 0.7; distorted = imresize(original,scaleFactor); theta = 30; distorted = imrotate(distorted,theta); imshow(distorted)

手順 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: [2×2 double]
A: [ 0.6098 0.3467 0.0051
-0.3467 0.6098 89.0695
0 0 1.0000]
Scale プロパティの値は、scaleFactor の値と一致するはずです。これは、"手順 2: イメージのサイズ変更と回転" で設定しました。
RotationAngle プロパティの値は、角度 theta と同じ大きさになるはずです。これは、"手順 2: イメージのサイズ変更と回転" で設定しました。ただし、RotationAngle の角度は、theta と反対の符号をもちます。符号が反対になるのは、simtform2d オブジェクトが固有座標の正の "x" 軸から正の "y" 軸への回転の量として回転角度を格納しているためです。イメージの場合、正の "x" 方向は右へ、正の "y" 軸は下へ向かいます。このため、正の回転角度は時計回りの方向になります。時計回りにおける正の回転角度は、反時計回りにおける負の回転角度に相当します。この逆も同じです。
手順 6: 元のイメージの復元
幾何学的変換 tform および original の空間参照に関する知識を使って、回転およびスケーリングされたイメージ distorted を変換して、元のイメージを復元します。名前と値の引数 OutputView を使用して、リサンプリングされた出力イメージの解像度とグリッド サイズを指定します。
Roriginal = imref2d(size(original)); recovered = imwarp(distorted,tform,OutputView=Roriginal);
モンタージュで recovered と original を並べて比較します。
montage({original,recovered})
歪みと復元処理のため、復元された画質 (右) は元の画質 (左) と一致していません。特に、イメージを縮小すると情報が失われます。エッジ近辺にアーティファクトがあるのは、変換の精度に制限があるためです。「手順 3: コントロール ポイントの選択」でより多くのポイントを選択すると、変換の精度は高くなります。
参考
imresize | imrotate | cpselect | fitgeotform2d | imwarp | imref2d
トピック
- コントロール ポイント レジストレーション
- 一致させるコントロール ポイントのペアの選択
- イメージの回転とスケーリングの自動検出 (Computer Vision Toolbox)