Анализ медицинских изображений в Python: Сегментация медицинских изображений / Сторонние библиотеки для сегментации медицинских изображений
Для сегментации легких на КТ снимках будем использовать библиотеку lungmask. В качестве датасета возьмем CT Medical Images
Устанавливаем библиотеку
pip install git+https://github.com/JoHof/lungmask
Создадим отдельную директорию и скопируем туда один срез КТ
mkdir siim/png
cp siim/dicom_dir/ID_0099_AGE_0061_CONTRAST_0_CT.dcm siim/png
Всё, что нам остаётся это запустить скрипт сегментации
import SimpleITK as sitk
from lungmask import mask as lungmask_mask
from PIL import Image
import numpy as np
def get_lung_mask(f):
series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(f)
sorted_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(f, series_IDs[0])
series_reader = sitk.ImageSeriesReader()
series_reader.SetFileNames(sorted_file_names)
series_reader.MetaDataDictionaryArrayUpdateOn()
series_reader.LoadPrivateTagsOn()
image = series_reader.Execute()
segmentation = (lungmask_mask.apply(image) > 0).astype('uint8')
for i in range(len(sorted_file_names)):
filename = sorted_file_names[i].split('/')[1]
norm = (segmentation.astype(np.float)-segmentation.min())*255.0 / (segmentation.max()-segmentation.min())
im = Image.fromarray(norm[i,:,:].astype('uint8'))
im.convert('1').save(f'masks/{filename}.png')
get_lung_mask('siim/png/')
Результат в виде файла можно будет увидеть в папке siim/masks.