このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
N 次元空間変換
N 次元幾何学的変換は、関数 tformarray
を使用して行います。次元が混在している変換 (入力配列と出力配列の次元が同じではない場合の変換) にも関数 tformarray
を使用できます。出力には、入力より小さい次元数でも大きい次元数でも使用できます。たとえば、2 次元のスライスまたはマニホールド上で 3 次元データをサンプリングする場合は、入力配列の方が低次元になる可能性があります。たとえば、複数の 2 次元変換を 2 次元から 3 次元への 1 つの処理に結合する場合は、出力の方が高元数になる可能性があります。
関数 tformarray
を使用する前に、幾何学的変換の実行に必要な入力引数を準備します。
関数
maketform
を使用して空間変換を作成します。空間変換を行列から作成する場合、maketform
は、その行列が右から乗算する規則であることを必要とします。関数
makeresampler
を使用してリサンプリング構造体を作成します。resampler 構造体は、指定された位置で入力配列の値をどのように内挿するかを定義します。たとえば、内挿を分離できる独自のカーネルを指定したり、関数interp2
またはinterp3
を使用してカスタム リサンプラーを作成したりできるほか、高度なアンチエイリアシング手法を実装することもできます。リサンプリング構造体は、内挿時のエッジの動作も制御します。
次に、関数 tformarray
を使用して、空間変換構造体とリサンプリング構造体を指定し、幾何学的変換をイメージに適用します。また、個々の点と線を変換して、変換の幾何学的な効果を調べることもできます。関数 tformfwd
および tforminv
を使用して、それぞれフォワード変換と逆変換を行います。
この例では、tformarray
を使用してチェッカーボードのイメージを射影変換し、makeresampler
を使用して標準双三次内挿法によるリサンプリング構造体を作成します。
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)
関数 makeresampler
および tformarray
では、変換を多面的に制御できます。たとえば、tformarray
が元のイメージのサイズより大きいイメージをどのように作成したのかに注意してください。また、変換したイメージに元のイメージのコピーが複数含まれているように見えることも確認してください。これは、ピクセルを環状に繰り返して入力イメージを拡大していくパディング方法をリサンプリング構造体で指定して実現します。