4.8. 感測器上校正

像素單元的原始輸出尚未可供使用。在資料離開感測器之前,會對其套用一些校正——部分在晶片的矽電路中進行,部分在對晶片進行程式設定的驅動程式碼中進行——以處理感測器在過程中引入的各種瑕疵。它們會在每一影格上以固定順序執行:先是列 固定圖樣雜訊(FPN)修整,接著是黑階扣除,然後是缺陷像素校正,最後是鏡頭陰影校正。了解每一項的作用很重要,因為到達使用者程式碼的影像已經全部經過了這些處理。

4.8.1. 列 FPN 校正

感測器的每一行都有自己的放大器與行 ADC,而它們之間微小的製造差異,意味著每一行讀出的結果都與相鄰行略有不同。若不加以校正,這種 固定圖樣 就會在輸出中呈現為淡淡的垂直條紋——這些條紋會在每一影格中維持不變,因為它們來自矽電路本身,而非來自場景。感測器會在出廠時測量每一行的偏移與增益修整值,將其儲存在校正用 ROM 中,並在每次讀出時、在任何後續校正執行之前先行套用。先做這項處理,可讓後續流程假設每一行的行為都相同,包括黑階校正接下來所使用的暗參考像素。

4.8.2. 黑階校正

ADC 的零值——本應對應到空光二極體的數位計數值——並非完全穩定。它會隨溫度、隨供應電壓的變化而漂移,並在像素與像素之間略有差異。若不加以校正,完全黑暗的影格讀出的值並不會是零;每個像素都會帶有一個小的正向 暗偏移

標準的修正方式,是在感測器邊緣納入一些以金屬實際遮蔽、使光線完全照不到的列或行。它們的數位計數值就提供了當前運作條件下真正的暗參考。感測器每一影格都會讀取這些被遮蔽的像素,按列或行加以平均,並從每一個其他像素中扣除該平均值。如此一來,無論溫度或供應電壓如何漂移,未受光照的光二極體所對應的亮像素讀出的計數值都會是零。

4.8.3. 缺陷像素校正

任何感測器中都有一小部分像素是 有缺陷的——無論有多少光線照到它們,它們都讀出固定值(卡在高位或卡在低位)。有些缺陷來自製造差異,更多缺陷則在感測器的使用壽命中緩慢累積(長時間運作期間遭宇宙射線擊中通常是元兇)。

現代感測器會以一個小型空間濾波器即時處理這個問題。每一影格中,每個像素都會與同色的相鄰像素比較;任何偏離局部中位數夠遠、不合常理的像素,都會被一個由那些相鄰像素推算出的值取代。這個濾波器同時能捕捉出廠缺陷與後來出現的缺陷,而無需逐感測器校正的壞點圖,缺陷在輸出中也看不見。

4.8.4. 鏡頭陰影校正

cos⁴ 衰減 加上來自鏡頭外殼的機械式暗角,使每一個未校正的影格都有明顯的角落變暗。感測器上的 鏡頭陰影校正(LSC)硬體會以一個取決於像素在影格中位置的增益來乘上每個像素,藉此加以補償——中央為 1.0,朝角落平滑上升,以跟隨所量測衰減曲線的倒數。

感測器提供乘法運算硬體,但增益圖本身則是 MCU 的責任。驅動程式會在啟動時將該圖寫入感測器的 LSC 暫存器,其來源可以是驅動程式儲存的校正,也可以是針對平坦參考目標的新量測。有些感測器會把該圖壓縮成一小組多項式係數,以便晶片上的暫存器能夠容納。

LSC 取決於鏡頭。更換鏡頭會使衰減曲線改變,因此為某個鏡頭校正的 LSC 圖並不會吻合另一個鏡頭——套用錯誤的圖看起來會是角落變暗(校正不足)或角落出現明亮斑塊(校正過度)。