将3D图像转换为Colormap

时间:2013-08-20 09:08:34

标签: image matlab color-mapping

我想要用作色彩图的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-by-N矩阵或M-by-N-by-3阵列”

现在我尝试改变事物,结果证明它是一个M-by-N-by-3阵列,但首先,我不想要这个......我想保留的不只是3个样本我的颜色贴图的z维度......其次......无论如何它都会向我吐出一堆错误。 总而言之,我只想在绘制具有x,y和z分量的数据时使用此3D色彩图。感谢您的帮助,如果有什么不清楚,请告诉我!

1 个答案:

答案 0 :(得分:0)

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

但是,这并不是'CData'在Matlab中的工作原理。它根据索引位置而不是矩阵中的实际值来映射颜色。因此,如果您的数据是M-by-N,则您的色彩图是M-by-N - 例如无论数据的实际值如何,myData(1,1)都会根据myColormap(1,1)进行着色。

在M-by-N-by-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);