Nib.load() 错误 - 尝试加载要为 FCNN 调整大小的 PNG 和 DICOM 图像

Nib.load() error - Trying to load PNG and DICOM images to be resized for FCNN

Fully CNN 的 40 张 DICOM 和 40 张 PNG 图像(数据及其掩码)已加载到我的 Google 驱动器中,笔记本已通过 print(os.listdir( ...)),如下面第一段代码所示,其中列出了上述集合中 80 条数据的所有名称。

还在下面的第二个代码块中将所有 DICOM 和 PNG 通配成 img_path 和 mask_path,两者的长度均为 40。

现在尝试将所有图像的大小调整为 256 x 256,然后再将它们输入到类似 U-net 的架构中进行分割。但是,无法通过 nib.load() 调用加载它们,因为它无法计算出 DCM 和 PNG 文件的文件类型,即使对于后者它不会出错但仍会产生一组空数据,如最后一段代码产生。

假设,一旦纠正了第三块代码中 for 循环内的前几行,就应该完成预处理,我可以进入 U-net 实现。

在 Colab 笔记本中使用当前的 pydicom 运行 并尝试用它代替 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 -------------->故障区输出<------------

[]

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

[]

你的最后一个循环 for mask in masks: 永远不会执行,因为你设置了关于它的两行 masks = [].

看起来应该是for mask in mask_path:。 mask_path 是掩码文件名列表。

您正在尝试使用 nib.load 再次加载 DICOM 文件,这不起作用,因为您已经发现:

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))

您已经拥有 pixel_data 列表中 DICOM 文件的数据,因此您应该使用这些:

for a in pixel_data:
    a=resize(a,(a.shape[0],256,256))  # or something similar, depending on the shape of pixel_data
    ...