#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 таким образом. Но сейчас проблема решена. Я опубликую решение позже