Main Content

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

geometricTransform2d

2 次元幾何学的変換オブジェクト

説明

geometricTransform2d オブジェクトは、点単位のマッピング関数を使用してカスタムの 2 次元幾何学的変換を定義します。

作成

説明

tform = geometricTransform2d(inverseFcn) は、geometricTransform2d オブジェクトを作成し、逆マッピング プロパティ InverseFcn を設定します。

tform = geometricTransform2d(inverseFcn,fowardFcn) は、さらに、フォワード マッピング プロパティ ForwardFcn を設定します。

プロパティ

すべて展開する

逆マッピング関数。関数ハンドルとして指定します。この関数は、n 個の点のパックされた (x,y) 座標を表す n 行 2 列の数値行列として座標を受け入れ、同じ形式の座標を返します。

関数ハンドルの詳細は、関数ハンドルの作成を参照してください。

例: ifcn = @(xy) [xy(:,1).^2, sqrt(xy(:,2))];

フォワード マッピング関数。関数ハンドルとして指定します。この関数は、n 個の点のパックされた (x,y) 座標を表す n 行 2 列の数値行列として座標を受け入れ、同じ形式の座標を返します。

関数ハンドルの詳細は、関数ハンドルの作成を参照してください。

例: ffcn = @(xy) [sqrt(xy(:,1)),(xy(:,2).^2)];

オブジェクト関数

transformPointsForwardフォワード幾何学的変換の適用
transformPointsInverse幾何学的逆変換の適用

すべて折りたたむ

5 つの入力点のパックされた (x,y) 座標を指定します。パックされた座標は 5 行 2 列の行列として格納します。ここで、各点の x 座標は最初の列に、各点の y 座標は 2 番目の列に入れます。

XY = [10 15;11 32;15 34;2 7;2 10];

逆マッピング関数を定義します。この関数はパックされた (x,y) 形式の点を受け入れ、同じ形式の点を返します。

inversefn = @(c) [c(:,1)+c(:,2),c(:,1)-c(:,2)]
inversefn = function_handle with value:
    @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]

逆マッピング関数を格納する 2 次元幾何学的変換オブジェクト tform を作成します。

tform = geometricTransform2d(inversefn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]
        ForwardFcn: []
    Dimensionality: 2

幾何学的逆変換を入力点に適用します。

UV = transformPointsInverse(tform,XY)
UV = 5×2

    25    -5
    43   -21
    49   -19
     9    -5
    12    -8

変換する 5 つの点の x 座標と y 座標のベクトルを指定します。

x = [10 11 15 2 2];
y = [15 32 34 7 10];

逆マッピング関数とフォワード マッピング関数を定義します。どちらの関数もパックされた (x,y) 形式の点を受け入れ、同じ形式の点を返します。

inversefn = @(c) [c(:,1).^2,sqrt(c(:,2))];
forwardfn = @(c) [sqrt(c(:,1)),c(:,2).^2];

逆マッピング関数とオプションのフォワード マッピング関数を格納する 2 次元幾何学的変換オブジェクト tform を作成します。

tform = geometricTransform2d(inversefn,forwardfn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(c)[c(:,1).^2,sqrt(c(:,2))]
        ForwardFcn: @(c)[sqrt(c(:,1)),c(:,2).^2]
    Dimensionality: 2

幾何学的逆変換を入力点に適用します。

[u,v] = transformPointsInverse(tform,x,y)
u = 1×5

   100   121   225     4     4

v = 1×5

    3.8730    5.6569    5.8310    2.6458    3.1623

フォワード幾何学的変換を変換後の点 uv に適用します。

[x,y] = transformPointsForward(tform,u,v)
x = 1×5

    10    11    15     2     2

y = 1×5

   15.0000   32.0000   34.0000    7.0000   10.0000

異方性スケーリングを適用する逆マッピング関数を定義します。この関数はパックされた (x,y) 座標を受け入れ、同じ形式の座標を返さなければなりません。ここで、各点の x 座標は最初の列に、各点の y 座標は 2 番目の列に入れます。

xscale = 0.3;
yscale = 0.5;
inversefn = @(xy) [xscale*xy(:,1), yscale*xy(:,2)];

逆マッピング関数を格納する 2 次元幾何学的変換オブジェクト tform を作成します。

tform = geometricTransform2d(inversefn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(xy)[xscale*xy(:,1),yscale*xy(:,2)]
        ForwardFcn: []
    Dimensionality: 2

変換するイメージを読み取ります。

I = imread('cameraman.tif');
imshow(I)

imwarp を使用して幾何学的逆変換を入力イメージに適用します。イメージは垂直方向に 2 (yscale の逆数) の係数で拡大され、水平方向に 10/3 (xscale の逆数) の係数で拡大されます。

Itransformed = imwarp(I,tform);
imshow(Itransformed)

パックされた (x,y) 座標を受け入れる逆マッピング関数を定義します。ここで、各点の x 座標は最初の列に、各点の y 座標は 2 番目の列に入れます。この例の逆マッピング関数は、極半径成分の 2 乗を計算します。

r = @(c) sqrt(c(:,1).^2 + c(:,2).^2);
w = @(c) atan2(c(:,2), c(:,1));
f = @(c) [r(c).^2 .* cos(w(c)), r(c).^2 .* sin(w(c))];
g = @(c) f(c);

逆マッピング関数を格納する 2 次元幾何学的変換オブジェクト tform を作成します。

tform = geometricTransform2d(g);

変換するカラー イメージを読み取ります。

I = imread('peppers.png');
imshow(I)

入力イメージと出力イメージのサイズとワールド座標範囲を指定して、imref2d オブジェクトを作成します。

Rin = imref2d(size(I),[-1 1],[-1 1]);
Rout = imref2d(size(I),[-1 1],[-1 1]);

幾何学的逆変換を入力イメージに適用します。

Itransformed = imwarp(I,Rin,tform,'OutputView',Rout);
imshow(Itransformed)

R2018b で導入