python读取浮点图像

我的目标是把nii格式的图像读取出来进行图像处理,过程中发现双边滤波结果和原图完全一样,找了一天bug都感觉没头绪。。。

结果是图像数据格式的问题,cv2.imread只能读取为无符号8位整数,如果是较为细微的图像差别会直接被取整抹掉,所以必须使用读写浮点图像的手段。

simpleitk提供了两种读写图像的方式,之前一直使用的是以下这种(用于读写nii文件): 

raw_image = sitk.ReadImage(inputImageFileName)
raw_mat = np.array(sitk.GetArrayFromImage(raw_image))[0]

这种读写方式结果也是无符号8位整数,我上官网查询了一下说明文档,发现Simpleitk还支持另一种读写方式:

import SimpleITK as sitk

reader = sitk.ImageFileReader()
reader.SetImageIO("PNGImageIO")
reader.SetFileName(inputImageFileName)
image = reader.Execute()

writer = sitk.ImageFileWriter()
writer.SetFileName(outputImageFileName)
writer.Execute(image)

这种读写方式可以基于以下方式设定被读取的数据类型:

# 需要提前定义对象reader,过程如上
reader.SetOutputPixelType(sitk.sitkFloat64)

如果为了保存处理过程图像,可以直接使用numpy.save()保存为npy格式

Reading and Writing for Images and Transforms — SimpleITK 2.0rc2 documentationicon-default.png?t=N7T8https://simpleitk.readthedocs.io/en/master/IO.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值