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×N×3 数组,但首先,我不想要这个......我想保留不止 3 个 z- 样本我的彩色地图的尺寸​​……其次……无论如何,它向我吐出了一堆错误。所以总而言之,当我绘制具有 x、y 和 z 分量的数据时,我只是希望这个 3D 颜色图能够工作。感谢您的帮助,如果有任何不清楚的地方,请告诉我!

4

1 回答 1

0

将您的 2D/3D 图像想象为颜色的正方形/立方体。您想要做的(如果我理解正确的话)是根据它落入该正方形/立方体的位置为 myData 中的每个点着色。

然而,这不是“CData”在 Matlab 中的工作方式。它根据索引位置映射颜色,而不是矩阵中的实际值。因此,如果您的数据是 M×N,则您的颜色图是 M×N - 例如,无论数据的实际值如何,myData(1,1)都根据myColormap(1,1).

在 M×N×3 数组的情况下,这些仍然只是索引位置,但每种情况下的三个值定义了 RGB 中的颜色。


可以做任何你想做的事,你只需要直接告诉 Matlab 你想在那个 512 x 512 x 351 立方体中应用什么颜色到每个点。假设您有某种方法可以将 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 回答