Как преобразовать 2D-срезы DICOM в 3D-изображение в Python

В настоящее время я сижу над задачей, в которой мне нужно построить срезы DICOM в одну 3D-модель, используя NumPy, Matplotlib (Marchingcubes, Triangulation или Volumemodel).

Пробовал метод с этого сайта:

https://www.raddq.com/dicom-processing-segmentation-visualization-in-python/

но к сожалению у меня не получилось

import pydicom
import numpy as np 
import os
import matplotlib.pyplot as plt
import ipywidgets as widgets
from ipywidgets import interact, fixed


filesNew = []
datenSatz = []


output_path = './Head/'
print()

def load_scan(path):
    slices = [pydicom.read_file(path + '/' + s) for s in os.listdir(path)]
    slices.sort(key = lambda x: int(x.InstanceNumber))
    try:
        slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2])
    except:
        slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation)

    for s in slices:
        s.SliceThickness = slice_thickness

    return slices

for s in load_scan('./Head/'):
    h = s.pixel_array
    datenSatz.append(s) #dataSet from the patient
    filesNew.append(h) #pixel_array





def show_image(image_stack, sliceNumber):
    pxl_ar = image_stack[sliceNumber]
    #print(np.array_equal(pxl_ar,filesNew[sliceNumber]))
    plt.imshow(pxl_ar, cmap= plt.cm.gray)
    plt.show()


slider = widgets.IntSlider(min=0,max=len(filesNew)-1,step=1,value = 0, continuous_update=False)
interact(show_image, image_stack = fixed(filesNew), sliceNumber = slider);

Визуализация фрагментов DICOM


person Tayyeb Hussain    schedule 23.06.2019    source источник


Ответы (1)


Существует пример загрузки набора 2D-срезов КТ и построения 3D-массива.

https://github.com/pydicom/pydicom/blob/master/examples/image_processing/reslice.py

Он не продолжает строить поверхность, но он должен решить первую половину вашей проблемы.

person ColonelFazackerley    schedule 24.06.2019