之前念研究所時,寫background subtraction程式時,發現一件事,影像的亮度與理論值不合,儘管我用點光源,在暗房拍攝,也無法控制到亮度值為線性變化,當時找一些background subtraction及color space conversion相關的paper,都沒找到解答,當時只覺得理論值與實際值可能有差異,因此就放著不管了,當接觸數位相機後才發現事實是當時並不知道所有8bit數位影像都做過Gamma curve轉換了。
關於Gamma curve,可以參考wiki:伽瑪校正。
看完只得到一個結論:"好簡短,也不過就是個轉換,有甚麼意義?"
我在當初學影像處理時就學過了,當時聽完老師說也完全不了解這有什麼意義,也因此一值忽略這東西在數位影像上的影響。
真的要了解意義,可以參考英文版wiki:Gamma_correction。
先不論這些部分,之前剛到公司問起同事及親友為何一定要做Gamma correction,得到的回答不外乎兩個:1. 因為人眼對不同亮度的敏感度非線性,所以必須要做Gamma correction。2. 因為電壓換算光的強度非線性,因此必須做Gamma correction。
對於第一個說法,我比較認同,但是總覺得奇怪,就算敏感度非線性,還是不能解釋為何要做Gamma correction,且拍照亮度是AE自動調整,但Gamma correction卻是對相機的Dynamic range進行Gamma correction,這明顯不是人眼的動態範圍。至於第二個說法,則太奇怪了,電壓換算光的強度非線性跟數位影像儲存有何關係,影像是數位的,電壓是類比的,類比進化到數位那麼久了,怎麼可能還是那樣的定義。
根據wiki中所寫,Gamma correction可以稱為Gamma encoding,更明確講出,因為人眼敏感範圍不同,如果全部儲存,會浪費太多bit在儲存不需要的資料,如此一來一切就合理了,Gamma correction主要目的就是為了減少資料量,硬把一個很廣的Dynamic range壓縮到0~256的8bit範圍。
關於人眼對光線的敏感度,基本原理都是以Hurter-Driffield curves為基礎發展的,這個研究我還沒有看進去,等看懂的時候再寫。
既然Gamma correction重點在於資料的壓縮,而且是有失真的壓縮,那重點就在於失去的部分是否真的看不出來,但遺憾的是答案是否定的,失去的部分是看得出來的,人眼對亮度的敏感度非線性,不過人眼類似相機,也有AE的機制,相機也許可以模擬人眼的AE機制,但不可能完全仿照,尤其是人眼的感光權重機制,更是相機難以模擬的,相機難以知道人眼目前注視的目標,因此只能用對焦區或是人工指定感光區來作加權,難以將整個景兼顧。
而人對拍照的預期往往超過一個snapshot所能表達的,在人眼的一瞬間,也無法兼顧整個景所有區域的亮度Dynamic range,但是人會轉頭會到處看,因此印象中會留下每一區的細節,而照片卻只有一瞬間,一瞬間很難保留到所有區域所有細節,假設感光元件的感應範圍夠廣,要忠實呈現人眼所見,必須不做Gamma correction全部值域都記錄下來,否則這個loss必然被看出來。
這些都是稍加研究就知道的問題,研究相機的工程師及研究人員,必須要解決問題,而非單純點出問題。因此這部分必須想辦法解決,對應的解決方案很多,錄Video是一種解法,但相對應的就是動態AE很重要。近年來很流行的HDR也是一種解法,但是靠的是人工智慧影像處理來分析每一個local需要的Dynamic Range,實際上每一象素也只有8bit,簡而言之只是騙眼睛而已。拍10~16 bit Raw也是一種解法,但難以解決的是在同一瞬間,其實Dynamic Range還是被sensor吐出的data限制住了,舉例來說12 bit raw,如果拍攝場景中有Lv2~Lv16的亮度,則可能得被迫選擇Lv4~Lv16,Lv4以下雖然以理論上來講是有拍攝到,但在數值上是沒差異的,也就是說等於沒拍到(但事實真的是如此嗎?有機會再就Noise reduction的觀點來看這件事)。
我覺得關於Gamma correction,還有一個很讓我感興趣的部分,就是人眼的敏感度與CRT的光電效應相仿,這是否意味著,人體也是根據電壓來鑑別亮度,而非能量強弱?
(寫Blog好累,原本想圖文並茂的整理一些東西,但弄了幾天,也只擠出短短這幾行內容。)
沒有留言:
張貼留言