Часто в работе вам нужно будет конвертировать 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 определяет предполагаемую интерпретацию данных пикселей изображения.
Нас тут интересуют основные два значения для рентгена:
Bits Allocated - Количество бит, выделенных для каждой выборки пикселей. Каждой выборке должно быть выделено одинаковое количество битов. Выделенные биты должны быть либо 1, либо кратными 8.
Давайте проверим метатеги у нашего примера и попробуем конвертировать изображение.
print(imagedata.BitsAllocated)
print(imagedata.PhotometricInterpretation)
На нашем примере мы увидим 8 и MONOCHROME2. Код переделывать не придётся. Но в случае если PhotometricInterpretation было бы MONOCHROME1 изображение получилось бы инвертированным.