白平衡,字面意思即白色的平衡。白平衡是描述顯示器中紅、綠、藍三基色混合生成後白色(無彩色)準確度的一項指標。
如果用白平衡準確的彩色相機拍攝白紙或者灰板(不能過曝),生成的圖像不應該存在偏色,而應該是純粹的灰色。灰色RGB圖像的R、G、B通道圖是一模一樣的,如下:
白 色:255, 255, 255
中性灰:128, 128, 128
黑 色:0, 0, 0
彩色相機的白平衡設置很簡單,在相機端就可以一鍵設置。
那麼黑白多幀相機如何設置白平衡呢?有些人可能大喫一驚:黑白相機也有白平衡??
以黑白三幀相機爲例,它是設計了一種特殊的三色光源,依次曝光發出紅光、綠光、藍光,曝光的同時,黑白相機連續拍攝3次。
這三張“灰色”的黑白圖通過圖像算法合成,就可以合成一張RGB彩色圖像。如果黑白三幀相機用這種方式拍攝灰板,那麼最終合成的RGB“彩色圖像”看起來應該也是灰色的,而不應該存在偏色。
灰色的RGB圖(包括白色)是由紅、藍、綠三通道圖以等比例組成的,所以對灰色物體拍照時,紅光、綠光、藍光單獨拍攝得到的黑白圖的灰度值應該完全一樣,這就是黑白多幀相機白平衡的原理。
以紅通道圖爲例,紅通道圖的灰度值與什麼有關呢?
光圈大小、相機增益、伽馬值、曝光時間、光源亮度。
一般來說,拍攝三幀圖像時,光圈大小、相機增益、伽馬值都是相同的。從控制變量的角度來看,還需要鎖定一個參數——所以一般把光源控制器的紅光、綠光、藍光的光源亮度檔位都設置成相同的。
插一句:公司委託供應商定製的光源控制器,在光源亮度檔位相同時,紅光、綠光、藍光拍攝灰板生成的圖像的灰度值基本相同,這是個不錯的特性。
那麼黑白三幀相機設置白平衡的的關鍵就變成了:鎖定紅、綠、藍光的光源亮度時,如何計算出紅綠藍光對應的曝光時間,使得生成的三張黑白圖的灰度值相等。
假設三張黑白圖的灰度值=20時,紅、綠、藍光的曝光時間分別應該是多少呢?
假設三張黑白圖的灰度值=60時,紅、綠、藍光的曝光時間分別應該是多少呢?
假設三張黑白圖的灰度值=200時,紅、綠、藍光的曝光時間分別應該是多少呢?
不斷改變曝光時間,生成的黑白圖的灰度值也會不斷變化,假設它們之間存在線性關係:Y = KX + B,如下圖所示。(事實上,確實存在這種近似的線性關係)
圖中X軸是曝光時間,Y軸是圖像灰度值。紅綠藍三根線分別代表紅光、綠光、藍光的曝光時間與灰度值的關係。
具體操作:可以單獨用紅光先曝光20次,收集20個圖像的灰度值,每次曝光時間逐漸增加。然後用20個灰度結果值擬合出紅色這條線段。由於在太暗和太亮的情況下,點的直線擬合性不好,所以上圖中上下各有一條橫線,代表灰度值在上下線範圍以內的線段纔是有效的。
對藍光、綠光進行同樣的操作,這樣就有了紅綠藍三根線。
這三根線可以用方程表示:(Y = KX + B)
Y紅=K紅* X紅 + B紅 (1)
Y綠=K綠* X綠 + B綠 (2)
Y藍=K藍* X藍 + B藍 (3)
Y代表灰度值,X代表曝光時間,K和B是直線方程的係數。
在校正過程中,對着白紙或者灰板。紅綠藍光分別曝光20次,通過最小二乘法就能擬合出直線,得到係數K和B的值。
建議是使用色卡中的灰色塊,用白色塊很容易圖像就過曝了。(或者說更推薦使用灰板,而不是白紙)
做完校正後,六個係數K、B可以保存在一個文件中。以後軟件在設置曝光時間時就先讀入這個文件,只要設置一種光源的曝光時間,另兩種光源的曝光時間就能自動計算出來,且保證得到的圖像色彩逼真。(因爲當合成圖的白平衡準確時,在不同的曝光時間組合下,Y紅=Y綠=Y藍始終成立。)
值得注意的是,如果改變了光圈大小、相機增益、伽馬值、光源亮度中的任意一個,那麼白平衡設置就需要重新做。