Main Content

worldToSubscript

ワールド座標から行と列の添字への変換

説明

[I, J] = worldToSubscript(R,xWorld,yWorld) は、2 次元空間参照オブジェクト R で定義された関係に基づいて、点をワールド座標系 (xWorld,yWorld) から添字配列 IJ にマッピングします。

k 番目の入力座標系 (xWorld(k),yWorld(k)) がワールド座標系のイメージの境界の外側にある場合、worldToSubscript は対応する添字 I(k) および J(k) を NaN に設定します。

[I, J, K] = worldToSubscript(R,xWorld,yWorld,zWorld) は、3 次元空間参照オブジェクト R を使用して、3 次元ワールド座標系から添字配列 IJ、および K にマッピングします。

すべて折りたたむ

膝の 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,RA,'DisplayRange',[0 512])

Figure contains an axes object. The axes object contains an object of type image.

サンプル点を選択し、そのワールド座標 x および y をベクトルに格納します。たとえば、最初の点はワールド座標 (38.44,68.75) で、2 番目の点はそれよりも 1 mm 右にあり、3 番目の点は 7 mm 下にあります。最後の点はイメージ境界外にあります。

xW = [38.44 39.44 38.44 -0.2];
yW = [68.75 68.75 75.75 1];

worldToSubscript を使用してワールド座標から行と列の添字に変換します。

[rS, cS] = worldToSubscript(RA,xW,yW)
rS = 1×4

   220   220   242   NaN

cS = 1×4

   123   126   123   NaN

結果のベクトルには、点に最も近い行インデックスと列インデックスが含まれます。インデックスは離散的であり、イメージ境界外の点の行インデックスと列インデックスの両方に NaN があります。

また、入力座標と出力座標の順序が逆になります。ワールド座標の x のベクトル xW は、2 番目の出力ベクトル cS に対応します。ワールド y 座標ベクトル yW は、最初の出力ベクトル rS に対応します。

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]

サンプル点を選択し、そのワールド座標 xy、および z をベクトルに格納します。たとえば、最初の点はワールド座標 (108,92,52) で、2 番目の点はそれよりも 3 mm 上 (+z 方向) にあり、3 番目の点は 5.2 mm 右 (+x 方向) にあります。最後の点はイメージ境界外にあります。

xW = [108 108 113.2 2];
yW = [92 92 92 -1];
zW = [52 55 52 0.33];

worldToSubscript を使用してワールド座標から行、列、および平面の添字に変換します。

[rS, cS, pS] = worldToSubscript(R,xW,yW,zW)
rS = 1×4

    46    46    46   NaN

cS = 1×4

    54    54    57   NaN

pS = 1×4

    13    14    13   NaN

結果として得られるベクトルには、点に最も近い列インデックス、行インデックス、および平面インデックスが含まれます。インデックスは離散的であり、イメージ境界外の点は、NaN のインデックス値を持つことに注意してください。

また、入力座標と出力座標の順序が逆になります。ワールド座標の x のベクトル xW は、2 番目の出力ベクトル cS に対応します。ワールド y 座標ベクトル yW は、最初の出力ベクトル rS に対応します。

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

出力引数

すべて折りたたむ

行インデックス。正の整数のスカラーまたはベクトルとして返されます。IyWorld の長さと同じです。m 行 n 列または m x n x p のイメージの場合、1 ≤ I ≤ m です。

データ型: double

列インデックス。正の整数のスカラーまたはベクトルとして返されます。JxWorld の長さと同じです。m 行 n 列または m x n x p のイメージの場合、1 ≤ J ≤ n です。

データ型: double

平面インデックス。正の整数のスカラーまたはベクトルとして返されます。KzWorld の長さと同じです。m x n x p のイメージの場合、1 ≤ K ≤ p です。

データ型: double

バージョン履歴

R2013a で導入