ドキュメンテーション

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

maketform

空間変換構造体 (TFORM) を作成

関数 maketform は推奨されません。代わりに fitgeotransaffine2daffine3d または projective2d を使用してください。

構文

T = maketform(transformtype,...)
T = maketform('affine',A)
T = maketform('affine',U,X)
T = maketform('projective',A)
T = maketform('projective',U,X)
T = maketform('custom', NDIMS_IN, NDIMS_OUT, FORWARD_FCN, INVERSE_FCN, TDATA)
T = maketform('box',tsize,LOW,HIGH)
T = maketform('box',INBOUNDS, OUTBOUNDS)
T = maketform('composite',T1,T2,...,TL)
T = maketform('composite', [T1 T2 ... TL])

説明

T = maketform(transformtype,...) は多次元空間変換構造体 (TFORM 構造体) を作成し、これらは関数 tformfwdtforminvfliptformimtransformtformarray で使用できます。

transformtype は、以下の空間変換タイプのいずれかを使います。maketform は、個々の変換タイプに関して、特有の構文をサポートします。これらの構文については、次の節を参照してください。

変換タイプ

説明

'affine'

2 次元、N 次元のアフィン変換

'projective'

2 次元、N 次元の射影変換

'custom'

N 次元から M 次元へのユーザー定義の変換

'box'

各次元で、依存しないアフィン変換 (スケーリングとシフト)

'composite'

より基本的な変換の任意の数の組み合わせ

変換タイプ

アフィン

T = maketform('affine',A) は N 次元のアフィン変換に対する TFORM 構造体 T を作成します。A は、正則な実数 (N+1) 行 (N+1) 列、または、(N+1) 行 N 列の行列です。A が、(N+1) 行 (N+1) 列の場合、A の最後の列は [zeros(N,1);1] でなければなりません。それ以外の場合、A は、その最後の列が [zeros(N,1);1] になるように、自動的に拡大されます。行列 A は、tformfwd(U,T) (U は 1 行 N 列のベクトル) が X = U * A(1:N,1:N) + A(N+1,1:N) となる 1 行 N 列のベクトル X を返すようなフォワード変換を定義します。T はフォワード変換と逆変換の両方をもっています。

T = maketform('affine',U,X) は、U の各行を X の対応する行にマッピングする 2 次元のアフィン変換に対する TFORM 構造体 T を作成します。引数 UX はそれぞれ 3 行 2 列で、入力三角形と出力三角形の頂点を定義します。頂点は、一直線上には並びません。

射影

T = maketform('projective',A) は、N 次元射影変換に対する TFORM 構造体を作成します。A は、正則な実数 (N+1) 行 (N+1) 列の行列です。A(N+1,N+1) に 0 を設定することはできません。行列 Atformfwd(U,T) (U は 1 行 N 列のベクトル) が X = W(1:N)/W(N+1) となる 1 行 N 列のベクトル X を返すようなフォワード変換を定義します。ここで W = [U 1] * A です。変換構造体 T は、フォワード変換と逆変換の両方をもっています。

T = maketform('projective',U,X) は、U の各行を X の対応する行にマッピングする 2 次元の射影変換に対する TFORM 構造体 T を作成します。引数 UX は、各々 4 行 2 列で、入力と出力の四辺形の頂点を定義します。3 つの頂点は、一直線上に位置しません。

    メモ:   また、アフィン変換または射影変換を 3 行 2 列の A の場合は以下のように表現できます。

    [X Y]'  =  A' * [U V 1] ' 
    

    または、3 列 3 行の A の場合は、以下のように表現できます。

    [X Y 1]'  =  A' * [U V 1]'

カスタム

T = maketform('custom', NDIMS_IN, NDIMS_OUT, FORWARD_FCN, INVERSE_FCN, TDATA) は、ユーザーが設定した関数ハンドルとパラメーターをベースにカスタムの TFORM 構造体 T を作成します。NDIMS_INNDIMS_OUT は、入力と出力の次元数です。FORWARD_FCNINVERSE_FCN は、フォワード関数と逆関数への関数ハンドルです。これらの関数は、次の構文をサポートしています。

フォワード関数:

X = FORWARD_FCN(U,T)

逆関数:

U = INVERSE_FCN(X,T)

ここで、UPNDIMS_IN 列の行列で、その行は変換の入力空間の点です。XPNDIMS_OUT 列の行列で、その行は変換の出力空間の中の点を表します。TDATA は一般的に任意の MATLAB® 配列で、カスタム変換のパラメーターを保存するために使われます。Ttdata フィールドを介して、FORWARD_FCNINVERSE_FCN にアクセスすることができます。FORWARD_FCNINVERSE_FCN のいずれかは、空でも構いません。ただしその場合、少なくとも INVERSE_FCN は、tformarray または imtransform と共に、T を使用して定義しなければなりません。

ボックス

T = maketform('box',tsize,LOW,HIGH) または
T = maketform('box',INBOUNDS, OUTBOUNDS) は、N 次元のアフィン TFORM 構造体 T を作成します。引数 tsize は、正の整数からなる N 要素のベクトルです。LOWHIGH も N 要素のベクトルです。変換は、対角側の頂点 ones(1,N)tsize、または頂点 INBOUNDS(1,:)INBOUND(2,:) で定義される入力ボックスを、反対側の頂点 LOWHIGH、または OUTBOUNDS(1,:)OUTBOUNDS(2,:) で定義される出力ボックスにマッピングします。LOW(K)HIGH(K) は、tsize(K) が 1 でない限り、お互いに異なります。1 の場合、K 番目の次元に関するアフィン スケール係数は 1.0 と仮定します。同様に、INBOUNDS(1,K)INBOUNDS(2,K) は、OUTBOUNDS(1,K)OUTBOUNDS(2,K) が同じでない限り、異なります。また、その逆の関係も成り立ちます。'box' TFORM は一般的に、イメージまたは配列の行と列の添字をある空間の座標系に移動させるために使います。

合成

T = maketform('composite',T1,T2,...,TL) または
T = maketform('composite', [T1 T2 ... TL]) は、T1, T2, ..., TL のフォワード関数と逆関数の合成関数をフォワード関数や逆関数にもつ TFORM 構造体 T を作成します。

入力 T1, T2, ..., TL は、関数構成の標準の表記法を使用する場合と同じように、T = T1 T2 ... TL という順番で表示されることに注意してください。また、構成は結合的ですが、可換ではないことにも注意してください。これは、T を入力 U に適用するには、TL を最初に、T1 を最後に適用しなければならないことを意味します。よって、たとえば L = 3 である場合、tformfwd(U,T)tformfwd(tformfwd(tformfwd(U,T3),T2),T1) と同じになります。T1 から TL までの要素は、入力次元と出力次元の数に関して整合性を保っていなければなりません。T は、要素変換のすべてがフォワード変換関数を定義している場合にのみ、定義されたフォワード変換関数をもっています。T は、要素変換のすべてが逆変換関数を定義している場合にのみ、定義された逆変換関数をもっています。

アフィン変換を作成し、適用します。

T = maketform('affine',[.5 0 0; .5 2 0; 0 0 1]);
tformfwd([10 20],T)
I = imread('cameraman.tif');
I2 = imtransform(I,T);
imshow(I), figure, imshow(I2)

R2006a より前に導入

この情報は役に立ちましたか?