我們經常比較頭疼的是,圖像的局部產生色偏,或者是某一個色調/亮度范圍產生色偏。
比如說第六題所提到的:只有藍天的顏色發生了明顯的偏差。
造成局部偏差的原因有很多,比較常見的原因有兩個:Lens shading和linearization。
因為相較於black level或者awb這些global的操作造成整體性的變化,shading correction 和linearization往往是只造成局部區域和某個intensity范圍的偏差。這些問題往往更讓難解決。
這一篇就重點說說lens shading:
Lens shading分為兩個部分,luma shading correction,colour shading correction。
Chroma shading 如下圖,RGB plane 沒有重合。
correction之后:
可以看出RGB plane 重合了。
Luma shading就是所謂的vignetting,鏡頭的通光量從中心到邊角減小,造成sensor的亮度響應從中心到邊角的變小,圖像看起來就是這樣,中心亮,四周逐漸變暗。
3D視圖:
這種信號強度的衰減呈現非常明顯的中心對稱特點,於是人們提出第一種shading 校正方法:
radial shading correct。
這種方法實現簡單,針對shading對稱性比較好的情況很有效,但是如果對於鏡頭裝得傾斜了,或者存在局部不良的情況就不好用了。
如下圖
很明顯的衰減不對稱,這樣方法一就不好用了。於是有了方法2:
拍一張黑色的照片,再拍一張白色的照片,然后用如下公式:
由於響應衰減曲線不是線性的,而是近似cos4的衰減曲線,所以方法2需要對衰減曲線做一定的修正。但這種方法對於那種鏡頭衰減不能用一個簡單函數表示的情況就不靈了。
於是后來就有了方法3:mesh shading correction。
mesh按照英文願意就是網眼,漁網的那種格子。拍一張均勻亮度的圖像,把圖像分成n x m個格子,
每個格子的四個角都有一個校正系數,把這個nxm個格子的校正系數存起來,在運行期,根據每個像素的坐標,就知道這個像素落在哪個格子里,在格子內部,用cos4或者logN來模擬衰減曲線,就可以計算出每個像素的校正值。
現在大部分廠商都是采用的這種方法,它的缺點是需要存儲比較多的校准數據,而且如果校准不准確的話,效果也就不會好。於是后來就有了方法4:automatic lens
shading correction。 也有人叫adaptive lens shading correction。反正就是不用校准,就能做lens shading correction。
看起來唯一的玄機就在這個所謂的LowPass filter里,有很多論文設計不同的filter,唯一的目的就是把數據分成受shading 影響的和不受shading影響的,不受shading影響的數據就是校正的target。也有專門的論文提供各種比較結果。現在已經有不少公司提供這種不用校准的lens shading correction方案,效果確實非常不錯。