このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
イメージの回転とスケーリングの検出
この例では、回転およびスケールの変更によって違いの生じた 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: [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);
モンタージュで recovered
と original
を並べて比較します。
montage({original,recovered})
歪みと復元処理のため、復元された画質 (右) は元の画質 (左) と一致していません。特に、イメージを縮小すると情報が失われます。エッジ近辺にアーティファクトがあるのは、変換の精度に制限があるためです。「手順 3: コントロール ポイントの選択」でより多くのポイントを選択すると、変換の精度は高くなります。
参考
imresize
| imrotate
| cpselect
| fitgeotform2d
| imwarp
| imref2d
関連するトピック
- 一致させるコントロール ポイントのペアの選択
- コントロール ポイントの選択手順
- 自動特徴マッチングを使用したイメージの回転とスケールの検出 (Computer Vision Toolbox)