幾何学的変換の行列表現
幾何学的変換行列を使用してイメージのグローバル変換を実行できます。まず、変換行列を定義し、それを使用して幾何学的変換オブジェクトを作成します。次に、幾何学的変換オブジェクトを使用して imwarp
を呼び出し、グローバル変換をイメージに適用します。例については、シンプルな 2 次元平行移動変換の実行を参照してください。
2 次元アフィン変換
この表は、2 次元アフィン変換と、各アフィン変換の定義に使用する変換行列をまとめています。2 次元アフィン変換の場合は、最後の列に同次座標 [0 0 1] が含まれていなければなりません。
任意の組み合わせの 2 次元変換行列を使用して、affine2d
幾何学的変換オブジェクトを作成します。2 次元の平行移動行列および回転行列の組み合わせを使用して、rigid2d
幾何学的変換オブジェクトを作成します。
2 次元アフィン変換 | 例 (元のイメージと変換されたイメージ) | 変換行列 | |
---|---|---|---|
平行移動 |
ピクセル座標の詳細については、イメージの座標系を参照してください。 | ||
スケール | |
| |
せん断 | |
| |
回転 | |
|
2 次元射影変換
射影変換ではイメージの平面を傾けることができます。平行線は消失点に向かって収束し、奥行があるように見えます。
変換は 3 行 3 列の行列です。アフィン変換とは異なり、変換行列の最後の列に制約はありません。
2 次元射影変換 | 例 | 変換行列 | |
---|---|---|---|
傾き |
|
|
射影変換は、位置ずれしたイメージのレジストレーションによく使用されます。2 つのイメージの位置を合わせる場合、最初に cpselect
を使用してコントロール ポイントのペアを選択します。次に、fitgeotrans
を使用して transformationType
を 'projective'
に設定し、射影変換行列をコントロール ポイントのペアに近似します。これによって自動的に幾何学的変換オブジェクト projective2d
が作成されます。変換行列は projective2d
オブジェクトのプロパティとして保存されます。その結果、imwarp
を使用すると、他のイメージにも変換を適用できます。
2 次元合成アフィン変換の作成
行列乗算を使用すると、複数の変換を 1 つの行列に結合できます。行列乗算の順序が重要です。
この例では、2 次元の平行移動と回転を合成した変換を作成する方法を説明します。
変換を行うチェッカーボード イメージを作成します。また、このイメージの空間参照オブジェクトを作成します。
cb = checkerboard(4,2); cb_ref = imref2d(size(cb));
イメージの空間位置を示すために、一様な背景イメージを作成します。チェッカーボードを背景の上に重ね、チェッカーボードの位置を緑色で強調表示します。
background = zeros(150); imshowpair(cb,cb_ref,background,imref2d(size(background)))
変換行列を作成し、幾何学的変換オブジェクト affine2d
として保存します。この変換では、イメージを水平方向に 100 ピクセル、シフトします。
T = [1 0 0;0 1 0;100 0 1]; tform_t = affine2d(T);
回転行列を作成し、幾何学的変換オブジェクト affine2d
として保存します。この変換では、原点を中心としてイメージを時計回りに 30 度回転します。
R = [cosd(30) sind(30) 0;-sind(30) cosd(30) 0;0 0 1]; tform_r = affine2d(R);
平行移動の後に回転
最初に平行移動を、次に回転を実行します。変換行列の乗算では、平行移動行列 T
が左側、回転行列 R
が右側にあります。
TR = T*R; tform_tr = affine2d(TR); [out,out_ref] = imwarp(cb,cb_ref,tform_tr); imshowpair(out,out_ref,background,imref2d(size(background)))
回転の後に平行移動
変換の順序を逆にして、最初に回転、次に平行移動を実行します。変換行列の乗算では、回転行列 R
が左側、平行移動行列 T
が右側にあります。
RT = R*T; tform_rt = affine2d(RT); [out,out_ref] = imwarp(cb,cb_ref,tform_rt); imshowpair(out,out_ref,background,imref2d(size(background)))
変換後のイメージの空間位置が、平行移動の後に回転が行われた場合と異なっていることがわかります。
3 次元アフィン変換
次の表は、3 次元アフィン変換と、各アフィン変換の定義に使用する変換行列をまとめています。3 次元の場合は、イメージの回転方法またはせん断方法に応じて複数の行列があります。最後の列は [0 0 0 1] を含まなければなりません。
任意の組み合わせの 3 次元変換行列を使用して、affine3d
幾何学的変換オブジェクトを作成します。3 次元の平行移動行列および回転行列の組み合わせを使用して、rigid3d
幾何学的変換オブジェクトを作成します。
3 次元アフィン変換 | 変換行列 | ||
---|---|---|---|
平行移動 |
| ||
スケール |
| ||
せん断 | x,y せん断:
| x,z せん断:
| y, z せん断:
|
回転 | x 軸周り:
| y 軸周り:
| z 軸周り:
|
N 次元アフィン変換の場合、最後の列は [zeros(N,1); 1]
を含まなければなりません。imwarp
では 3 次元を超える変換をサポートしていません。
参考
imwarp
| fitgeotrans
| affine2d
| affine3d
| rigid2d
| rigid3d
| projective2d