2

使用 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.]

从 to 丢失精度是正常的floatint但是在这里我在从 to 传递intfloatusing时丢失了真实信息img_as_float我在GitHub 上阅读代码时没有发现任何东西...

为什么这可能?

4

1 回答 1

4

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

  • i1,dtype 为 int32,表示将 [-2147483648, 2147483647] 转换为 [-1, 1]
  • i2,dtype为uint8,表示将[0, 255]转换为[0, 1]
  • i3,因为 dtype 已经是浮动的,所以什么也不做。
于 2014-01-29T11:24:25.110 回答