Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我在将漂亮的数据片段转换为png图像时会得到完全黑色的标签?_Python_Image Segmentation_Unity3d Unet - Fatal编程技术网

Python 为什么我在将漂亮的数据片段转换为png图像时会得到完全黑色的标签?

Python 为什么我在将漂亮的数据片段转换为png图像时会得到完全黑色的标签?,python,image-segmentation,unity3d-unet,Python,Image Segmentation,Unity3d Unet,我对深度学习和图像分割任务非常陌生 我想通过对每个病例的中心50个切片,对3D漂亮数据(CT扫描)的2D unet进行训练。我将图像和标签保存为png,但标签是完全黑色的。我的目标是预测肿瘤区域(Y),给出CT扫描切片(X) 我做错了什么 我的代码: labels = [] for i in range (0,100): seg = Path("/content/drive/My Drive/")/"case_{:05d}".format(i) / "segmentation.nii.gz

我对深度学习和图像分割任务非常陌生

我想通过对每个病例的中心50个切片,对3D漂亮数据(CT扫描)的2D unet进行训练。我将图像和标签保存为png,但标签是完全黑色的。我的目标是预测肿瘤区域(Y),给出CT扫描切片(X)

我做错了什么

我的代码:

labels = []

for i in range (0,100):
  seg = Path("/content/drive/My Drive/")/"case_{:05d}".format(i) / "segmentation.nii.gz"
  seg = nib.load(seg)
  seg = seg.get_data()
  n_i, n_j, n_k = seg.shape
  seg = seg[int(((n_i-1)/2)-25):int(((n_i-1)/2)+25),:,:]

  for i in range(seg.shape[0]):
    labels.append((seg[i,:,:]))
    i+=1

labels = np.array(labels)

for i in range(labels.shape[0]):
    label = (labels[i,:,:])
    imsave('/content/drive/My Drive/labels/labels_slice_{:05d}.png'.format(i), label)
    i += 1
我对图像做了同样的处理,得到以下.png文件:

但对于标签,我只得到一个完全黑色的图像

图像和标签的数据类型分别为float64和uint16


我在3D切片器和nipy中检查了您的nifti文件,该文件非常好。在这个分割文件中的608个切片中,只有181-397个切片具有正值,因此您应该得到其余的完全黑色图像

这个简短的片段使我能够在第300个片段中保存正面示例:

导入nibabel
将matplotlib.pyplot作为plt导入
seg=nibabel.load(“D:/Downloads/segmentation.nii.gz”)
data=seg.get_fdata()
图层=数据[300,:,:]
plt.imsave(“D:/Downloads/seg.png”,layer,cmap='gray')

让我知道你是否可以用上面的代码复制这个

另外,我知道这不是问题的一部分,但是你应该强烈地考虑使用NIFTI(或NRRD)格式,而不是将它们转换成PNG文件。 1) 当保存到PNG时,CT扫描会丢失很多信息。基本上,您正在重新缩放CT值,这些值通常在-2000到+2000到0-255像素范围内


2) 与分段遮罩类似,在nifti文件中,分段区域保存为“1”,背景保存为“0”。当您将其保存到PNG时,您会将其重新缩放到0-255,并且您必须再次将其转换回网络培训。

我在3D切片器和nipy中检查了您的nifti文件,该文件非常好。在这个分割文件中的608个切片中,只有181-397个切片具有正值,因此您应该得到其余的完全黑色图像

这个简短的片段使我能够在第300个片段中保存正面示例:

导入nibabel
将matplotlib.pyplot作为plt导入
seg=nibabel.load(“D:/Downloads/segmentation.nii.gz”)
data=seg.get_fdata()
图层=数据[300,:,:]
plt.imsave(“D:/Downloads/seg.png”,layer,cmap='gray')

让我知道你是否可以用上面的代码复制这个

另外,我知道这不是问题的一部分,但是你应该强烈地考虑使用NIFTI(或NRRD)格式,而不是将它们转换成PNG文件。 1) 当保存到PNG时,CT扫描会丢失很多信息。基本上,您正在重新缩放CT值,这些值通常在-2000到+2000到0-255像素范围内


2) 与分段遮罩类似,在nifti文件中,分段区域保存为“1”,背景保存为“0”。当您将其保存到PNG时,您会将其重新缩放到0-255,并且您必须再次将其转换回网络培训。

加载nifti文件后打印出
seg.max()
会得到什么?另外,
.get_data()
似乎已被弃用,nipy现在使用
.get_fdata()
。你能上传一个nifti示例文件来重现错误吗?@jwitos谢谢你的评论。打印
seg.max()。还有一个例子,加载nifti文件后打印出
seg.max()
会得到什么?另外,
.get_data()
似乎已被弃用,nipy现在使用
.get_fdata()
。你能上传一个nifti示例文件来重现错误吗?@jwitos谢谢你的评论。打印
seg.max()。你有一个例子,谢谢。我能够复制结果。我理解你的意思,并用以下代码处理了掩码:
masks=[]范围(0,25)内的I:b=[]msk=Path(“/content/drive/My drive”)/“case{:05d}.format(I)/“segmentation.nii.gz”b=nib.load(msk)b=b.get_fdata()print(“mask case{:05d}.format(I))b=resize(b,(b.shape[0],128128))b=b[,:,:]对于范围内的j(b.shape[0]):masks.append((b[j,:,:])masks=np.asarray(masks)
您认为这是一个好方法还是建议其他方法?您好,这取决于您最终要实现的目标。您在上一条评论中发布的代码有点混乱,因为它看起来像是
b
掩码
矩阵是相同的。此外,我还要再次检查调整矩阵大小后,矩阵的外观如何。根据您使用的库(skimage?numpy?),它可以更改原始矩阵的值。如果您想通过电子邮件继续此对话,请通过gmail.com上的jwitos与我联系。谢谢。我能够复制结果。我理解你的意思,并用以下代码处理了掩码:
masks=[]范围(0,25)内的I:b=[]msk=Path(“/content/drive/My drive”)/“case{:05d}.format(I)/“segmentation.nii.gz”b=nib.load(msk)b=b.get_fdata()print(“mask case{:05d}.format(I))b=resize(b,(b.shape[0],128128))b=b[,:,:]对于范围内的j(b.shape[0]):masks.append((b[j,:,:])masks=np.asarray(masks)
您认为这是一个好方法还是建议其他方法?您好,这取决于您最终要实现的目标。您在上一条评论中发布的代码有点混乱,因为它看起来像是
b
掩码
矩阵是相同的。此外,我还要再次检查调整矩阵大小后,矩阵的外观如何。根据您使用的库(skimage?numpy?),它可以更改原始矩阵的值。如果您想通过电子邮件继续此对话,可以通过gmail.com上的jwitos与我联系。