Main Content

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

tformarray

N 次元配列への空間変換の適用

2 次元および 3 次元の空間変換の場合、関数 tformarray は推奨されません。代わりに関数 imwarp を使用してください。詳細については、互換性の考慮事項を参照してください。

説明

B = tformarray(A,T,R,tdims_A,tdims_B,tsize_B,tmap_B,F) は、空間変換 T を配列 A に適用して配列 B を生成します。

すべて折りたたむ

各正方形の幅が 20 ピクセルの 2 行 2 列の正方形チェッカーボード イメージを作成します。イメージを表示します。

I = checkerboard(20,1,1);
figure
imshow(I)

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

チェッカーボードを射影変換で変換します。まず、空間変換構造体を作成します。

T = maketform('projective',[1 1; 41 1; 41 41;   1 41],...
                           [5 5; 40 5; 35 30; -10 30]);

リサンプラーを作成します。リサンプラーの作成時には 'circular' のパディング方法を使用します。出力は、無限チェッカーボードの透視投影ビューになります。

R = makeresampler('cubic','circular');

変換構造体とリサンプラーを指定して変換を実行します。この例では、出力次元を入れ替え、100 行 100 列の出力イメージを指定します。tsize_B 引数を指定するので、tmap_B 引数は空のままにします。塗りつぶしの値は必要ないため、F 引数は空のままにします。

J = tformarray(I,T,R,[1 2],[2 1],[100 100],[],[]);
figure
imshow(J)

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

各正方形の幅が 20 ピクセルの 2 行 2 列の正方形チェッカーボード イメージを作成します。イメージを表示します。

I = checkerboard(20,1,1);
figure
imshow(I)

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

チェッカーボードを射影変換で変換します。まず、空間変換構造体を作成します。

T = maketform('projective',[1 1; 41 1; 41 41;   1 41],...
                           [5 5; 40 5; 35 30; -10 30]);

リサンプラーを作成します。リサンプラーの作成時には 'circular' のパディング方法を使用します。出力は、無限チェッカーボードの透視投影ビューになります。

R = makeresampler('cubic','circular');

入力空間から出力空間への点のマッピングを指定する配列を作成します。この例では、異方性サンプリングを使用しています。サンプル間の距離はある方向では他の方向よりも大きくなります。

samp_x = 1:1.5:150;
samp_y = 1:100;
[x,y] = meshgrid(samp_x,samp_y);
tmap = cat(3,x,y);
size(tmap)
ans = 1×3

   100   100     2

tmap のサイズに注目してください。出力イメージの次元は 100 行 100 列です。

変換構造体とリサンプラーを指定して変換を実行します。出力マップを tmap として指定します。tmap_B 引数を指定するので、tsize_B 引数は空のままにします。リサンプラーは循環するので、塗りつぶしの値は重要ではありません。

J = tformarray(I,T,R,[1 2],[1 2],[],tmap,[]);
figure
imshow(J)

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

チェッカーボードの正方形の長さは、x 方向よりも y 方向で大きくなっており、これはベクトル samp_x の点間のサンプリング距離がより大きいことと一致します。等方性ポイント マッピングを使用した結果 (例チェッカーボード イメージの変換を参照) と比較して、チェッカーボードの 3 つの追加の列が変換後のイメージの右側に表示され、変換後のイメージには新しい行は追加されません。

入力引数

すべて折りたたむ

入力イメージ。数値配列として指定します。A は実数または複素数になります。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | logical
複素数のサポート: あり

空間変換。TFORM 空間変換構造体として指定します。通常、関数 maketform を使用して TFORM 構造体を作成します。

出力変換添字空間の各位置について、tformarrayT と関数 tforminv を使用して入力変換添字空間での対応する位置を計算します。tformarray は、入力変換空間を tdims_Btsize_B によって定義し、出力変換添字空間を tdims_Asize(A) によって定義します。

T が空の場合、tformarray は直接リサンプリング関数として機能します。さらに、tmap_B が、

  • 空でない場合、tformarrayR に定義されたリサンプラーを適用して tmap_B に定義される各変換空間位置で値を計算します

  • 空の場合、tformarray は出力変換添字グリッドの各位置でリサンプラーを適用します

データ型: struct

リサンプラー。構造体として指定します。resampler 構造体は、指定された位置で入力配列の値をどのように内挿するかを定義します。R は、各次元での内挿方法を細かく制御する makeresampler を使用して作成されます。また、makeresampler は、入力配列のエッジ近くで内挿するときに使用する配列の値も制御します。

データ型: struct

入力変換次元。有限の正の整数の行ベクトルとして指定します。

