2015-02-28 6 views
0

У меня есть 170 фрагментов изображения 512 x 512 в двоичной форме (ручная сегментация из набора данных медицинских изображений). Я хотел бы построить трехмерную визуализацию/модель объекта, уложив эти 170 фрагментов изображения вместе.Как построить трехмерную модель с кодом Matlab

Я использовал функцию конкатенации, чтобы сложить все 170 изображений в одну матрицу, D. Мои кодирования, как показано ниже:

C = cell(1, 170); 
for k = 1:170; 
    % Create a mat filename, and load it into a structure called matData. 
    matFileName = sprintf('AAAmanual%d.mat', k); 
    if exist(matFileName, 'file') 
     load(matFileName); 
     C{k} = BW; 
    else 
     fprintf('File %s does not exist.\n', matFileName); 
    end 
end 

D = cat(3, C{:}); 

Я не уверен, является ли это правильный способ сделать это. Поэтому мне нужны ваши советы и помощь отсюда. Как написать код Matlab или какую функцию использовать для визуализации модели?

enter image description here

я получил что-то построены с использованием сглаженной поверхности, но получил ошибку упоминая из памяти. Кодирование для сглаженной поверхности, как следующие:

patch(isocaps(D,.5),... 
    'FaceColor','interp','EdgeColor','none'); 
p1 = patch(isosurface(D,.5),... 
    'FaceColor','blue','EdgeColor','none'); 
isonormals(D,p1) 
view(3); 
axis vis3d tight 
camlight left; 
colormap jet 
lighting gouraud 

Результат от smooth3 участка: enter image description here

Как я должен преодолеть отказ от проблем с памятью? или есть лучший способ построить это?

+0

это расстояние пикселя и расстояние ломтика то же самое? В большинстве приложений расстояние между срезами выше расстояния между пикселями в пределах одного среза. – Daniel

+0

Являются ли эти расстояния важными? как используется расстояние при построении модели? можете ли вы дать мне знать, как построить, если расстояние между срезами отличается от расстояния между пикселями внутри одного фрагмента? спасибо alot .. – Onered

+0

Если расстояние между срезами, например, вдвое превышает расстояние между пикселями, но вы не отражаете это в своем коде, круг будет отображаться как эллипс. – Daniel

ответ

0

Вот обновленный вариант, включая масштабирование:

%just some random input data 
VoxelGrid=randi(100,30,20,30)==1; 
%x axis: 1 voxel is 1 cm 
%y axis: 1 voxel is 2cm 
%z axis: 1 voxel is .5 cm 
resolution=[1,2,.5]; 

GridSize=size(VoxelGrid); 
for x = 1:GridSize(1) 
    for y = 1:GridSize(2) 
     for z = 1:GridSize(3) 
      if VoxelGrid(x, y, z) 
       %http://www.mathworks.com/matlabcentral/fileexchange/15161-plotcube 
       plotcube( resolution, ... 
          [x, y, z].*resolution, ... 
          0.4, ... 
          [1, 0, 0]) 
      end 
     end 
    end 
end 
+0

Спасибо ... у меня есть кубический сюжет. Но я думаю, что это не тот вид, который я хотел ... Я хочу что-то выше, то, что я делаю, используя плавную функцию. – Onered

Смежные вопросы