Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

affine2d

2 次元アフィン幾何学的変換

説明

affine2dオブジェクトは、2 次元アフィン幾何学的変換に関する情報を格納し、フォワード変換と逆変換を可能にします。

作成

affine2dオブジェクトは以下の方法を使用して作成できます。

  • imregtform——類似性の最適化を使用して移動イメージを固定イメージにマッピングする幾何学的変換を推定します。

  • imregcorr— 位相相関を使用して移動イメージを固定イメージにマッピングする幾何学的変換を推定します。

  • fitgeotrans— 2 つのイメージの間でコントロール ポイントのペアをマッピングする幾何学的変換を推定します。

  • randomAffine2d— ランダムな 2 次元アフィン変換を作成します。

  • ここで説明する関数affine2d

説明

tform = affine2dは、恒等変換に該当する既定のプロパティ設定を使用してaffine2dオブジェクトを作成します。

tform = affine2d(T)は、指定された有効なアフィン変換行列をプロパティTに設定します。

プロパティ

すべて展開する

2 次元フォワード アフィン変換。正則な 3 行 3 列の数値行列として指定します。

行列Tは次の規則を使用します。

[x y 1] = [u v 1] * T

ここで、Tの形式は次のとおりです。

[a b 0; c d 0; e f 1];

Tの既定の設定は、恒等変換です。

データ型:double|single

入力点と出力点の両方の幾何学的変換の次元。値2として指定します。

オブジェクト関数

invert 幾何学的変換の反転
isRigid 変換が剛体変換かどうかの判別
isSimilarity 変換が相似変換かどうかの判別
isTranslation 変換が純粋な平行移動かどうかの判別
outputLimits 入力空間範囲に基づく出力空間範囲の特定
transformPointsForward フォワード幾何学的変換の適用
transformPointsInverse 幾何学的逆変換の適用

すべて折りたたむ

原点回りの反時計方向に 30 度の回転を定義するaffine2dオブジェクトを作成します。

theta = 30; tform = affine2d([...cosd(theta) sind(theta) 0;...-sind(theta) cosd(theta) 0;...0 0 1])
tform = affine2d with properties: T: [3x3 double] Dimensionality: 2

フォワード幾何学的変換を点 (10,0) に適用します。

[x,y] = transformPointsForward(tform,10,0)
x = 8.6603
y = 5

元の点 (青色) と変換された点 (赤色) をプロットして変換を検証します。

plot(10,0,'bo',x,y,'ro') axis([0 12 0 12]) axissquare

Figure contains an axes. The axes contains 2 objects of type line.

イメージを読み取って表示します。

I = imread('kobi.png'); imshow(I)

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

イメージを回転するaffine2d変換オブジェクトを作成します。関数randomAffine2dは、区間 [35, 55] 度内の連続一様分布から回転角度をランダムに選択します。

tform1 = randomAffine2d('Rotation',[35 55]);

イメージを回転して、結果を表示します。

J = imwarp(I,tform1); imshow(J)

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

変換オブジェクトtform1は、すべてのイメージを同じ量だけ回転します。ランダムに選択された異なる量だけイメージを回転するには、新しいaffine2d変換オブジェクトを作成します。

tform2 = randomAffine2d('Rotation',[-10 10]); J2 = imwarp(I,tform2); imshow(J2)

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

この例では、2 つのイメージの位置合わせに使用する幾何学的変換を作成する方法を説明します。

チェッカーボードのイメージを作成し、このイメージを回転して、位置のずれたイメージを作成します。

I = checkerboard(40); J = imrotate(I,30); imshowpair(I,J,'montage')

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

固定イメージ (チェッカーボード) と移動イメージ (回転したチェッカーボード) にいくつかの一致させるコントロール ポイントを定義します。コントロール ポイント選択ツールを使用して対話的にポイントを定義できます。

fixedPoints = [41 41; 281 161]; movingPoints = [56 175; 324 160];

2 つのイメージの位置合わせに使用する幾何学的変換を作成します。変換はaffine2d幾何学的変換オブジェクトとして返されます。

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = affine2d with properties: T: [3x3 double] Dimensionality: 2

tform推定を使用して、回転したイメージをリサンプルし、固定イメージにレジストレーションします。レジストレーションの誤差は、フォールス カラーのオーバーレイ イメージ内で緑とマゼンタの色領域として表示されます。このエラーの原因は、コントロール ポイントが正確に一致していないためです。

Jregistered = imwarp(J,tform,'OutputView',imref2d(size(I))); figure imshowpair(I,Jregistered)

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

x 軸に平行な単位ベクトルがどのように回転および伸長したかを確認することで、変換の角度とスケールを復元します。

u = [0 1]; v = [0 0]; [x, y] = transformPointsForward(tform, u, v); dx = x(2) - x(1); dy = y(2) - y(1); angle = (180/pi) * atan2(dy, dx)
angle = 29.7686
scale = 1 / sqrt(dx^2 + dy^2)
scale = 1.0003

拡張機能

R2013a で導入