如何将逻辑卷表单numpy传递给itk以保存到nrrd文件?

2024-09-30 12:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用itknumpy卷保存为NRRD文件格式,以便以后与Matlab一起使用,如果可能的话,我希望将文件导出为Booleanlogical数据类型

该操作对于int16数据类型非常有效(但结果文件很大):

itkVol = itk.GetImageFromArray(npVol.astype(np.int16))
imageType = itk.Image[itk.SS, 3]

writerType = itk.ImageFileWriter[imageType]
writer = writerType.New()
writer.SetFileName('/home/user/Desktop/test.nrrd')
writer.SetInput(itkVol)
writer.Update()

原始类型的npVolnumpy3D数组)是float64,我的问题是我不知道如何保存它是logicalbool数据类型来保存内存(我必须导出其中的许多文件,它们是大文件

我尝试将类型强制转换为bool类型,并将其传递给itk中的ImageFileWriter(),但出现了一个错误:

代码如下:

itkVol = itk.GetImageFromArray(npVol.astype(np.bool))
imageType = itk.Image[itk.B, 3]

下面是错误:

TemplateTypeError: itk.ImageFileWriter is not wrapped for input type `itk.Image[itk.B,3]`.

关于ImageFileWriter()不支持这种类型的错误消息非常简单,它给出了支持的输入类型的列表(其中没有一个是logical或类型bool):

Supported input types:

itk.Image[itk.UC,2]
itk.Image[itk.UC,3]
itk.Image[itk.RGBPixel[itk.UC],2]
itk.Image[itk.RGBPixel[itk.UC],3]
itk.Image[itk.RGBAPixel[itk.UC],2]
itk.Image[itk.RGBAPixel[itk.UC],3]
itk.Image[itk.Vector[itk.F,2],2]
itk.Image[itk.Vector[itk.F,2],3]
itk.Image[itk.Vector[itk.F,3],2]
itk.Image[itk.Vector[itk.F,3],3]
itk.Image[itk.Vector[itk.F,4],2]
itk.Image[itk.Vector[itk.F,4],3]
itk.Image[itk.CovariantVector[itk.F,2],2]
itk.Image[itk.CovariantVector[itk.F,2],3]
itk.Image[itk.CovariantVector[itk.F,3],2]
itk.Image[itk.CovariantVector[itk.F,3],3]
itk.Image[itk.CovariantVector[itk.F,4],2]
itk.Image[itk.CovariantVector[itk.F,4],3]
itk.Image[itk.SS,2]
itk.Image[itk.SS,3]
itk.Image[itk.US,2]
itk.Image[itk.US,3]
itk.Image[itk.F,2]
itk.Image[itk.F,3]
itk.Image[itk.complex[itk.F],2]
itk.Image[itk.complex[itk.F],3]
itk.VectorImage[itk.SS,2]
itk.VectorImage[itk.UC,2]
itk.VectorImage[itk.US,2]
itk.VectorImage[itk.F,2]
itk.VectorImage[itk.SS,3]
itk.VectorImage[itk.UC,3]
itk.VectorImage[itk.US,3]
itk.VectorImage[itk.F,3]

我该怎么做?

附言:我对python和itk都是新手


Tags: 文件image类型sswriteritkboolus
1条回答
网友
1楼 · 发布于 2024-09-30 12:33:00

二进制掩码经常需要bool的映像,但我看到的所有实际解决方案都使用整数类型。0=false,nonzero=true,通常为8位无符号int。NumPy的名称可能是uint8,ITK的名称是UC(unsigned char)。绕过这个很难

但是可以很容易地完成的是通过writer.SetUseCompression(True)writer.UseCompressionOn()压缩输出文件。如果您的“true”值是一致的(例如,始终为1或始终为255),则这些文件应该能够很好地压缩。如果您的图像是一个二进制标签映射,您可以期望压缩到原始大小的1%-2%

相关问题 更多 >

    热门问题