2011-03-15 54 views
20

我原來的問題灰度爲什麼如此工作?

,我讀了一個RGB像素轉換成灰度RGB,應該使用

r_new = g_new = b_new = r_old * 0.3 + g_old * 0.59 + b_old * 0.11 

我也閱讀和理解,即g具有更高的權重,因爲人眼對綠色更敏感。實現這一點,我看到結果與我在像Gimp這樣的圖像編輯器中將圖像設置爲「灰度」相同。在我讀到這之前,我想到要將像素轉換爲灰度,可以將其轉換爲HSL或HSV,然後將飽和度設置爲零(因此將所有顏色都去除)。但是,當我這樣做時,我得到了一個完全不同的圖像輸出,儘管它也缺乏顏色。

s = 0與我讀的「正確」方式有什麼不同?爲什麼它不正確?基於答案等科研

看來,其亮度係數使用

正在進行的調查結果是一些爭論的主題。各種組合和到灰度算法具有不同的結果。以下是在區域中使用類似電視標準一些預設:通過ITU-R BT.601(?NTSC)定義的0.299r + 0.587g + 0.114b

  • 係數由ITU-R BT.709定義

    • 係數(較新)是相等的三分之二,(1/3)(rgb)0.2126r + 0.7152g + 0.0722b
    • 係數,相當於s = 0

    scientific article細節上的各種灰度的技術以及它們用於各種圖像效果,加上主觀監測網119人的眼睛。但是,當將圖像轉換爲灰度時,爲了達到「最佳」藝術效果,人們幾乎肯定不會使用這些預定義的係數,而是調整每個通道對特定圖像產生最佳輸出的貢獻。

  • +3

    +1有趣的問題 – alex 2011-03-15 12:36:27

    +0

    這不是一個真正的編程問題,但我不確定它屬於哪個站點...這實際上是一個藝術或科學問題。 – derobert 2011-03-15 16:27:18

    +3

    這可能是真的,但我在編寫一個灰度轉換函數的上下文中提出這個問題。 – 2011-03-16 01:02:25

    回答

    10

    雖然這些轉換系數存在,但沒有任何東西會綁定您使用它們。只要每個像素的總強度不變,來自每個通道的貢獻可以是任何值,範圍從0到100%。

    攝影師將圖像轉換爲灰度使用信道混頻器來調節每個信道(RGB或CMYK)的水平。在你的圖像中,有很多紅色和綠色,所以它可能是可取的(取決於你的意圖),使這些通道在灰度強度上比藍色更高。

    這是區分圖像的「科學」轉換與樂隊「藝術」組合的區別。

    另外的考慮是在每個頻帶的值的動態範圍,並試圖將它們保存灰度圖像英寸例如,增強陰影和/或高光可能需要增加藍帶的貢獻。

    3

    貌似這些係數來自舊CRT技術並不能很好地適應當今的顯示器,從Color FAQ

    係數0.299,0.587和 0.114爲具有被 熒光粉監視器正確計算照度當代在1953年引進 NTSC電視的他們是 仍然適合用於計算視頻 亮度要在部分下面討論 11.然而,這些係數不準確地計算亮度爲 contem porary監視器。

    無法找到合適的轉換系數,但是。

    RGB to monochrome conversion

    4

    查看此主題的有趣的文章....「因爲人的眼睛不能用顏色線性檢測亮度」。

    http://www.scantips.com/lumin.html

    +0

    好的,要專門回答問題,這是錯誤的,因爲:s = 0版本中灰度之間的亮度與原始圖像中顏色之間的亮度不匹配。 這明顯地通過莖(雄蕊?如果我記得3年級)在花的中心顯現出來,在s = 0版本中沒有區別。 – JNadal 2011-03-15 13:04:11

    +0

    下面是您給定係數的原始推導:http://www.cis.rit.edu/mcsl/research/broadbent/CIE1931_RGB.pdf – JNadal 2011-03-15 13:34:26

    +0

    另一篇文章探索s = 0方法,試圖製作完全清洗的圖像轉換爲灰度時出來:http://www.realtimerendering.com/blog/constant-luma-palette/ – JNadal 2011-03-15 13:40:21

    3

    使用在HSL/HSV s = 0並轉換到RGB導致R = G = B,所以是相同的操作的方式r_old * 1/3 + g_old * 1/3 + b_old * 1/3

    要理解爲什麼,看看在Wikipedia page描述轉換HSV-> RGB。飽和度s將爲0,因此CX也將爲0。您將與R_1,G_1,B_1(0,0,0),然後添加到m導致(m,m,m) = (V,V,V)最終RGB值結束。 HSL同樣,結果將爲(m,m,m) =(L,L,L)。

    編輯:好的,只是想通了上述不是完整的答案,雖然這是一個很好的起點。 RGB值將全部相同,無論是LV,但它仍然取決於如何LV最初計算,再次看到Wikipedia。似乎你用於轉換的程序/公式使用了1/3 * R + 1/3 * G + 1/3 * B解決方案或其他兩個(hexcone/bi-hexcone)之一。

    所以畢竟用的HSL/HSV只是意味着你將不得不決定提前和轉換使用的公式爲RGB灰度值後只是孤立的最後一個組件。