Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

affine2d

(非推奨) 右から乗算する規則を使用した 2 次元アフィン幾何学的変換

affine2d は推奨されません。代わりに、affinetform2d オブジェクトを使用してください。詳細については、バージョン履歴を参照してください。

説明

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

作成

説明

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

tform = affine2d(t) は、指定された 2 次元アフィン変換行列 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幾何学的変換が純粋な平行移動かどうかの判別
outputLimitsFind output spatial limits given input spatial limits
transformPointsForwardApply forward geometric transformation
transformPointsInverseApply inverse geometric transformation

すべて折りたたむ

原点回りの反時計回りに 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])
axis square

イメージをワークスペースに読み取ります。

A = imread('pout.tif');

アフィン幾何学的変換を定義する affine2d オブジェクトを作成します。この例では、垂直方向のせん断と水平方向の広がりを組み合わせます。

tform = affine2d([2 0.33 0; 0 1 0; 0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

imwarpを使用して、幾何学的変換をイメージに適用します。

B = imwarp(A,tform);

結果のイメージを表示します。

figure
imshow(B);
axis on equal;

拡張機能

バージョン履歴

R2013a で導入

すべて展開する

R2022b: 非推奨

R2022b 以降、ほとんどの Image Processing Toolbox™ 関数は、左から乗算する規則を使用して幾何学的変換を作成し、実行します。そのため、affine2d オブジェクトは右から乗算する規則を使用していることから推奨されません。現時点では、affine2d オブジェクトを削除する予定はありませんが、左から乗算する規則をサポートする affinetform2d オブジェクトに切り替えることで、幾何学的変換のワークフローを効率化できます。詳細については、Migrate Geometric Transformations to Premultiply Conventionを参照してください。

コードを更新するには、次を行います。

  • 関数名 affine2d のインスタンスを affinetform2d に変更します。

  • 行列 T の転置として変換行列を指定します。ここで、Taffine2d オブジェクトの T プロパティの値または affine2d オブジェクトの作成に使用した変換行列のいずれかです。

非推奨の使用方法推奨される代替案

この例では、右から乗算する規則で変換行列 T から affine2d オブジェクトを作成します。

T = [2 0.33 0; 0 1 0; 0 0 1];
tformPost = affine2d(T);

この例では、変換行列 T の転置から affinetform2d オブジェクトを作成します。

T = [2 0.33 0; 0 1 0; 0 0 1];
tform = affinetform2d(T');

この例では、tformPost という名前の affine2d オブジェクトから開始し、tformPostT プロパティの転置から affinetform2d オブジェクトを作成します。

T = tformPost.T;
tform = affinetform2d(T');