我要使用 Matlab 从灰度图像集创建一个 3D 体积。一组包含二维灰度图像的连续量化切片。我仍然认为自己是 Matlab 的菜鸟,但这是我目前的想法:
- 为 3D 体积创建一个空白空间。
- 在每张图片上,我们执行所有的预处理操作,以便我们只得到我们感兴趣的部分。 (在这个问题中,假设这个预处理部分总是完美地工作)
- 遍历图像,每个像素在 2D 上的 x 和 y 坐标将转移到空白空间。对于 z 坐标,我们可以使用与每个切片之间的距离相关的切片编号。如果一个像素与另一个像素相邻,则 3D 点将连接在一起。
- 重复前两个步骤,直到完成所有切片。我们现在将连接所有点,就像在 2D 切片中一样。
但是麻烦来了,我们如何将切片之间的点连接起来,让这些点成为一个体积呢?或者在 Matlab 中有更强大的方法吗?非常感谢任何建议。
最佳答案
第 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] 图3 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 部分 - 在切片之间插入像素
要在切片之间插入像素,您需要指定一种插值方法(上面的一些工具包具有这种能力/灵 active 。否则,为了给您一个良好的开端,插值的一些示例是双三次、样条、多项式等..(您可以通过在 google 或 google/scholar 上查找更适合您的问题领域的插值方法来解决这个问题)。
第 3 部分 - 3D 预处理
查看您的程序,您通过首先处理每个 2D 图像来处理体积数据。在很多高级算法中,或者在真正的3D处理中,你可以做的是先处理3D域中的体积数据(简单地说,你先考虑26个或更多的邻居。)。完成此步骤后,您可以简单地将体积数据输出到一堆 2D 图像中以供横截面查看或提供给上述工具包之一以进行 3D 查看或输出到第三方 3D 查看应用程序。
我在自己的医学影像研究项目中遵循了上述概念,上述发现是 based on my research experience documented here (with latest revisions) .
关于matlab - 从灰度图像的 2D 切片集创建 3D 体积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891154/