Main Content

intrinsicToWorld

固有座標からワールド座標への変換

説明

[xWorld, yWorld] = intrinsicToWorld(R,xIntrinsic,yIntrinsic) は、2 次元空間参照オブジェクト R で定義された関係に基づいて、点の位置を 2 次元固有座標系 (xIntrinsic,yIntrinsic) から 2 次元ワールド座標系 (xWorld,yWorld) にマッピングします。

k 番目の入力座標 (xIntrinsic(k),yIntrinsic(k)) が固有座標系のイメージの境界の外側にある場合、intrinsicToWorld はワールド座標系でのイメージの範囲外に xWorld(k) および yWorld(k) を外挿します。

[xWorld, yWorld, zWorld] = intrinsicToWorld(R,xIntrinsic,yIntrinsic,zIntrinsic) は、3 次元空間参照オブジェクト R を使用して、固有座標系からワールド座標系に点をマッピングします。

すべて折りたたむ

2 次元グレースケール イメージをワークスペースに読み取ります。

m = dicominfo('knee1.dcm');
A = dicomread(m);

ピクセルのサイズと解像度を指定して、imref2d オブジェクトを作成します。DICOM ファイルには、各次元のイメージ解像度を 1 ピクセルあたりのミリメートル単位で指定するメタデータ フィールド PixelSpacing が含まれます。

RA = imref2d(size(A),m.PixelSpacing(2),m.PixelSpacing(1))
RA = 
  imref2d with properties:

           XWorldLimits: [0.1562 160.1562]
           YWorldLimits: [0.1562 160.1562]
              ImageSize: [512 512]
    PixelExtentInWorldX: 0.3125
    PixelExtentInWorldY: 0.3125
    ImageExtentInWorldX: 160
    ImageExtentInWorldY: 160
       XIntrinsicLimits: [0.5000 512.5000]
       YIntrinsicLimits: [0.5000 512.5000]

空間参照オブジェクトを省略して、イメージを表示します。座標軸座標は、固有座標を反映します。座標 (0,0) が左上隅にあることに注目してください。

figure
imshow(A,'DisplayRange',[0 512])
axis on

膝のおおよその位置と幅をミリメートル単位で計算するとします。膝頭の高さで膝を横切って水平に走る線分の端点を選択します。たとえば、(x,y) の点 (34,172) と (442,172) を使用します。

xIntrinsic = [34 442];
yIntrinsic = [172 172];

これらの点を固有座標からワールド座標に変換します。

[xWorld,yWorld] = intrinsicToWorld(RA,xIntrinsic,yIntrinsic)
xWorld = 1×2

   10.6250  138.1250

yWorld = 1×2

   53.7500   53.7500

2 つの点のワールド座標はミリメートル単位で (10.625,53.75) と (138.125,53.75) です。膝のおよその幅 (ミリメートル) は以下のとおりです。

width = xWorld(2) - xWorld(1)
width = 127.5000

3 次元ボリュームをワークスペースに読み取ります。このイメージは、27 フレームの 128 × 128 ピクセル イメージから構成されます。

load mri;
D = squeeze(D);
D = ind2gray(D,map);

ボリュームに関連付けられた imref3d 空間参照オブジェクトを作成します。説明をわかりやすくするために、各次元でピクセル解像度を指定します。解像度は 1 ピクセルあたりのミリメートル単位で指定します。

R = imref3d(size(D),2,2,4)
R = 
  imref3d with properties:

           XWorldLimits: [1 257]
           YWorldLimits: [1 257]
           ZWorldLimits: [2 110]
              ImageSize: [128 128 27]
    PixelExtentInWorldX: 2
    PixelExtentInWorldY: 2
    PixelExtentInWorldZ: 4
    ImageExtentInWorldX: 256
    ImageExtentInWorldY: 256
    ImageExtentInWorldZ: 108
       XIntrinsicLimits: [0.5000 128.5000]
       YIntrinsicLimits: [0.5000 128.5000]
       ZIntrinsicLimits: [0.5000 27.5000]

空間参照オブジェクトを省略して、ボリュームの中央のスライスを表示します。座標軸座標は、固有座標を反映します。座標 (0,0) はこの平面の左上隅にあることに注意してください。z = 0 は最初のスライスのすぐ下にあり、z 軸は頭頂部に向かって上向きに正です。

figure
imshow(D(:,:,13))
axis on

このスライス内の特徴の位置をミリメートル単位で決めるとします。4 つのサンプル点を選択し、その固有座標をベクトルに格納します。たとえば、最初の点は固有座標 (54,46,13) です。このスライス内におけるすべての点で、固有の z 座標は同一です。

xI = [54 71 57 70];
yI = [46 48 79 80];
zI = [13 13 13 13];

intrinsicToWorld を使用して、固有座標をワールド座標に変換します。

[xW,yW,zW] = intrinsicToWorld(R,xI,yI,zI)
xW = 1×4

   108   142   114   140

yW = 1×4

    92    96   158   160

zW = 1×4

    52    52    52    52

結果として得られるベクトルは、選択された点のミリメートル単位のワールド座標 xyz です。たとえば、第 1 の点は、原点から x 方向に 108 mm、y 方向に 92 mm、z 方向に 52 mm オフセットされています。

入力引数

すべて折りたたむ

空間参照オブジェクト。imref2d または imref3d オブジェクトとして指定します。

固有座標系の x 次元に沿った座標であり、数値スカラーまたは数値ベクトルとして指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

固有座標系の y 次元に沿った座標であり、数値スカラーまたは数値ベクトルとして指定します。yIntrinsic は、xIntrinsic と同じ長さです。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

固有座標系の z 次元に沿った座標であり、数値スカラーまたは数値ベクトルとして指定します。zIntrinsic は、xIntrinsic と同じ長さです。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力引数

すべて折りたたむ

ワールド座標系の x 次元に沿った座標であり、数値スカラーまたは数値ベクトルとして返されます。xWorld は、xIntrinsic と同じ長さです。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ワールド座標系の y 次元に沿った座標であり、数値スカラーまたは数値ベクトルとして返されます。yWorld は、xIntrinsic と同じ長さです。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ワールド座標系の z 次元に沿った座標であり、数値スカラーまたは数値ベクトルとして返されます。zWorld は、xIntrinsic と同じ長さです。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

バージョン履歴

R2013a で導入