2011-05-31 61 views
5

我正在爲我的pony detector寫影子移除。我已經converted a PNG image from sRGB to CIE XYZ後,我取出亮度as per instructions


sRGB-> CIEXYZ->放棄亮度的結果是否可以轉換回sRGB?

當我嘗試將圖像轉換回sRGB的顯示,我得到落在sRGB gamut外RGB值(我得到的值大於255)。 這是正常的,還是應該繼續尋找錯誤?注意:轉換爲XYZ並返回時不會產生毛刺。

插圖(左上:original,左下:字節值wraparaund用於紅色和藍色的色調):

爲了完整性:右上:色比,右下:轉換爲HSV和均衡值。

+0

+1對於小馬探測器 – 2011-05-31 17:56:14

回答

1

最終轉變不會刪除的亮度,它創建了兩個新的價值觀,Xÿ共同定義的色相而Y包含亮度。這是你的instructions link關鍵段落(之前的公式你鏈接):

的CIE XYZ色彩空間是 故意設計成在Y 參數是 亮度或亮度的顏色的量度。 的顏色的色度爲再由兩個派生 參數x和y,指定 其中兩個是函數所有三個三刺激值X的 三個 歸一化值的,Y, 和Z:

這意味着如果你有一個具有單一顏色表面的圖像,但是表面的一部分在陰影中,那麼在xyY空間中,x和y值應該相同(或非常相似)表面上的所有像素,無論它們是否在陰影中。

您從最終轉換中獲得的xyz值不能直接轉換回RGB,就好像它們是XYZ值(注意大小寫)。所以要回答你的實際問題:如果你正在使用xyz值,就好像它們是XYZ值那麼你的代碼中沒有錯誤。使用您鏈接的公式不能使用從RGB轉換爲RGB。

現在,如果你想真正從你做什麼,整個圖像去除陰影是:

  • 規模的RGB值是浮點valies在[0-1]範圍由分割每個值255(假設24位RGB)。轉換爲浮點有助於提高精度!
  • 將圖像轉換爲xyY
  • 將所有的Y值替換爲一個值,比如0.5,但實驗。
  • 逆向變換,從xyY表到XYZ:

X from xyY

Z from xyY

  • 然後到RGB:

XYZ to RGB

  • 然後在[0..255]間隔重新調整RGB值。

這應該會給你一個非常無聊,但沒有影子的原始圖像版本。當然,如果您的目標是檢測單個顏色區域,您也可以對xyY圖像中的xy值執行此操作,並使用您在原始區域檢測到的區域。

+0

我實現了你的建議,但是我在xyY-> XYZ步驟中對斷言(X,Y,Z∈[0; 1])失敗,看起來似乎是Y.所有的值都是 – 2011-06-04 18:05:36

+0

在RGB - > XYZ步驟之後的所有XYZ值∈[0; 1]? – 2011-06-05 10:53:13

+0

是的。我檢查每個轉換的輸入和輸出。 – 2011-06-05 11:41:13

相關問題