2012-07-25 24 views
6

में डिस्प्ले मेरे पास एक ग्रिड है, यह 3 डी है और यह एक नंबर स्टोर करता है।3 डी voxel matlab

यहाँ मेरी ग्रिड का एक उदाहरण है अगर यह होता है 2 * 2 * 2:

(:, :, 1) -> [0, 0; 
       0, 0] 
(:, :, 2) -> [0, 0; 
       0, 0] 

संख्या 0 आमतौर पर एक नंबर है कि मैं रंग या नान के साथ प्रतिनिधित्व करने के लिए चाहते हैं हो सकता है अगर कोई वॉक्सेल वहां मौजूद । मुझे क्या करना चाहते हैं निम्नलिखित चित्र में तरह matlab के साथ एक वॉक्सेल ग्रिड प्रदर्शित है:

enter image description here

सिवाय कि vocels कक्ष में संख्या के साथ रंग का होना चाहिए

क्या कोई यह जानता है कि ऐसा करने के लिए, यदि लाइब्रेरी है या इसे लिखने का कोई तरीका है?

उत्तर

5

तो मुझे पता चला कि आप इसे इस प्रकार कर सकते हैं:

for x = 1:GridSize(1) 
    for y = 1:GridSize(2) 
     for z = 1:GridSize(3) 

      if (~isnan(VoxelGrid(x, y, z))) 

       cubeLength = VoxelGrid.resolution; 

       plotcube( [cubeLength cubeLength cubeLength], ... 
          [x, y, z], ... 
          0.9, ... 
          [colour, colour, colour]) 
      end 
     end 
    end 
end 

यह इस तरह एक ग्रे पैमाने वॉक्सेल प्रतिनिधित्व बाहर प्रिंट होगा:

enter image description here

अब मैं सिर्फ कुछ मदद हो रही है की जरूरत है रंग काम कर रहा है।

+0

अब आप से अन्य प्रश्न http://stackoverflow.com/questions/11642826/use-matlab-colour-scheme-to-convert-float-to-rgb समाधान लागू है अपने रंग प्राप्त करें –

+0

किया है, आपकी टिप्पणी के लिए धन्यवाद। –

+0

क्या आप परिणाम पुन: उत्पन्न करने के लिए पूर्ण स्रोत कोड पोस्ट कर सकते हैं? – mrgloom

0

पूर्ण स्रोत कोड विभिन्न रंगों में क्यूब्स साजिश के नीचे दिया गया है। याद रखें कि रंग की जानकारी प्राप्त करने के लिए, हमारे पास < 0,1> के बीच फ़्लोट मान होना चाहिए। तो इस रेंज में तीव्रता मानों को स्थानांतरित करने के लिए इनपुट वॉल्यूम सामान्यीकृत किया जाता है और फिर प्लॉटक्यूब स्क्रिप्ट का उपयोग व्यक्तिगत क्यूब्स प्रदर्शित करने के लिए किया जाता है। रंग प्राप्त करने के लिए प्रयुक्त स्क्रिप्ट @Use matlab colour scheme to convert float to RGB है। व्यक्तिगत क्यूब्स की साजिश रचने @http://www.mathworks.com/matlabcentral/fileexchange/15161-plotcube

%PLOTCUBE(EDGES,ORIGIN,ALPHA,COLOR) 

VoxelGrid(:,:,1)=[5 3;8 1]; 
VoxelGrid(:,:,2)=[9 2;7 1]; 

%VoxelGrid=round(20*rand(8,8,8)); %Uncomment this line to display dense volume 

GridSize=size(VoxelGrid); 
for x = 1:GridSize(1) 
    for y = 1:GridSize(2) 
     for z = 1:GridSize(3) 
      if (~isnan(VoxelGrid(x, y, z))) 
       cubeLength = 1; 
       f = VoxelGrid(x,y,z)/max(max(max(VoxelGrid))); 
       cm = colormap; % returns the current color map 
       colorID = max(1, sum(f > [0:1/length(cm(:,1)):1])); 
       colour = cm(colorID, :); % returns your color 
       plotcube([cubeLength cubeLength cubeLength],[x, y, z],0.9,[colour]); 
      end 
     end 
    end 
end