1

カラーマップとして使用したい 3D 画像があります。リアルタイム データ ストリーミングがあり、現在の位置に応じて、3D 画像に基づいてグラフに特定の色を表示したいと考えています。

私は以前、次のコードを使用してサイズの画像1080x1920(2D 画像) を使用してこれを成功させ、画像に変換しました。

Color=double(imresize(RGBparam.image,[81 144]))/255;

size(myData(:,:1))次に、出力81x144 ... YdataとZdataも同じ次元を持つデータを設定してプロットします(以前に図を作成しました...そのコードは重要ではありません) 。

set(Fig.figim, 'CData', Color);
set(Fig.figim, 'XData', myData(:,:,1) + positionX)
set(Fig.figim, 'YData', myData(:,:,2) + positionY);
set(Fig.figim, 'ZData', myData(:,:,3) + positionZ);

それでうまくいきました!これで、新しい 3D 画像ができました。画像には寸法があり512x512x351ます。同じコードを実行しようとしましたが、うまくいきません。私はこれを試しました:

Color=double(imresize(DICOMparam.Vd,[81 144]))/255;

次に、このようにプロットしようとします

set(Fig.figim, 'CData', Color);
set(Fig.figim, 'XData', myData(:,:,1) + positionX)
set(Fig.figim, 'YData', myData(:,:,2) + positionY);
set(Fig.figim, 'ZData', myData(:,:,3) + positionZ);

しかし、「色は M 行 N 列の行列または M 行 N 行 3 列の配列でなければなりません」というエラーが表示されます。

今、私は物事を変更しようとしたので、M x N x 3 の配列であることが判明しましたが、まず第一に、これは望ましくありません... z- のサンプルを 3 つ以上保持したい私のカラーマップの次元....そして第二に...それはとにかく私にたくさんのエラーを吐き出します. 結論として、x、y、および z コンポーネントを持つデータをプロットするときに、この 3D カラーマップが機能するようにしたいだけです。助けてくれてありがとう、不明な点があれば教えてください!

4

1 に答える 1

0

2D/3D 画像を色の正方形/立方体として想像してください。あなたがしたいこと (私が正しく理解している場合) は、その正方形/立方体のどこにあるかに応じて、myData の各ポイントに色を付けることです。

ただし、これは Matlab での 'CData' の動作ではありません。マトリックス内の実際の値ではなく、インデックス付きの位置に基づいて色をマッピングします。したがって、データが M 行 N 列の場合、カラーマップは M 行 N 列です。たとえば、データの実際の値に関係なく、myData(1,1)に従って色付けされmyColormap(1,1)ます。

M x N x 3 の配列の場合、これらはまだインデックス付きの場所ですが、それぞれの場合の 3 つの値が RGB で色を定義します。


512 x 512 x 351 の立方体のどの色を各ポイントに適用するかを Matlab に直接指示するだけです。myData の x、y、z 位置を 512 x 512 x 351 色空間のおおよその座標に変換する何らかの方法があると仮定します。

xData = myData(:,:,1); 
yData = myData(:,:,2);
zData = myData(:,:,3);

% some magic here happens to make xData 1-512, yData 1-512, zData 1-351
% may require shifts, scaling, rounding as appropriate
% depends on what your myData contains exactly
% values should be integers

% now we find the positions of those points within the 512 x 512 x 351 colorspace
% size of newcmap should be 81 x 144 in your case
cind = sub2ind(size(Color),xData,yData,zData);
newcmap = Color(cind);

set(Fig.figim, 'CData', newcmap);
于 2013-08-28T10:36:07.883 に答える