Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

geometricTransform3d

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

説明

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

作成

説明

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

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

プロパティ

すべて展開する

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

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

例: ifcn = @(xyz) [xyz(:,1).^2,xyz(:,2).^2,xyz(:,3).^2];

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

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

例: ffcn = @(xyz) [sqrt(xyz(:,1)),sqrt(xyz(:,2)),sqrt(xyz(:,3))];

オブジェクト関数

outputLimitsFind output spatial limits given input spatial limits
transformPointsForwardApply forward geometric transformation
transformPointsInverseApply inverse geometric transformation

すべて折りたたむ

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

XYZ = [5 25 20;10 5 25;15 10 5;20 15 10;25 20 15];

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

inverseFcn = @(c) [c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2];

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

tform = geometricTransform3d(inverseFcn)
tform = 
  geometricTransform3d with properties:

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

この 3 次元幾何学的変換の逆変換を入力点に適用します。

UVW = transformPointsInverse(tform,XYZ)
UVW = 5×3

    30   -20   400
    15     5   625
    25     5    25
    35     5   100
    45     5   225

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

x = [3 5 7 9 11];
y = [2 4 6 8 10];
z = [5 9 13 17 21];

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

inverseFcn = @(c)[c(:,1).^2,c(:,2).^2,c(:,3).^2];
forwardFcn = @(c)[sqrt(c(:,1)),sqrt(c(:,2)),sqrt(c(:,3))];

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

tform = geometricTransform3d(inverseFcn,forwardFcn)
tform = 
  geometricTransform3d with properties:

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

この 3 次元幾何学的変換の逆変換を入力点に適用します。

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

     9    25    49    81   121

v = 1×5

     4    16    36    64   100

w = 1×5

    25    81   169   289   441

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

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

     3     5     7     9    11

y = 1×5

     2     4     6     8    10

z = 1×5

     5     9    13    17    21

横軸を中心にした鏡映を実行する逆マッピング関数を定義します。この関数はパックされた (x,y,z) 座標を受け入れ、同じ形式の座標を返さなければなりません。ここで、1 番目、2 番目、3 番目の列には、それぞれ x 座標、y 座標、z 座標を格納します。

inverseFcn = @(xyz)[xyz(:,1),-xyz(:,2),xyz(:,3)];

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

tform = geometricTransform3d(inverseFcn)
tform = 
  geometricTransform3d with properties:

        InverseFcn: @(xyz)[xyz(:,1),-xyz(:,2),xyz(:,3)]
        ForwardFcn: []
    Dimensionality: 3

変換する MRI ボリュームを読み込んで表示します。

s = load('mri');
mriVolume = squeeze(s.D);

imwarp を使用して幾何学的逆変換を入力 MRI ボリュームに適用します。

[mriVolumeTransformed] = imwarp(mriVolume,tform,'nearest','SmoothEdges',true);

入力 MRI ボリュームのイメージ スライスをモンタージュとして表示します。

montage(mriVolume,'Size',[4 8],'BackgroundColor','w')
title('Image Slices from 3-D MRI','FontSize',14)

変換後の MRI ボリュームのイメージ スライスをモンタージュとして表示します。変換後のイメージ スライスは、x 軸に関する入力イメージ スライスの鏡映です。

montage(mriVolumeTransformed,'Size',[4 8],'BackgroundColor','w')
title('Image Slices from Inverse Geometric Transformation of 3-D MRI','FontSize',14)

バージョン履歴

R2018b で導入