Main Content

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)

The original image is a single checkerboard tile consisting of one white, one gray, and two black squares. The transformed image replicates the checkerboard tile and appears tilted into a different plane.

関数 makeresampler および tformarray では、変換を多面的に制御できます。たとえば、tformarray が元のイメージのサイズより大きいイメージをどのように作成したのかに注意してください。また、変換したイメージに元のイメージのコピーが複数含まれているように見えることも確認してください。これは、ピクセルを環状に繰り返して入力イメージを拡大していくパディング方法をリサンプリング構造体で指定して実現します。

関連するトピック