Как заменить пиксельные данные в том же файле dicom, используя pydicom, чтобы снова прочитать его с помощью любого средства просмотра dicom?
Я хочу обработать некоторые файлы DICOM, поэтому я тестирую pydicom
для моей работы, что я считаю значительно полезным.
И теперь я хочу загрузить существующие файлы DICOM, заменить массив данных пикселей другим массивом пикселей (например, предварительной обработкой или буквально другим массивом пикселей DICOM) и, прежде всего, хочу снова обработать его любым приложением для просмотра DICOM.
Для этого теста я использовал приведенный ниже учебный код. Этот код загружает файл тестовых данных. Размер изображения 64*64. Код ниже делает выборку из исходных данных. После этого размер изображения составляет 8*8, а результат сохраняется в "after.dcm".
Но когда я читаю файл с помощью приложения DICOM Viewer (я использовал "Dicompass"), размер изображения DICOM по-прежнему составляет 64*64. Что я пропускаю?
Я ссылался на pydicom
документация ( http://pydicom.readthedocs.io/en/stable/getting_started.html, https://pydicom.github.io/pydicom/stable/index.html) для решения моей проблемы.
# authors : Guillaume Lemaitre <g.lemaitre58@gmail.com>
# license : MIT
import pydicom
from pydicom.data import get_testdata_files
print(__doc__)
# FIXME: add a full-sized MR image in the testing data
filename = get_testdata_files('MR_small.dcm')[0]
ds = pydicom.dcmread(filename)
# get the pixel information into a numpy array
data = ds.pixel_array
print(data)
print('The image has {} x {} voxels'.format(data.shape[0],
data.shape[1]))
data_downsampling = data[::8, ::8]
print('The downsampled image has {} x {} voxels'.format(
data_downsampling.shape[0], data_downsampling.shape[1]))
# copy the data back to the original data set
ds.PixelData = data_downsampling.tostring()
# update the information regarding the shape of the data array
ds.Rows, ds.Columns = data_downsampling.shape
# print the image information given in the dataset
print('The information of the data set after downsampling: \n')
print(ds)
print(ds.pixel_array)
print(len(ds.PixelData))
ds.save_as("after.dcm")
1 ответ
Код выглядит хорошо. Но вы не перезаписываете оригинальный файл.
Вы загружаете файл с:
filename = get_testdata_files('MR_small.dcm')[0]
ds = pydicom.dcmread(filename)
где оригинальное имя файла "MR_small.dcm".
Затем вы сохраняете файл с помощью:
ds.save_as("after.dcm")
где имя файла назначения отличается. Это означает, что оригинальный файл все еще остается неизменным.
Вы должны либо загрузить "after.dcm" в программу просмотра DICOM, чтобы проверить
ИЛИ ЖЕ
Вам следует перезаписать файл (pydicom.filewriter.dcmwrite
) пока сохраняю.
Не является частью вашей проблемы, но если вы создаете копию исходного изображения с изменением пиксельных данных, рекомендуется также изменить информацию об экземпляре в наборе данных, например InstanceNumber (0020,0013), SOPInstanceUID (0008,0018) и т. Д.