Python: 浮点图像 / 替代matlab的im2double?

3 投票
1 回答
3440 浏览
提问于 2025-04-16 14:03

我正在把一些Matlab代码转换成Python,但遇到了im2double这个函数的问题。这个函数的作用是把一张图片转换成一个矩阵,矩阵里的像素值用双精度浮点数表示,而不是整数。

目前我在用PIL处理我的图片。它有一个convert方法,可以接受'F'作为参数,但它做的只是把整数值255转换成255.0。对我来说,这没什么用。

我遇到的问题是,我在处理图片后需要保存它们。我可以把我的值归一化到0到255的范围,但这样会损失一些精度。虽然这个损失通常不大,但在这里却很重要。

我尝试使用'tiff'文件格式,但效果不太好。虽然我可以读写这个格式,但得到的结果并不正确,而我目前只能通过把像素值转换成255来得到正确的结果,这样又会损失精度。之前我还试过在网上找到的一个'SPIDER'文件格式,PIL是支持的,但我无法在编辑器中打开这个图片来检查效果。

1 个回答

1

在Python中,正确的方法是使用Numpy库。你可以通过PIL把图片读入到numpy数组中。这样一来,你就可以使用很多类似Matlab的矩阵操作了,这些操作都是通过numpy和scipy来实现的。要改变数组的精度,只需通过numpy更改数组的数据类型就可以了。最近的PIL版本包含了Travis Oliphant的补丁,这样你就可以轻松做到这一点,而不需要额外的复杂操作。

如果你想把数据保存为更常见的可读图像格式,可以使用浮点TIFF格式,这样不会损失精度。我使用GDAL库来处理多种图像格式的读写。如果你需要无损压缩,TIFF格式也可以使用zlib进行压缩。

撰写回答