Ошибка Nib.load () - Попытка загрузить изображения PNG и DICOM, размер которых будет изменен для FCNN. - PullRequest
0 голосов
/ 27 апреля 2020

Иметь 40 изображений DICOM и 40 изображений PNG (данные и их маски) для полностью CNN, которые загружены в мой Google Drive и были найдены ноутбуком через печать (os.listdir (...)), что подтверждается ниже, в первом блоке кода, где перечислены все имена данных 80 в вышеуказанных наборах.

Также поместили все DICOM и PNG в img_path и mask_path, оба с длиной 40, в второй блок кода ниже.

Теперь пытаемся изменить размеры всех изображений до 256 x 256, прежде чем вводить их в U- net подобную архитектуру для сегментации. Однако не может загрузить их с помощью вызова nib.load (), так как он не может определить тип файла для файлов DCM и PNG, даже если для последнего это не приведет к ошибке, но все равно создаст пустой набор данных, такой как последний блок выходов кода.

Предполагая, что после исправления первых двух строк внутри для l oop в третьем блоке кода предварительная обработка должна быть завершена, и я могу перейти к U- net реализация.

Запустите текущий pydicom в записной книжке Colab и попытайтесь выполнить его вместо вызова nib.load (), который выдал ту же ошибку, что и текущий.


#import data as data
import pydicom
from PIL import Image
import numpy as np
import glob
import imageio
print(os.listdir("/content/drive/My Drive/Images"))
print(os.listdir("/content/drive/My Drive/Masks"))

pixel_data = []
images = glob.glob("/content/drive/My Drive/Images/IMG*.dcm");
for image in images:
    dataset = pydicom.dcmread(image)
    pixel_data.append(dataset.pixel_array)
#print(len(images))
#print(pixel_data)

pixel_data1 = [] ----------------> this section is the trouble area <-------
masks = glob.glob("content/drive/My Drive/Masks/IMG*.png");
for mask in masks:
    dataset1 = imageio.imread(mask)
    pixel_data1.append(dataset1.pixel_array)
print(len(masks))
print(pixel_data1)

['IMG-0004-00040.dcm', 'IMG-0002-00018.dcm', 'IMG-0046-00034.dcm', 'IMG-0043-00014.dcm', ' IMG-0064-00016.dcm ', ....] [' IMG-0004-00040.png ',' IMG-0002-00018.png ',' IMG-0046-00034.png ',' IMG-0043- 00014.png ',' IMG-0064-00016.png ', ....]

0 ----------------> выходы проблемы площадь <-------------- </p>

[]

import glob
img_path = glob.glob("/content/drive/My Drive/Images/IMG*.dcm")
mask_path = glob.glob("/content/drive/My Drive/Masks/IMG*.png")
print(len(img_path))
print(len(mask_path))

40

40

images=[]
a=[]
for a in pixel_data:
    a=resize(a,(a.shape[0],256,256))
    a=a[:,:,:]
    for j in range(a.shape[0]):
        images.append((a[j,:,:]))

Нет вывода, этот раздел работает нормально.

images=np.asarray(images)
print(len(images))

10880

masks=[]               -------------------> the other trouble area <-------
b=[]
for b in masks:
    b=resize(b,(b.shape[0],256,256))
    b=b[:,:,:]
    for j in range(b.shape[0]):
        masks.append((b[j,:,:]))

Нет вывода, пытаясь решить проблему, как исправить этот раздел.

masks=np.asarray(masks) ------------> fix the above section and this
print(len(masks))                     should have no issues

[]

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вы пытаетесь загрузить файлы DICOM снова, используя nib.load, что не работает, как вы уже узнали:

for name in img_path:
    a=nib.load(name)  # does not work with DICOM files
    a=a.get_data()
    a=resize(a,(a.shape[0],256,256))

У вас уже есть данные из файлов DICOM в pixel_data список, так что вы должны использовать это:

for a in pixel_data:
    a=resize(a,(a.shape[0],256,256))  # or something similar, depending on the shape of pixel_data
    ...
0 голосов
/ 27 апреля 2020

Ваш последний l oop for mask in masks: никогда не выполняется, потому что две строки об этом вы задаете masks = [].

Похоже, это должно быть for mask in mask_path:. mask_path - список имен файлов масок.

...