Pydicom манипулирует CT PixelData и сохраняет результат, используя 12 бит - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь манипулировать данными пикселей в КТ-изображении и не могу сохранить результат в том же формате, что и исходное изображение.

ds = pydicom.dcmread(dicomFilename)
pixels = ds.pixel_array.astype(numpy.double)
#do something to pixels
ds.PixelData = pixels.astype(numpy.uint16).tobytes()
ds.save_as(outputFilename)

Мое входное изображение имеет

ds.BitsStored=12
ds.Highbit=11
ds.BitsAllocated=16

Когда я сохраняю свое манипулируемое изображение выше без изменения полей BitsStored / Highbit, при повторном импорте в коммерческих средствах просмотра dicom отображаются усеченные значения пикселей. Если я изменю свой вывод на

ds.BitsStored=16
ds.Highbit=15
ds.BitsAllocated=16

Эта проблема исчезнет. Однако некоторые читатели DICOM предполагают, что данные CT всегда хранятся с 12 битами. Есть ли способ преобразовать массив NumPy так, чтобы я мог хранить только 12 бит на пиксель (при условии, что 12 бит достаточно для представления всех значений в моих данных)?

Большое спасибо!

...