tformarray
N 次元配列への空間変換の適用
説明
例
チェッカーボード イメージの変換
各正方形の幅が 20 ピクセルの 2 行 2 列の正方形チェッカーボード イメージを作成します。イメージを表示します。
I = checkerboard(20,1,1); figure imshow(I)
チェッカーボードを射影変換で変換します。まず、空間変換構造体を作成します。
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)
入力から出力空間への一様でないマッピングによるチェッカーボード イメージの変換
各正方形の幅が 20 ピクセルの 2 行 2 列の正方形チェッカーボード イメージを作成します。イメージを表示します。
I = checkerboard(20,1,1); figure imshow(I)
チェッカーボードを射影変換で変換します。まず、空間変換構造体を作成します。
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)
チェッカーボードの正方形の長さは、x 方向よりも y 方向で大きくなっており、これはベクトル samp_x
の点間のサンプリング距離がより大きいことと一致します。等方性ポイント マッピングを使用した結果 (例チェッカーボード イメージの変換を参照) と比較して、チェッカーボードの 3 つの追加の列が変換後のイメージの右側に表示され、変換後のイメージには新しい行は追加されません。
入力引数
A
— 入力イメージ
数値配列
入力イメージ。数値配列として指定します。A
は実数または複素数になります。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| logical
複素数のサポート: あり
T
— 空間変換
TFORM
空間変換構造体
空間変換。TFORM
空間変換構造体として指定します。通常、関数 maketform
を使用して TFORM
構造体を作成します。
出力変換添字空間の各位置について、tformarray
は T
と関数 tforminv
を使用して入力変換添字空間での対応する位置を計算します。tformarray
は、入力変換空間を tdims_B
と tsize_B
によって定義し、出力変換添字空間を tdims_A
と size(A)
によって定義します。
T
が空の場合、tformarray
は直接リサンプリング関数として機能します。さらに、tmap_B
が、
空でない場合、
tformarray
はR
に定義されたリサンプラーを適用してtmap_B
に定義される各変換空間位置で値を計算します空の場合、
tformarray
は出力変換添字グリッドの各位置でリサンプラーを適用します
データ型: struct
R
— リサンプラー
構造体
リサンプラー。構造体として指定します。resampler 構造体は、指定された位置で入力配列の値をどのように内挿するかを定義します。R
は、各次元での内挿方法を細かく制御する makeresampler
を使用して作成されます。また、makeresampler
は、入力配列のエッジ近くで内挿するときに使用する配列の値も制御します。
データ型: struct
tdims_A
— 入力変換次元
有限の正の整数の行ベクトル
入力変換次元。有限の正の整数の行ベクトルとして指定します。
tdims_A
と tdims_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_B
— 出力変換次元
有限の正の整数の行ベクトル
出力変換次元。有限の正の整数の行ベクトルとして指定します。詳細については、tdims_A
を参照してください。
データ型: double
tmap_B
— 出力空間での点の位置
有限の実数値配列 | []
出力空間での点の位置。有限の実数値配列として指定します。オプションの引数 tmap_B
は B
の要素の位置と出力変換空間内の位置との対応を指定する代替方法です。tmap_B
を使用すると、たとえば、出力空間における一連の任意の場所でイメージのゆがみの結果を計算することができます。
tmap_B
が空でない場合、tmap_B
のサイズは以下のようになります。
[D1 D2 D3 ... DN L]
N
は length(tdims_B)
と等しくなります。tsize_B
は []
です。
L
の値は T
が空であるかによって異なります。T
が、
空でない場合、
L
はT.ndims_out
となり、tmap_B
の各 L 次元点はT
を使用して入力空間位置に変換されます空の場合、
L
はlength(tdims_A)
となり、tmap_B
の各L
次元点は入力空間の位置として直接使用されます。
データ型: double
F
— 塗りつぶしの値
数値スカラー | 数値配列 | []
塗りつぶしの値。数値スカラー、数値配列、または空 ([]
) として指定します。F
の塗りつぶしの値は、次の 3 つの状況で使用できます。
最初の 2 つのケースでは、塗りつぶしの値を使用して、入力配列のエッジの外または付近でマップする出力位置の値を計算します。塗りつぶしの値は、出力位置が入力配列の外側にマップされる場合は B
にコピーされます。"fill"
と "bound"
の詳細については、「makeresampler
」を参照してください。
F
が、
スカラー (
NaN
を含む) の場合、その値はすべての非変換次元にわたって複製されます。非スカラーの場合、そのサイズは非変換次元の
size(A)
によって決まります。特に、K
がA
のJ
番目の非変換次元である場合、size(F,J)
はsize(A,K)
または1
のいずれかでなければなりません。便宜上、tformarray
は任意の次元全体において単位サイズでF
を複製するため、複製後、size(F,J)
はsize(A,K)
と等しくなります。空 (
[]
) の場合、関数tformarray
は0
を塗りつぶしの値として使用します。
たとえば、A
は 10 個の RGB イメージを表し、サイズは 200×200×3×10 で、T
は 2 次元変換であり、tdims_A
と tdims_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
出力引数
B
— 変換されたイメージ
数値配列
変換されたイメージ。数値配列として返されます。
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入R2021b: スレッドベース環境のサポート
tformarray
は、スレッドベースの環境をサポートするようになりました。
R2018b: 2 次元および 3 次元の幾何学的変換の場合、tformarray
は非推奨
関数 tformarray
は、高次元の配列に関する変換、入力と出力の次元が混在している変換、またはユーザーが制御やカスタマイズをきめ細かく行う必要がある変換を想定しています。
2 次元および 3 次元のイメージに関する多くの一般的なタスクの場合、関数 imwarp
を使用すると便利です。たとえば、関数 imwarp
を使用すると、名前と値の引数を使用して内挿のタイプを指定できます。関数 imwarp
は、categorical イメージもサポートしています。
2 次元および 3 次元の幾何学的変換の場合、関数 tformarray
は推奨されません。代わりに、2 次元または 3 次元の幾何学的変換オブジェクトを作成してから、関数 imwarp
を使用してください。"replicate"
、"circular"
、または "symmetric"
のパディング方法を使用して出力をパディングする変換を行う場合、関数 padarray
を使用すると、imwarp
を呼び出す前に入力イメージをパディングできます。幾何学的変換オブジェクトの詳細については、2 次元および 3 次元の幾何学的変換プロセスの概要を参照してください。
次の表は、代替コードの使用が推奨される tformarray
の構文を示しています。
非推奨の使用方法 | 推奨される代替案 |
---|---|
3 次リサンプリングと塗りつぶしの値 A = [0.5 0 0; 0.5 2 0; 0 0 1]; T = maketform("affine",A); I = checkerboard(20,1,1); R = makeresampler("cubic","bound"); J = tformarray(I,T,R,[1 2],[2 1],[40 80],[],[]); |
A = [0.5 0 0; 0.5 2 0; 0 0 1];
T = affinetform2d(A);
I = checkerboard(20,1,1);
J = imwarp(I,T,"cubic") |
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)