2010-02-10 69 views
7

計算機屏幕上像素的亮度通常不與像素的數字RGB三元組值線性相關。早期CRT的非線性響應需要補償非線性編碼,而今天我們繼續使用這種編碼。抗混疊和伽瑪補償

通常我們在電腦屏幕上生成圖像並在那裏使用它們,所以它一切正常。但是當我們使用antialias時,稱爲gamma —的非線性—意味着我們不能僅將0.5的alpha值添加到50%覆蓋像素,並期望它看起來正確。 0.5的α值只有0.5^2.2 = 22%,明亮度等於1.0的alpha值,典型的gamma值爲2.2。

是否有任何廣泛建立的抗鋸齒伽馬補償最佳實踐?你有每天使用的寵物方法嗎?有沒有人用不同的技術看到任何有關圖形輸出質量的結果和人類感知的研究?我曾經想過做標準的X ^(1/2.2)補償,但是這在計算上是相當激烈的。不過,也許我可以通過一個256條目查找表來加快速度。

回答

1

查找表經常用於這樣的工作。他們小而快。

但是無論查找還是某個公式,如果最終結果是一個圖像文件,並且格式允許,最好在文件中保存一個顏色配置文件或至少是gamma值以供以後查看,而不是嘗試自己調整RGB值。

原因:對於典型的字節值R,G,B通道,每個像素的每個通道中有256個唯一值。這幾乎足以讓人眼看起來很好(我希望「字節」已被定義爲九位!)除了瑣碎的值反轉之外,任何類型的數學都會針對其中一些值進行多對一映射。對於R,G或B的每個像素,輸出將不會有256個值可供選擇,但會少得多。這可能導致輪廓,鋸齒,色彩噪音和其他不良情況。拋開精度問題,如果需要任何一種體面的質量,所有的堆肥,混合,混合,色彩校正,假鏡頭閃光添加,色度鍵控和其他任何應該在線性RGB空間中完成,其中值R,G和B與物理光強度成比例。圖像數學模擬物理光數學。但是,如果最終速度至關重要,那麼有辦法作弊。

+0

九位字節?你喜歡八度嗎? :-) – 2010-03-31 23:27:47

2

Jim Blinns - 「骯髒像素」一書通過使用16位數學加查找表來精確地回溯和轉發線性色彩空間,概述了一種快速且良好的合成計算。這個人在美國國家航空航天局的可視化工作,他知道他的東西。

2

我想回答,但主要是針對現在參考,實際的問題:

首先,有建議從可以適用於編程ITU(http://www.itu.int/rec/T-REC-H.272-200701-I/en)(但你必須知道你的東東)。

在吉姆布林的「符號,表示法,符號」中,第9章有一個非常詳細的數學和感知錯誤分析,儘管他只涉及合成(許多其他圖形任務也受到影響)。

他建立的符號也可以用來派生出一種處理伽瑪的方法,或者檢查給定的方法是否確實是正確的。非常方便,我的寵物方法(主要是因爲我獨立發現它,但後來發現他的書)。

0

生成圖像時,通常在線性色彩空間(如線性RGB或CIE色彩空間之一)中工作,然後在最後轉換爲非線性RGB空間。這種轉換可以通過硬件或通過查找表或者通過棘手的數學來加速。 (請參閱其他答案的參考資料。)

當執行alpha混合(例如,將此圖標渲染到此背景上)時,通常會忽略這種精度以支持速度。結果直接在非線性RGB空間中進行計算,並以alpha作爲參數。這不是「正確的」,但在大多數情況下它已經足夠好了。尤其適用於桌面上的圖標等。

如果您嘗試進行更正確的混合,則將其視爲原始渲染。在線性空間中工作(可能需要初始轉換),然後在最後轉換爲非線性顯示空間。

現在很多圖形都使用sRGB作爲非線性顯示色彩空間。如果我沒有記錯,sRGB與2.2的伽瑪非常相似,但是對低端值進行了調整。