tdims_Atdims_B は、入力と出力配列のどの次元が空間変換に含まれるかを示します。各要素は一意でなければなりません。エントリは昇順である必要はありませんが、順序付けられている必要があります。順番は、配列 A および B の次元と、変換子 T の入力および出力空間の間の正確な対応関係を指定します。

length(tdims_A)T.ndims_in と等しく、length(tdims_B)T.ndims_out と等しくなければなりません。

たとえば、T が 2 次元変換であり、tdims_A = [2 1]tdims_B = [1 2] の場合、A の行次元と列次元はそれぞれ 2 番目と最初の変換入力空間次元に対応します。B の列次元と行次元はそれぞれ最初と 2 番目の出力空間次元に対応します。

データ型: double

出力変換次元。有限の正の整数の行ベクトルとして指定します。詳細については、tdims_A を参照してください。

データ型: double

出力配列変換次元のサイズ。有限の正の整数の行ベクトルとして指定します。非変換次元の B のサイズは、これらの次元の A のサイズから直接取得されます。

たとえば、T が 2 次元変換であり、size(A) = [480 640 3 10]tdims_B[2 1]tsize_B[300 200] の場合、size(B)[200 300 3 10] となります。

データ型: double

出力空間での点の位置。有限の実数値配列として指定します。オプションの引数 tmap_BB の要素の位置と出力変換空間内の位置との対応を指定する代替方法です。tmap_B を使用すると、たとえば、出力空間における一連の任意の場所でイメージのゆがみの結果を計算することができます。

tmap_B が空でない場合、tmap_B のサイズは以下のようになります。

 [D1 D2 D3 ... DN L]
ここで、Nlength(tdims_B) と等しくなります。tsize_B[] です。

L の値は T が空であるかによって異なります。T が、

  • 空でない場合、LT.ndims_out となり、tmap_B の各 L 次元点は T を使用して入力空間位置に変換されます

  • 空の場合、Llength(tdims_A) となり、tmap_B の各 L 次元点は入力空間の位置として直接使用されます。

データ型: double

塗りつぶしの値。数値スカラー、数値配列、または空 ([]) として指定します。F の塗りつぶしの値は、次の 3 つの状況で使用できます。

  • 分離可能なリサンプラーが makeresampler を使用して作成され、その padmethod"fill" または "bound" に設定される場合。

  • "fill" または "bound" のパディング方法をサポートするカスタム リサンプラーが使用される場合 (カスタマイズ特有の動作が伴う)。

  • B の変換次元から A の変換次元へのマップがある時点で意図的に未定義である場合。このような点は、tmap_B または tforminv の出力で NaN によって入力変換空間でエンコードされます。

最初の 2 つのケースでは、塗りつぶしの値を使用して、入力配列のエッジの外または付近でマップする出力位置の値を計算します。塗りつぶしの値は、出力位置が入力配列の外側にマップされる場合は B にコピーされます。"fill""bound" の詳細については、「makeresampler」を参照してください。

F が、

  • スカラー (NaN を含む) の場合、その値はすべての非変換次元にわたって複製されます。

  • 非スカラーの場合、そのサイズは非変換次元の size(A) によって決まります。特に、KAJ 番目の非変換次元である場合、size(F,J)size(A,K) または 1 のいずれかでなければなりません。便宜上、tformarray は任意の次元全体において単位サイズで F を複製するため、複製後、size(F,J)size(A,K) と等しくなります。

  • 空 ([]) の場合、関数 tformarray0 を塗りつぶしの値として使用します。

たとえば、A は 10 個の RGB イメージを表し、サイズは 200×200×3×10 で、T は 2 次元変換であり、tdims_Atdims_B の両方が [1 2] であるとします。つまり、tformarray は、10 個の RGB イメージそれぞれの各色平面に、同じ 2 次元変換を適用します。この場合、F についていくつかのオプションがあります。

  • F にはスカラーを指定できます。この場合、すべての 10 個のイメージの各色平面で同じ塗りつぶしの値が使用されます。

  • F には、3 行 1 列のベクトル [R G B]' を指定できます。tformarray では各 10 個のイメージのそれぞれに対応する色平面の塗りつぶしの値として RGB 値が使用されます。

  • F には 1 行 10 列のベクトルを指定できます。tformarray では、10 個の各イメージに異なる塗りつぶしの値が使用され、その塗りつぶしの値が 3 つすべての色平面に使用されます。

  • F には、3 行 10 列の行列を指定できます。tformarray では、10 個の各イメージで異なる RGB 塗りつぶし色が使用されます。

データ型: double

出力引数

すべて折りたたむ

変換されたイメージ。数値配列として返されます。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する