Step 3 of 3

Автоматическая сегментация легких на КТ снимках

Для сегментации легких на КТ снимках будем использовать библиотеку 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.

Comments