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:

    Dimensionality: 2
                 T: [3x3 double]

フォワード幾何学的変換を点 (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])
axis square

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = 
  affine2d with properties:

    Dimensionality: 2
                 T: [3x3 double]

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

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

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 で導入