Чтение набора данных 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]