Scikit-Image中的RGB到XYZ

时间:2014-01-29 12:18:43

标签: python image-processing numpy colors scikit-image

我正在尝试使用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,但为什么呢?谢谢!

1 个答案:

答案 0 :(得分:0)

以下代码应该是自解释的,但浮点值的范围应为(0, 1),整数类型的全范围映射为(0, 1)(对于无符号类型)或{{1} }(对于签名类型):

(-1, 1)