2013-08-20 55 views
1

我有一个我想用作色彩图的三维图像。我有实时数据流,并根据我当前的位置(s),我希望我的图形根据我的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-by-N-3阵列,但首先,我不想这个...我想保留我的色彩地图的z维度不止3个样本......其次......它在我身上吐出了一堆错误。 所以总而言之,我只是希望在绘制具有x,y和z分量的数据时,使用此3D颜色映射工作。感谢您的帮助,让我知道如果有什么不清楚!

回答

0

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

但是,这不是'CData'在Matlab中的工作方式。它根据索引位置来映射颜色,而不是矩阵中的实际值。因此,如果你的数据是M乘N,你的色彩地图是M乘N,例如不管数据的实际值如何,myData(1,1)根据myColormap(1,1)进行着色。

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


这是可以做到你想要什么,你只需要直接告诉MATLAB要应用到每个点什么颜色在512×512×351立方。假设你有将X,Y,Z位置在myData的成近似坐标在512×512×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); 
+0

谢谢终于回应了这个问题,尽管我已经想通了,但现在= p。我做了同样的事情,你基本上描述过,我只是不得不重做我的数据的维度 – spaderdabomb

+0

你...我懒得哈哈大笑 – spaderdabomb

相关问题