2013-08-20 83 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

相關問題