[英]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.