Чтение набора данных LIDC-IDRI в его системе каталогов?

Я работаю над проектом с использованием набора данных LIDC-IDRI, который содержит изображения легких CT, который представляет собой файл DICOM (.dcm), данные организованы в папки, в каждой папке есть изображения для одного сканирования, для пояснения я приведу пример первые три папки системы сканирования, а остальные следуют тому же принципу (изображения находятся в последней папке для каждого сканирования)

first scan:  LIDC-IDRI\LIDC-IDRI-0001\01-01-2000-30178\3000566-03192
second scan: LIDC-IDRI\LIDC-IDRI-0002\01-01-2000-98329\3000522-04919
third scan:  LIDC-IDRI\LIDC-IDRI-0003\01-01-2000-94866\3000611-03264

мой вопрос, как читать изображения внутри этой системы папок? Я имею в виду не только одну папку, но все папки? Я использовал код ниже для чтения изображений

import numpy as np
import pydicom
import os
import matplotlib.pyplot as plt

data_path = 'E:/LIDC-IDRI/'
patients_data = os.listdir(data_path)
patients_data.sort()

def load_scan(path):
    slices = [pydicom.read_file(path + '/' + s) for s in os.listdir(path)]

    return slices

full_path = load_scan(data_path + patients_data[0])

когда я запускаю его, это дает мне эту ошибку:

введите описание изображения здесь

но когда я меняю систему папок, как показано ниже:(удаляйте две последние папки для каждого сканирования):

first scan:  LIDC-IDRI\LIDC-IDRI-0001\
second scan: LIDC-IDRI\LIDC-IDRI-0002\
third scan:  LIDC-IDRI\LIDC-IDRI-0003\

работает без ошибок, может кто-нибудь сказать мне, как решить эту проблему, пожалуйста?

1 ответ

Ваше первое сканирование LIDC-IDRI\LIDC-IDRI-0001\01-01-2000-30178\3000566-03192

Ошибка в разрешении запрещена для файла:e:/LIDC-IDRI/LIDC-IDRI-0001/01-01-2000-30178

Обратите внимание 01-01-2000-30178 каталог по пути к первому файлу сканирования. В доступе отказано, поскольку ОС не может прочитать каталог, как это может сделать обычный файл. Вам нужно будет изменить код, чтобы исключить каталоги, или проверить их и спуститься в них.

Вы можете захватить все имена файлов (но не имена каталогов) во всем дереве с помощью следующего кода:

import os.path
all_filenames = []
for dirpath, dirnames, filenames in os.walk(data_path):
    all_filenames += [os.path.join(dirpath, filename) for filename in filenames]
all_filenames.sort()

а затем прочитать их все

slices = [pydicom.read_file(filename) for filename in all_filenames]
Другие вопросы по тегам