ドキュメンテーション

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

tformarray

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

構文

B = tformarray(A, T, R, TDIMS_A, TDIMS_B, TSIZE_B, TMAP_B, F)

説明

B = tformarray(A, T, R, TDIMS_A, TDIMS_B, TSIZE_B, TMAP_B, F) は、空間変換を配列 A に適用して配列 B を生成します。関数 tformarray は、imtransform と同様ですが、高次元の配列または入力/出力が混在した次元に関連する問題を目的としており、さらに大幅なユーザー制御やカスタマイズが必要となります (imtransform を使用して達成可能なものは maketformmakeresamplerfindboundstformarray の組み合わせを使用しても達成できますが、2 次元イメージが含まれる多くのタスクが存在する場合、imtransform がより簡単になります)。

次の表は、すべての入力引数の簡単な説明を示しています。以下のセクションで、各引数に関してより詳しく説明します (表の引数をクリックして適切なセクションを移動します)。

引数

説明

A

入力配列またはイメージ

T

TFORM と呼ばれる空間変換構造 (通常、maketform で作成)

R

リサンプル構造 (通常、makeresampler で作成)

TDIMS_A

入力変換次元をリストする行ベクトル

TDIMS_B

出力変換次元をリストする行ベクトル

TSIZE_B

変換次元での出力配列サイズ

TMAP_B

出力空間での点の位置の配列。空間変換を指定する代替方法として使用できます。

F

塗りつぶしの値の配列

A は任意の非スパース数値配列になり、実数または複素数になります。

T は、特定の空間変換を定義する TFORM 構造です。出力変換添字空間 (TDIMS_B および TSIZE_B によって定義) の各位置で、tformarrayT と関数 tforminv を使用して入力変換添字空間 (TDIMS_A および size(A) によって定義) での対応する位置を計算します。

T が空の場合、tformarray は直接リサンプリング関数として機能し、R で定義されたリサンプラーを適用して TMAP_B で定義された各変換空間位置 (TMAP_B が空ではない場合) または出力変換添字グリッドの各位置で値を計算します。

R は、指定された位置で、入力配列の値をどのように内挿するかを定義する構造体です。通常、Rmakeresampler を使用して作成されます。これにより、各次元に沿って内挿する方法と、配列のエッジ近くで内挿するときに使用する入力配列値を細かく制御できます。

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 番目の出力空間次元に対応します。

TSIZE_B は、出力空間変換次元に沿って配列 B のサイズを指定します。非変換の次元に沿った B のサイズは、これらの次元に沿った A のサイズから直接取得されます。たとえば、T が 2 次元変換であり、size(A) = [480 640 3 10]TDIMS_B[2 1] であり、TSIZE_B [300 200] である場合、size(B)[200 300 3] となります。

TMAP_B は、B の要素の位置と出力変換空間内の位置との対応を指定する別の方法を与えるオプション配列です。TMAP_B を使用すると、たとえば、出力空間における一連の任意の場所でイメージの歪みの結果を計算することができます。TMAP_B が空でない場合は、TMAP_B のサイズは次の形式となります。

 [D1 D2 D3 ... DN L]

ここで、Nlength(TDIMS_B) と等しくなります。ベクトル [D1 D2 ... DN] は、TSIZE_B の代わりに使用されます。TMAP_B が空でない場合、TSIZE_B[] になります。

L の値は T が空であるかどうかに左右されます。T が空である場合、LT.ndims_out となり、TMAP_B の各 L 次元点は T を使用して入力空間位置に変換されます。T が空である場合、Llength(TDIMS_A) となり、TMAP_B の各 L 次元点は入力空間の位置として直接使用されます。

F は、塗りつぶしの値が含まれる倍精度の配列です。F の塗りつぶしの値は、次の 3 つの状況で使用できます。

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

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

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

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

F にはスカラー (NaN など) を指定できます。この場合、その値はすべての非変換次元に渡って複製されます。F にはスカラー以外を指定することもできます。この場合そのサイズは非変換次元の size(A) に左右されます。特に、KAJ 番目の非変換次元である場合、size(F,J)size(A,K) または 1 のいずれかでなければなりません。ユーザーに便利なように、tformarray は単位サイズで任意の次元全体で F を複製するため、複製後、size(F,J)size(A,K) と等しくなります。

たとえば、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]' を指定できます。R、G、および B は、各 10 枚のイメージのそれぞれに対応する色平面の塗りつぶしの値として使用されます。これは、10 枚のイメージすべてに対して同じ色が使用された状態で、RGB の塗りつぶす色を指定するものと解釈されます。

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

  • F には、3 行 10 列の行列を指定できます。これは、10 枚の各イメージで異なる RGB 塗りつぶし色を指定すると、解釈できます。

クラス サポート

A は任意の非スパース数値配列になり、実数または複素数になります。logical クラスも指定できます。

各正方形の幅が 20 ピクセルの 2 行 2 列のチェッカーボード イメージを作成し、射影変換で変換します。リサンプラーの作成時には 'circular' のパディング方法を使用します。出力は、無限チェッカーボードの遠近投影ビューになります。出力次元を交換します。100 行 100 列の出力イメージを指定します。TSIZE_B が指定されているため、TMAP_B を空のままにします。塗りつぶしの値は必要ないため、空のままにします。

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]);
R = makeresampler('cubic','circular');
J = tformarray(I,T,R,[1 2],[2 1],[100 100],[],[]);
figure; imshow(J)

R2006a より前に導入

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