使用scikit-image进行数组转换:从整数到浮点数

时间:2014-01-29 11:09:00

标签: numpy type-conversion scikit-image

使用scikit-image将整数图像转换为浮动图像时,我遇到了一些问题。

这是一个例子(图像是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.]

floatint的丢失精度是正常的,但是在使用intfloat传递到img_as_float时,我丢失了真实信息。在GitHub ...

上阅读代码时,我没有找到任何内容

为什么这可能?

1 个答案:

答案 0 :(得分:2)

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

  • i1,dtype为int32,表示将[-2147483648,2147483647]转换为[-1,1]
  • i2,dtype为uint8,表示将[0,255]转换为[0,1]
  • i3,因为dtype已经浮动,什么都不做。