Step 1 of 2

Часто в работе вам нужно будет конвертировать DICOM формат в обычные изображения, например PNG, а так же изменять размер исходного изображения.

from skimage.transform import resize
import cv2

example = 'stage_2_images/ID_01fe90211.dcm'
imagedata= pydicom.dcmread(example)

img =imagedata.pixel_array
name = example.split('/')[-1][:-4]
img = resize(img,(512,512))
cv2.imwrite('{}.png'.format(name), img * 255)

Такой вариант работает, но не учитывает метаданные, которые относятся к изображению. В основном это касается BitsAllocated и PhotometricInterpretation

Значение Photometric Interpretation определяет предполагаемую интерпретацию данных пикселей изображения.

Нас тут интересуют основные два значения для рентгена:

  • MONOCHROME1 - Пиксельные данные представляют собой одну плоскость монохромного изображения. Минимальное значение выборки предназначено для отображения белым цветом после выполнения любых преобразований шкалы серого VOI.
  • MONOCHROME2 - Пиксельные данные представляют собой одну плоскость монохромного изображения. Минимальное значение выборки предназначено для отображения черным цветом после выполнения любых преобразований шкалы серого VOI.

Bits Allocated - Количество бит, выделенных для каждой выборки пикселей. Каждой выборке должно быть выделено одинаковое количество битов. Выделенные биты должны быть либо 1, либо кратными 8.

Давайте проверим метатеги у нашего примера и попробуем конвертировать изображение.

print(imagedata.BitsAllocated)
print(imagedata.PhotometricInterpretation)

На нашем примере мы увидим 8 и MONOCHROME2. Код переделывать не придётся. Но в случае если PhotometricInterpretation было бы MONOCHROME1 изображение получилось бы инвертированным.

Comments