2012-07-25 45 views
6

Tôi có một lưới, nó là 3D và nó lưu trữ một số.3D voxel Hiển thị trong MATLAB

Dưới đây là một ví dụ về lưới của tôi nếu nó là 2 * 2 * 2:

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

Số 0 thường sẽ là một số mà tôi muốn đại diện cho màu hoặc nan nếu không có voxel tồn tại ở đó . Những gì tôi muốn làm là hiển thị một lưới voxel với matlab như trong hình sau:

enter image description here

Trừ rằng vocels nên được tô màu với số lượng trong tế bào.

Có ai biết cách thực hiện việc này không, nếu có thư viện hay cách nào đó để tự viết nó?

Trả lời

5

Vì vậy, tôi phát hiện ra bạn có thể làm điều đó như thế này:

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 

này sẽ in ra một đại diện voxel màu xám quy mô như thế này:

enter image description here

Bây giờ tôi chỉ cần một số giúp đỡ nhận màu sắc hoạt động.

+0

nay áp dụng các giải pháp từ bạn câu hỏi khác http://stackoverflow.com/questions/11642826/use-matlab-colour-scheme-to-convert-float-to-rgb để nhận được màu sắc của bạn –

+0

Đã làm, cảm ơn bạn đã bình luận của bạn. –

+0

Bạn có thể đăng toàn bộ mã nguồn để tái tạo kết quả không? – mrgloom

0

Toàn bộ mã nguồn được cung cấp bên dưới vẽ đồ thị theo các màu khác nhau. Hãy nhớ rằng để có được thông tin màu sắc, chúng ta phải có giá trị Float giữa < 0,1>. Vì vậy, khối lượng đầu vào được chuẩn hóa để thay đổi giá trị cường độ trong phạm vi này và sau đó kịch bản lệnh plotcube được sử dụng để hiển thị các khối riêng lẻ. Tập lệnh Được sử dụng để lấy màu là @Use matlab colour scheme to convert float to RGB. Âm mưu khối cá nhân là @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 
Các vấn đề liên quan