簡體   English   中英

Scikit圖片中的RGB至XYZ

[英]RGB to XYZ in 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 (請參見此問題 )。

但是我想知道:使用rgb2xyz的正確方法是什么?

關於此問題 ,有多種解決方案,具體取決於公式,但同樣: rgb2xyz 要求的正確圖像類型是什么? 似乎是unit8 ,但是為什么呢? 謝謝!

以下代碼應具有自解釋性,但浮點值的范圍應在(0, 1) ,整數類型的完整范圍應映射到(0, 1) (對於無符號類型)或(-1, 1) (對於帶符號的類型):

>>> 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]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM