как открыть изображение dicom с помощью fastai?

#computer-vision #fast-ai #pydicom #medical-imaging

Вопрос:

Я работаю над изображениями Dicom с помощью pydicom. Но мой проект fasai запущен, и я хочу открыть это изображение Dicom с помощью библиотеки fastai. В fastai , мы обычно делаем open_image(путь), он отлично работает для png или jpg , но если у нас есть изображения Dicom, у нас нет способа легко открыть его. поэтому я использую pydicom, и они получают свой пиксельный массив, а затем преобразуют его в RGB and resized. But when I again apply to open that NumPy array which I made it can't open it because open_image needs путь, а не в изображение numpy. У меня есть вопрос, как я могу открыть изображение Dicom, как мы открываем простое изображение png.

мы открываем обычные изображения, как в fastai:

 im = open_image(img_path)
img.show(figsize=(4,4), ax=axs[0])
 

это дает нам форму (3,H,W)

но в изображении Dicom открыть его так же непросто. Мне нужно открыть его, как раньше. Я попробовал приведенный ниже код, чтобы получить изображение с помощью библиотеки pydicom.

     if (extension == 'dicom'):
    xray = read_xray(img_path)
    img = resize(xray)
    img = to_rgb(img)
    img = normalize(img)
    img = torch.from_numpy(img)
    img = np.transpose(img, [2, 0, 1])
 

Пожалуйста, помогите выбраться из этого пробельма.

Ответ №1:

Fastai имеет специальные функции для работы с медицинскими изображениями. Вы можете проверить https://docs.fast.ai/medical.imaging. Я извлек это из официальных документов, чтобы открыть файл DICOM:

«… fastai.medical.imaging использует pydicom.dcmread для чтения файла DICOM. Чтобы просмотреть заголовок DICOM, укажите путь к тестовому файлу и вызовите dcmread.»

 TEST_DCM = Path('images/sample.dcm')
dcm = TEST_DCM.dcmread()
 

переменная dcm должна содержать ваши изображения.

Ответ №2:

У вас также может быть более полное решение:

 def is_dicomfile(file: Path) -> bool:
    """
    Checks whether a file is a DICOM-file. It uses the feature
    that Dicoms have the string DICM hardcoded at offset 0x80.

    :param file:    The full pathname of the file
    :return:        Returns true if a file is a DICOM-file
    """

    if file.is_file():
        if file.stem.startswith('.'):
            logger.warning(f'File is hidden: {file}')
        with file.open('rb') as dcmfile:
            dcmfile.seek(0x80, 1)
            if dcmfile.read(4) == b'DICM':
                return True
            else:
                # The DICM tag may be missing for anonymized DICOM files
                dicomdict = pydicom.dcmread(str(file), force=True)
                return 'Modality' in dicomdict
    else:
        return False
 

В этом решении вы сначала проверяете, является ли файл файлом DICOM. Затем он использует функции pydicom , чтобы проверить, есть ли в файлах DICOM строка DICM , жестко закодированная со смещением 0x80 .

Комментарии:

1. спасибо за ваш ответ. Я хотел открыть Dicom как можно проще с помощью простой команды, как я показал в разделе кода. im = open_image(img_path) img.show(figsize=(4,4), ax=axs[0]) открывайте простые изображения, поэтому я хочу открыть dicom в fastai таким образом. Но сейчас проблема решена. Я опубликую решение позже