从2D切片灰度图像集创建3D体积

时间:2011-07-31 17:45:19

标签: matlab image-processing 3d 2d

我将使用Matlab从灰度图像集中创建3D体积。一组包含2D灰度图像的连续和量化切片。我仍然认为自己是Matlab的新手,但这就是我目前的想法:

  • 为3D音量创建一个空白区域。
  • 在每张图片上,我们执行所有预处理操作,以便我们只获得我们感兴趣的部分。 (在这个问题中,假设这个预处理部分始终完美无缺地工作)
  • 浏览图像,2D上的每个像素的x和y坐标将传输到空白区域。对于z坐标,我们可以使用相对于每个切片之间的距离的切片编号。如果像素与另一个像素相邻,则3D点将连接在一起。
  • 重复前两个步骤,直到完成所有切片。我们现在将所有点连接起来就像在2D切片中一样。

但是这里遇到了麻烦,我们如何连接切片之间的点,以便这些点可以成为一个卷?或者在Matlab中有更强大的方法吗?任何建议都受到高度赞赏。

2 个答案:

答案 0 :(得分:16)


第0部分 - 假设


  • 所有2D图像都具有相同的尺寸,因此您的3D体积可以将所有这些图像保存在矩形立方体中
  • 每个2D图像中的大多数像素都具有3D空间关系(如果每个2D图像中的像素具有某种随机分布,则无法进行可视化。)

第1部分 - 从一堆2D图像中可视化3D体积


要从一堆2D图像中可视化或重建3D体积,您可以在matlab中尝试以下工具包。

1 3D CT / MRI图像交互式滑动查看器 http://www.mathworks.com/matlabcentral/fileexchange/29134-3d-ctmri-images-interactive-sliding-viewer

[2] Viewer3D http://www.mathworks.com/matlabcentral/fileexchange/21993-viewer3d

[3] Image3 http://www.mathworks.com/matlabcentral/fileexchange/21881-image3

[4] Surface2Volume http://www.mathworks.com/matlabcentral/fileexchange/8772-surface2volume

[5] SliceOMatic http://www.mathworks.com/matlabcentral/fileexchange/764

请注意,如果您熟悉VTK,可以试试这个: [6] matVTK http://www.cir.meduniwien.ac.at/matvtk/

我目前正在坚持使用[5] SliceOMatic,因为它简单易用。但是,默认情况下,在Matlab中渲染3D非常慢。打开openGL可以提高渲染速度。 (http://www.mathworks.com/help/techdoc/ref/opengl.html)或者简单地说, set(gcf,'Renderer','OpenGL')


第2部分 - 插入切片之间的像素


要在切片之间插入像素,您需要指定插值方法(上面的一些工具包具有此功能/灵活性。否则,为了让您先行一步,插值的一些示例是双三次,样条,多项式等..(你可以通过查看google或google / scholar来解决问题领域更具针对性的插值方法)。


第3部分 - 3D预处理


查看您的程序,首先处理每个2D图像,然后处理体积数据。在许多高级算法或真正的3D处理中,您可以做的是首先处理3D域中的体积数据(简单地说,首先考虑26个邻居或更多的邻居)。完成此步骤后,您只需将体积数据输出到一堆2D图像中进行横截面查看,或者将其提供给上述工具包中的一个以进行3D查看或输出到第三方3D查看应用程序。


我已经按照上述概念进行了自己的医学影像研究项目,上述发现是based on my research experience documented here (with latest revisions)

答案 1 :(得分:3)

MATLAB通常使用3d数组绘制体积数据。数据点沿每个轴在空间上均匀分开。如果3d数组中有您没有数据的站点,通常会为它们分配NaN值,并且各种绘图函数通常可以合理的方式处理(即通常会按照您的意图运行)

如果将切片加载到3d数组中,使得数据的z方向上的相邻点也在数组的第3维中相邻,那么您应该没问题。