我正在尝试将一些matlab代码转换为python,im2double
函数给我带来了麻烦。它采用图像并使用双精度而不是整数返回带有像素的矩阵。
目前我正在用PIL操纵我的图像。它有一个convert
方法,可以将'F'
作为参数,但它只是将整数值255
转换为255.0
。据我所知,没用。
我遇到的问题是我正在进行一些图像处理,然后必须保存它们。我可以将我的值标准化,使它们落入0-255范围,但是我失去了一些精确度。它足够小,通常不重要,但在这里,确实如此。
我尝试使用'tiff'文件格式,但效果不佳。虽然我可以写/读它,我得到的结果不是正确的,我只能将像素转换为255,这导致精度损失,正如我之前所说。我还试过这个'SPIDER'
文件格式的东西,我之前在谷歌上找到PIL支持,但我无法在编辑器上打开图像来检查它是如何做的。
答案 0 :(得分:1)
在Python中正确执行此操作的方法是使用Numpy。您可以通过PIL into numpy数组读取图像。此时,通过numpy / scipy,您可以使用各种类似Matlab的矩阵运算。更改数组的精度只是通过numpy切换数组数据类型的问题。最近的releases PIL包括来自Travis Oliphant的补丁,允许您在没有额外hackery的情况下执行此操作。
通过使用浮点TIFF而不会损失精度,可以将数据保存为更常见的图像格式。我使用GDAL library与多个图像格式编写器/阅读器连接。如果你想要无损压缩,TIFF也可以使用zlib进行压缩。