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