Python 如何从数组中正确提取PNG格式的带标签掩码?
我有以下的Python 如何从数组中正确提取PNG格式的带标签掩码?,python,image-processing,mask,scikit-image,nifti,Python,Image Processing,Mask,Scikit Image,Nifti,我有以下的Nifti格式,其中包含掩码,我编写了以下代码来提取内部图像作为PNG图像,问题是: 这是一个标记为[0.1.2.3.]的多类掩码,在将掩码保存为PNG后,掩码图像中的值分布在[0-->255]范围内,它们不再像以前那样只是4个标签 请问我如何解决这个问题 唯一重要的是在内部有4个独特的标签 提前谢谢 import nibabel as nib import os import glob import numpy as np from skimage.io import imread,
Nifti
格式,其中包含掩码,我编写了以下代码来提取内部图像作为PNG
图像,问题是:
这是一个标记为[0.1.2.3.]的多类掩码,在将掩码保存为PNG
后,掩码图像中的值分布在[0-->255]范围内,它们不再像以前那样只是4个标签
请问我如何解决这个问题
唯一重要的是在内部有4个独特的标签
提前谢谢
import nibabel as nib
import os
import glob
import numpy as np
from skimage.io import imread, imsave
#-------------------------------------------
# Multi Class Masks
path = 'Masks'
Dataset = glob.glob( os.path.join(path, '*.gz') )
ctr = 0
for image in Dataset:
# Load masks voxel
images = nib.load(image).get_fdata()
print(np.unique(images))
# Save it as PNG
ctr+=1
if(not os.path.exists('Dataset/masks/Case_'+str(ctr))):
os.mkdir('Dataset/masks/Case_'+str(ctr))
for _id in range(images.shape[2]):
imsave(os.path.join('Dataset/masks','Case_'+
str(ctr),str(ctr)+'_'+str(_id+1)+'.png'),
resize(images[:,:,_id],(256,256)))
#-------------------------------------------
imag = imread(os.path.join('Dataset/masks','Case_'+
str(ctr),str(ctr)+'_'+str(_id+1)+'.png'))
print(np.unique(imag))
我只是想警告你,我对Nifti数据一无所知,在这里可能完全错了。。。但是,我认为问题在于当你这样做的时候:
fdata = nib.load(image).get_fdata()
实际上,您会得到一个float64
数据类型:
print(fdata.dtype)
PNG格式只处理uint8
或uint16
,而不处理float64
我假设,由于数据的形状是(63063063045),这意味着有45个部分,每个是630x630,但我可能又错了。因此,我采取了一个相当中心的切片,在这一点上,中间可能会有一些东西,并且我强烈地把它转换成<代码> uTI8强>,并将其保存为PNG。p>
imsave('result.png', fdata[...,22].astype(np.uint8))
PNG是低对比度的,因为在0..255的刻度上所有值都小于4,所以我使用ImageMagick增加对比度,以便您可以看到它:
magick result.png -auto-level visible.png
您可以使用终端中的ImageMagick获取直方图并查看4个类别标签中每个类别标签的出现频率:
magick result.png -format "%c" histogram:info
样本输出
335942: (0,0,0) #000000 gray(0) <--- there are 335,942 pixels=0
26367: (1,1,1) #010101 gray(1) <--- there are 26,367 pixels=1
29419: (2,2,2) #020202 gray(2)
5172: (3,3,3) #030303 gray(3)
335942:(0,0,0)#000000格雷(0)