【发布时间】:2014-01-29 12:18:42
【问题描述】:
我正在尝试使用 scikit-image 将图像从 RGB 转换为 XYZ。我发现根据输入类型存在一些差异:
from numpy import array,uint8
import skimage.color
rgb = array([array([[56,79,132],[255,100,70]])])
i1 = skimage.color.rgb2xyz(rgb)#rgb.dtype ->dtype('int32')
i2 = skimage.color.rgb2xyz(rgb.astype(uint8))
i3 = skimage.color.rgb2xyz(rgb.astype(float))
print i1[0,1,:]
print i2[0,1,:]
print i3[0,1,:]
这是输出:
[ 5.55183419e-09 4.73226247e-09 3.02426596e-09]
[ 0.46907236 0.3082294 0.09272133]
[ 240644.54537677 153080.21825017 39214.47581034]
差异的原因是函数img_to_float 在rgb2xyz 内部使用(请参阅this question)。
但我想知道:使用rgb2xyz 的正确方法是什么?
关于this question,有多种解决方案,具体取决于公式,但同样:rgb2xyz要求的正确图像类型是什么?似乎是unit8,但为什么呢?谢谢!
【问题讨论】:
-
有一个参考可以帮助理解这一点:scikit-image.org/docs/0.9.x/user_guide/data_types.html
标签: python image-processing numpy colors scikit-image