ドキュメンテーション

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

maketform

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

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

構文

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('affine',A) は、N 次元のアフィン変換に対する多次元空間変換構造体 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 はフォワード変換と逆変換の両方をもっています。

空間変換構造体 (TFORM 構造体) は関数 tformfwdtforminvfliptformimtransformtformarray で使用できます。

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 つの頂点が一直線上に並ぶことはありません。

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 は、要素変換のすべてが逆変換関数を定義している場合にのみ、定義された逆変換関数をもっています。

すべて折りたたむ

アフィン変換を定義する変換構造体 (TFORM) を作成します。

T = maketform('affine',[.5 0 0; .5 2 0; 0 0 1])
T = 

  struct with fields:

       ndims_in: 2
      ndims_out: 2
    forward_fcn: @fwd_affine
    inverse_fcn: @inv_affine
          tdata: [1×1 struct]

フォワード変換を適用します。

tformfwd([10 20],T)
ans =

    15    40

イメージをワークスペースに読み取って表示します。

I = imread('cameraman.tif');

imshow(I), 

変換をイメージに適用します。

I2 = imtransform(I,T);

元のイメージと変換後のイメージを表示します。

figure, imshow(I2)

入力引数

すべて折りたたむ

変換行列。正則な実数 (N+1) 行 (N+1) 列または (N+1) 行 N 列の行列として指定します。

データ型: double

頂点。3 行 2 列の行列 (アフィン変換) または 4 行 2 列の行列 (射影変換) として指定します。行列では、三角形の頂点 (アフィン変換) または四辺形の頂点 (射影変換) を定義します。

データ型: double

入力と出力の次元数。スカラーとして指定します。

例:

データ型: double

フォワード関数および逆関数。関数ハンドルとして指定します。

データ型: function_handle

カスタム変換のパラメーター。配列として指定します。

例:

データ型: double

入力ボックスのサイズ。正の整数の n 要素ベクトルとして指定します。

例:

データ型: double

出力ボックスの頂点。n 要素ベクトルとして指定します。

例:

データ型: double

関数および逆関数。関数ハンドルとして指定します。

例:

データ型: function_handle

出力引数

すべて折りたたむ

多次元空間変換構造体。変換構造体 (TFORM) として指定します。

ヒント

  • アフィン変換または射影変換は、A が 3 行 2 列の場合、以下の方程式のように表現することもできます。

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

    また、A が 3 列 3 行の場合は、以下の方程式のようになります。

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

R2006a より前に導入

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