Преобразование изображения DICOM в список координат XYZ и их значений - Python

Вот что я пытаюсь достичь на Python (имейте в виду, что я относительно новичок в Python):

  1. Преобразуйте изображение DICOM в список координат xyz вместе с соответствующими значениями пикселей и экспортируйте список в файл .csv.
  2. Восстановите то же изображение из списка координат xyz и значений пикселей, созданного в предыдущей задаче.

До сих пор я мог читать изображения dicom и преобразовывать их в массив с помощью pydicom и numpy. Я также смог извлечь значения пикселей и координат через несколько циклов for и экспортировать этот список как .csv. Но должен быть лучший способ сделать это, чтобы поддерживать какой-то контроль качества, потому что, когда я пытаюсь регенерировать изображения (с помощью другого набора циклов for), я не получаю исходное изображение.

Мне нужно, чтобы обе функции запускались отдельно в разных скриптах Python.

Вот что у меня есть на данный момент:

    #Raster through all pixels and copy each value and coordinates to arrays
    rc_cntr = 0
    for r in range(0,img_rows):
                for c in range(0,img_cols):
                    pixel = dcmarray[r, c]
                    rArray[rc_cntr] = r
                    cArray[rc_cntr] = c
                    zArray[rc_cntr] = z_cntr
                    imgArray[rc_cntr] = dcmarray[r,c]
                    rc_cntr = rc_cntr + 1;

    #Combine arrays into one file
            XYZV = numpy.column_stack([rArray,cArray,zArray, imgArray])
            numpy.savetxt(output_path,XYZV,'%0i','\t') #Save XYZV files for each image

Любая помощь по этому поводу будет принята с благодарностью.

Ура AFH


person Masrawy    schedule 24.07.2013    source источник
comment
Если вы опубликуете часть своего кода, вы увеличите свои шансы получить полезный ответ.   -  person Codey McCodeface    schedule 24.07.2013


Ответы (1)


Я не очень знаком с DICOM, но, глядя на документы pydicom, я думаю, что следующее должно работать:

import dicom
import numpy as np

ds = dicom.read_file('your_file.dcm')
planes, rows, cols = ds.NumberofFrames, ds.Columns, ds.Rows
image = ds.pixel_array # should have shape (planes, rows, cols)

# to get data and coords to write to CSV
image_data = image.ravel()
z, y, x = np.meshgrid(np.arange(planes), np.arange(rows), np.arange(cols),
                      indexing='ij').T

# to write CSV read image back into DICOM file
planes, rows, cols = np.ptp(z)+1, np.ptp(y)+1, np.ptp(x)+1
image = np.zeros((planes, rows, cols), dtype=image_data.dtype)
image[z, y, x] = image_data

ds.NumberofFrames, ds.Columns, ds.Rows = planes, rows, cols
ds.PixelData = image.tostring()
ds.save_as('another_file.dcm')
person Jaime    schedule 24.07.2013
comment
Я смог запустить код, просто было трудно сохранить в .csv и прочитать его, чтобы завершить цикл. - person Masrawy; 29.07.2013