首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scikit-Image中的RGB到XYZ

Scikit-Image中的RGB到XYZ
EN

Stack Overflow用户
提问于 2014-01-29 12:18:42
回答 1查看 3.6K关注 0票数 2

我正在尝试使用scikit-image将图像从RGB转换为XYZ。我发现根据输入类型有一些不同:

代码语言:javascript
复制
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,:]

这是输出:

代码语言:javascript
复制
[  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,但为什么呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 14:30:57

下面的代码应该是不言自明的,但是浮点值应该在(0, 1)中有一个范围,整数类型的全部范围映射到(0, 1) (对于无符号类型)或(-1, 1) (对于有符号类型):

代码语言:javascript
复制
>>> from numpy import int32
>>> skimage.color.rgb2xyz((rgb / 255 * (2**31 - 1)).astype(int32))
array([[[ 0.08590003,  0.08097913,  0.2293394 ],
        [ 0.46907236,  0.3082294 ,  0.09272133]]])
>>> skimage.color.rgb2xyz(rgb.astype(uint8))
array([[[ 0.08590003,  0.08097913,  0.2293394 ],
        [ 0.46907236,  0.3082294 ,  0.09272133]]])
>>> skimage.color.rgb2xyz(rgb.astype(float) / 255)
array([[[ 0.08590003,  0.08097913,  0.2293394 ],
        [ 0.46907236,  0.3082294 ,  0.09272133]]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21430938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档