显示具有厚度信息的3D矩阵

时间:2014-04-27 07:37:39

标签: image-processing matlab matlab-figure

我有关于绘制3D矩阵的问题。假设我有一个尺寸为384x384的图像。在循环函数中,我将创建大约10个相同大小的图像,并将它们存储到3D矩阵中并在循环中绘制3D矩阵。每个尺寸(两个切片之间的距离)之间的厚度尺寸为0.69。所以我想用z坐标显示它的厚度。但它效果不好。问题是切片距离可视化不正确。它看起来是蓝色。我想调整可视化并删除颜色。你能帮我修一下matlab代码吗?非常感谢你

    for slice = 1 : 10

       Img = getImage(); %  get one 2D image.
       if slice == 1
         image3D = Img;
       else
         image3D = cat(3, image3D, Img);
      end
      %Plot image
       figure(1)
       [x,y,z] = meshgrid(1:384,1:384,1:slice);
       scatter3(x(:),y(:),z(:).*0.69,90,image3D(:),'filled')

    end

enter image description here

1 个答案:

答案 0 :(得分:0)

可以通过更改色彩图来修复蓝色。现在,您将每个绘图点的颜色设置为image3D中的值,使用默认的jet色图,将较低的值显示为蓝色。在绘制或您想要的任何色彩图之后尝试添加colormap gray;

我不确定你的意思"问题是切片距离可视化不正确"。如果每个切片的厚度为0.69,则图像值是每个厚度为0.69的体素内的所有值的积分。因此,您显示的是每个体素的质心处的一个点,表示该体素内的值的积分。你的z刻度似乎是正确的,因为每个体素质心间隔0.69,尽管它不会从零开始。

我认为更准确的z比例是使用(0:slice-1)+0.5*0.69作为z向量。这将使最低切片的边缘为零,并将每个点直接置于体素的质心上。

我仍然认为这不会为您提供所需的可视化效果。通过查看切片,可以最轻松地查看3D数据。你可以查看matlab's slice,这样就可以制作出像这样的精彩画面:

slice view http://people.rit.edu/pnveme/pigf/ThreeDGraphics/thrd_threev_slice_1.gif