2012-10-26 58 views
2

我期待从dicom文件中将3D矩阵可视化为matlab。因为我不是很熟悉MATLAB,我设法从this post获得帮助:Matlab 3D体积可视化 - dicom文件

不同的是,我的矩阵不是由1个0,但负数是正确红色imshow(dicomeread(dicomFile))

我怎样才能获得相同的对比度,但使用3D渲染?

我的代码:

dicomFilesZm = dir(fullfile(myDcmFolder, 'SLZ-*.dcm')); %Get files name 
dicomFilesZp = dir(fullfile(myDcmFolder, 'SLZ+*.dcm')); %~ 

Z = dicomFilesZm(end:-1:1); % sort 

dicomFilesZ = [Z ; dicomFilesZp]; % recompose final array with files name 

Iz1 = fullfile(myDcmFolder, dicomFilesZ(1).name); 
v = NaN([size(dicomread(Iz1)) numel(dicomFilesZ)]); % creation of empty matrix with the good size  
for i = 1 : numel(dicomFilesZ) 
    Iz = fullfile(myDcmFolder, dicomFilesZ(i).name); 
    v(:,:,i) = dicomread(Iz); % fill the matrix with each image 
end 

p = patch(isosurface(v,0)); 
isonormals(v, p) 
set(p, 'FaceColor','r', 'EdgeColor','none') 
daspect([1 1 1]) 

谢谢您的帮助。

回答

3

两个选项来解决你的问题:

  1. 天真,为什么你不只是设置v=v+min(v(:))因此图像会从零扩展到不同的最大价值?

  2. 为什么不用isosurface(V,isovalue)负号isovlaue为您解决这个问题? 或者,如果您想对从isovalues环(-n:STEP_SIZE:M),以获得您想要的动态范围(有一些alpha(0.2)看到你想要的层)

+0

谢谢你回来: –

+0

1:我刚开始使用matlab,但我很难理解你的线条究竟做了什么,尽管我得到了它应该做的事情,谢谢,我从现在开始知道。 2:我试图把-1作为iso等值的等值面,但仍然是我的结果是黑色和白色:/ 我在想,如果imshow可以有一个很好的对比,为什么不是isosurface? 我可以提供更多信息,如矩阵的一部分诉 谢谢你的帮助。 –

+0

isonormals(v,p)是颜色的问题。我只是删除它,如果它有帮助... –