Python中的3D Dicom可视化

时间:2019-05-08 07:24:07

标签: python-3.x image-processing 3d visualization volume

我是3D图像处理的新手。我想知道如何在python中查看dicom系列。我尝试使用matplotlib和VTK。在matplot中,我无法像使用volViewer在matlab中一样查看体积。关于VTK,我无法导入VTKRAyCASt来查看3D。我使用的版本是8.2.0。

我正在使用scipy.ndimages

请为我的批量dicom文件建议一些资源

2 个答案:

答案 0 :(得分:1)

使用vtkplotter,您应该可以轻松做到这一点:

from vtkplotter import *

img = loadDICOM(dicomdir) #returns a vtkImageData object
vol = Volume(img) # create a vtkVolume
show(vol, bg='white')

要安装: pip install vtkplotter

答案 1 :(得分:0)

您可以尝试 ipyvolume https://github.com/maartenbreddels/ipyvolume进行交互式绘图,我发现它非常有用。 另外,您可以使用行进立方体使用matplotlib绘制它们,以获取表面网格,但是速度很慢:

from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np
from skimage import measure

def plot_3d(image, threshold=-300): 
    p = image.transpose(2,1,0)
    verts, faces, normals, values = measure.marching_cubes_lewiner(p, threshold)
    fig = plt.figure(figsize=(10, 10))
    ax = fig.add_subplot(111, projection='3d')
    mesh = Poly3DCollection(verts[faces], alpha=0.1)
    face_color = [0.5, 0.5, 1]
    mesh.set_facecolor(face_color)
    ax.add_collection3d(mesh)
    ax.set_xlim(0, p.shape[0])
    ax.set_ylim(0, p.shape[1])
    ax.set_zlim(0, p.shape[2])

    plt.show()

-300 HU的阈值适合可视化胸部CT扫描,但是如果您要使用MRI(检查强度值分布)或二进制量(阈值= 0),则可以更改阈值。

有一些可视化示例:

Chest CT example