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

幾何学的変換の行列表現

幾何学的変換行列を使用してイメージのグローバル変換を実行できます。まず、変換行列を定義し、それを使用して幾何学的変換オブジェクトを作成します。次に、幾何学的変換オブジェクトを使用して imwarp を呼び出し、グローバル変換をイメージに適用します。たとえば、シンプルな 2 次元平行移動変換の実行を参照してください。

2 次元アフィン変換

この表は、2 次元アフィン変換と、各アフィン変換の定義に使用する変換行列をまとめています。2 次元アフィン変換の場合は、最後の列に同次座標 [0 0 1] が含まれていなければなりません。

変換行列を使用して幾何学的変換オブジェクト affine2d を作成します。

2 次元アフィン変換例 (元のイメージと変換されたイメージ)変換行列
平行移動

txx 軸に沿って移動を指定します。

tyy 軸に沿って移動を指定します。

ピクセル座標の詳細については、イメージの座標系を参照してください。

スケール

sxx 軸に沿って倍率を指定します。

syy 軸に沿って倍率を指定します。

せん断

shxx 軸に沿ってせん断係数を指定します。

shyy 軸に沿ってせん断係数を指定します。

回転

q は原点を中心とする回転の角度を指定します。

2 次元射影変換

射影変換ではイメージの平面を傾けることができます。平行線は消失点に向かって収束し、奥行があるように見えます。

変換は 3 行 3 列の行列です。アフィン変換とは異なり、変換行列の最後の列に制約はありません。

2 次元射影変換変換行列
傾き

[10E01F001]

E および F は消失点に影響を与えます。

EF を大きくすると、消失点が原点に近くなるため、平行線がより速く収束するように見えます。

EF が 0 と等しい場合、変換はアフィン変換になります。

射影変換は、位置ずれしたイメージのレジストレーションによく使用されます。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] を含まなければなりません。

変換行列を使用して幾何学的変換オブジェクト affine3d を作成します。

3 次元アフィン変換変換行列  
平行移動

[100001000010txtytz1]

  
スケール

[sx0000sy0000sz00001]

  
せん断x,y せん断:

x'=x+azy'=y+bzz'=z

[10000100ab100001]

x,z せん断:

x'=x+ayy'=yz'=z+cy

[1000a1c000100001]

y, z せん断:

x'=xy'=y+bxz'=z+cx

[1bc0010000100001]

回転x 軸周り:

[10000cos(a)sin(a)00sin(a)cos(a)00001]

y 軸周り:

[cos(a)0sin(a)00100sin(a)0cos(a)00001]

z 軸周り:

[cos(a)sin(a)00sin(a)cos(a)0000100001]

N 次元アフィン変換の場合、最後の列は [zeros(N,1); 1] を含まなければなりません。imwarp では 3 次元を超える変換をサポートしていません。

参考

|

関連する例

詳細