Numpy 使用scikit图像的数组转换:从整数到浮点

Numpy 使用scikit图像的数组转换:从整数到浮点,numpy,type-conversion,scikit-image,Numpy,Type Conversion,Scikit Image,在使用scikit图像将整数图像转换为浮点图像时,我遇到了一些问题 这是一个示例,图像为2像素图像: from numpy import array,uint8; import skimage; rgb = array([array([[0,0,0],[0,0,5]])]) i1 = skimage.img_as_float(rgb)#rgb.dtype ->dtype('int32') i2 = skimage.img_as_float(rgb.astype(uint8)) i3 =

在使用scikit图像将整数图像转换为浮点图像时,我遇到了一些问题

这是一个示例,图像为2像素图像:

from numpy import array,uint8;
import skimage;

rgb = array([array([[0,0,0],[0,0,5]])]) 
i1 = skimage.img_as_float(rgb)#rgb.dtype ->dtype('int32')
i2 = skimage.img_as_float(rgb.astype(uint8))
i3 = skimage.img_as_float(rgb.astype(float))

print i1[0,1,:]
print i2[0,1,:]
print i3[0,1,:]
我预料到:

[ 0.  0.  5.]
[ 0.  0.  5.]
[ 0.  0.  5.]
但我明白了:

[  2.32830644e-10   2.32830644e-10   2.56113708e-09]
[ 0.          0.          0.01960784]
[ 0.  0.  5.]
从float到int丢失精度是正常的,但是在这里,当使用img_作为_float从int传递到float时,我丢失了真正的信息。我在…上读代码时没有发现任何东西

为什么这是可能的

img_as_float不仅仅是类型转换,它将完整的无符号整数范围转换为[0,1],将完整的有符号整数范围转换为[-1,1]

i1,数据类型为int32,表示将[-2147483648,2147483647]转换为[-1,1] i2,数据类型为uint8,表示将[0,255]转换为[0,1] i3,因为数据类型已经是float,所以不执行任何操作。 img_as_float不仅仅是类型转换,它将完整的无符号整数范围转换为[0,1],将完整的有符号整数范围转换为[-1,1]

i1,数据类型为int32,表示将[-2147483648,2147483647]转换为[-1,1] i2,数据类型为uint8,表示将[0,255]转换为[0,1] i3,因为数据类型已经是float,所以不执行任何操作。