請先自帶全志 bsp sdk 開發基礎 請閱讀 Sipeed 內部培訓 V831/V833 的 SDK 的 kernel & package 的開發方法 https://www.cnblogs.com/juwan/p/15226245.html
本文背景:這是我在調試好全志 V831 / V833 系列的時候,因為7寸屏的商業產品對畫面有一定的要求導致了需要進一步校准鏡頭參數時學習的產物,其中包括去全志原廠學習時的一些參考資料,有一些無法直接公開,所以引用的圖多取自網絡,所謂的 ISP 調試就是在原始底層的驅動開發基礎上進行芯片上的圖像后期處理,本文目的只是告訴你應該做什么和為什么這么做。
前置技能:了解過數碼攝像頭相關技術的應用與開發的才可以看下去,零基礎的就不用看了。
參考資料:http://www.voycn.com/article/5fenzhonglijiexiangjiisptuxiangxinhaochuli
參考資料:https://www.cnblogs.com/wujianming-110117/p/12925120.html
直接開始進入正題吧。
2022-01-18 更新了 M2DOCK 專用的 ISP 實時調試工具 TigerISP-20211225.7z hawkviewtools 4.1.1 與下文相互照應 https://api.dl.sipeed.com/shareURL/MaixII/MaixII-Dock/tools ,可以拿硬件來實機體驗一下效果,注意新版改名叫 TigerISP ,我寫這篇文章的時候用的是 hawkviewtools 2022年2月22日的時候我測試了一下新版的 so 做不了了,它需要驅動實現讀取 BGGR 圖,而過去是直接讀 NV21 手工轉換再 cal ,現在不行了,所以基礎標定的時候可以用舊版,調試的時候用新版更穩定一下。
攝像頭的一些歷史淵源
關於 ISP 調試這個內容,最好追溯到攝像頭的起源,這樣自己能夠對事物整體的架構有一定的認知,而非片面之談,似懂非懂,當然現實遠比理論歷史復雜。
攝像頭可以從最初的小孔成像、透鏡成像等原理與膠卷膠片打印開始,到后來進入到數碼相機的 CMOS 感光元件上,從這以后我們就可以開始進入到軟件調試的部分,注意對於軟件調試的開發人員可以不用去了解硬件的實現細節或鏡頭的成像原理或制作方法,但它們會帶來什么樣的結果和效果還是要略知一二的。
先從成像的源頭開始說起,90后的末期應該都見過柯達膠卷的黑白相片,膠卷又名底片,菲林,是一種成像器材。現今廣泛應用的膠卷是將鹵化銀塗抹在聚乙酸酯片基上,此種底片為軟性,卷成整卷方便使用。當有光線照射到鹵化銀上時,鹵化銀轉變為黑色的銀,經顯影工藝后固定於片基,成為我們常見到黑白負片。(來自百度百科)
這種是通過化學的方法來成像,意味着相片在這個階段的時候,只有黑白兩色,如果用 CMOS/CCD 圖像傳感器的輸入來表達就形如感光元件在單位像素下產生的電壓高低來表示接收到的光線強度。
那么彩色相片是怎么來的呢?早期的彩色膠卷可以通過不同層次的三原色感光物質來獲取輸入光線的顏色,而數碼相機通常情況下無法繼續沿用化學的方法來分離不同顏色(波長)的感光物質,它只有電壓的高低表示光線的強弱。
所以時代到這個時候,膠片巨頭伊斯曼柯達的布萊斯拜耳先生提出了一種 Bayer 排列,在每一個微透鏡下都加入了一片色彩濾波器,只允許特定范圍波長的光通過,即是下圖的 RGGB 從而讓彩色圖片進入到數碼相機的時代。

這些資料你都可以在各大網站中獲取得知,這里給一個參考和引用,目前理解到這里就可以了。
在光圈、快門、感光度(ISO)共同作用后的曝光是什么?
一些基本知識可以通過攝影資料來學習得知,這不在本文的討論范圍,建議看一些視頻具備相關概念的直觀感受。
攝影里每個名詞背后都有不小的故事量,所以最多提及一下它的用途和目的。
- 光圈大小直接影響進光量,但光圈值和光圈的大小是成反比的,光圈的數值越小,光圈則越大的,如下圖。

- 按下快門相當於產生一次拍照結果,快門在數碼鏡頭里就是拍攝一次畫面的前后間隔的時間,就沒有機械式的按下與松開的過程了,所以快門速度越快,進入的光線越少,感光時間也越短,曝光量也就越少了。
在數碼相機中,快門簾幕已經不需要了,感光器件可以兼作快門。感光器件在不加電時是不工作的,因此,快門按鈕僅僅起到給感光器件通電的作用,而快門速度也僅僅是表示通電(感光)的時間。
- 感光度在不同場合下有不同的解釋,從調試的角度來說,就是增益(gain),這些數碼相機特有的,它主要影響感光元件的敏感度,越敏感意味着越容易電壓增幅明顯,相當於更容易產生整體偏亮的圖片。
在這三者的共同作用下影響的是畫面的曝光(Exposure)結果,曝光是什么感覺呢?曝光是你看到一個相片的整體光量的評估,如果你用直方圖也可以很直觀的感受一張圖片的曝光度。(不懂可以百度)
通常不同相片需要有不同的曝光來匹配,例如夜間需要更大的曝光來捕捉更多細節,但也會帶來更多噪聲(沙沙抖動的點點),而面對朝向強光下的人物風景拍攝就不需要這么多光線了,所以曝光是要根據相片的場合和需求來決定要多少的。
現在,有了 gain (增益)和 exp (曝光)兩個概念后,就可以繼續了。
通常在視覺應用中卷簾快門曝光不宜過大,因為果凍效應會增強快速移動的扭曲模糊問題,導致無法識別一些碼或標記,所以要控制在一定曝光下,逐漸升高增益,但增益也不宜過大,會產生更大的電信號導致畫面噪點增多,當增益拉不動的時候,就要改光圈,比如增大進光量。
所以 ISP 調試需要做什么?
過一遍簡單的流程。

所以最終目的是為了讓成像的效果在 AI 輸入和屏幕上顯示的畫面更有針對性,我們才需要去調試 ISP ,這是從內置 ISP 到外置 ISP 的一次改變,以往經典 DVP 攝像頭都是內置 ISP 的指令微調參數,如今走到這層就意味着,你可以通過其他更多功能的 ISP 來輔助成像的美顏處理。
這要求攝像頭可以輸出 RAW 圖,RAW 圖就是 bayer 色彩濾鏡( RGGB )輸出的效果,如下面這樣綠綠的畫面,這是因為 R GG B 的排列中 G 多了一個。

到這里我們要先調試好攝像頭的基礎設置曝光(set_exp)和增益(set_gain)的函數,這涉及到后續的 ISP 動態調節參數的時候能否做到,要怎么調,就看你具體的芯片情況了,這應該不是問題。
確認 sensor 出圖了以后,我們開始 ISP 的一些基本的調試吧,接下來有理論也有經驗。
所謂的去馬賽克(Demosaic)
這個去馬賽克(Bayer Denoise)是因為 bayer 陣列不同顏色排列導致的馬賽克畫面,通過去馬賽克(Demosaic)的插值算法來將 RGB 重新落會各個 R / G / B 單個像素點上,常見的鄰近插值、線性插值、雙線性插值等。

插值算法的工作原理有簡單也有復雜,可以舉例最簡單的鄰近插值,就是從鄰接的顏色值總和進行平均值來還原某中心點的 R G B 值,這種運算簡單,轉換效率高,但容易在黑白相間的柵欄區域里產生一些條紋顏色的現象,一個典型的色彩混疊的例子,注意圖中的白色柵欄。

這是因為 G 和 R B 的采樣率不同,若是采用鄰近插值的方式去還原單位像素的 G 值會導致色彩混疊。因為G的采樣率比RB都要高,這樣,RB不能像G那樣准確的恢復出原始被采樣圖像的色彩,就會有假的色彩花紋在圖像的高頻部分產生。
當然這是可以通過聯系更多像素的線性插值算法來彌補,因為各個像素點之間的關聯不夠,所以通過各種線性關系來加強彼此的聯系就可以比較好的改善了。
但見到這種情況的時候,可以不用緊張,可能是在這層出的問題,留個印象就行。
BLC(BlackLevel Correction) 黑電平校正
起因如下:
-
CMOS傳感器采集的信息經過一系列轉換生成原始 RAW 格式數據。以 8bit 數據為例,單個 pixel 的有效值是 0~255 ,但是實際 AD 芯片(模數轉換芯片)的精度可能無法將電壓值很小的一部分轉換出來,因此 sensor 廠家一般會在AD的輸入之前加上一個固定的偏移量,使輸出的 pixel value 在 5(非固定)~255 之間,目的是為了讓暗部的細節完全保留,當然同時也會損失一些亮部細節,由於對於圖像來說,我們的關注度更傾向於暗部區域,ISP后面會有很多增益模塊(LSC、AWB、Gamma等),因此亮區的一點點損失是可以接受的。
-
sensor 的電路本身會存在暗電流,導致在沒有光線照射的時候,像素單位也有一定的輸出電壓,暗電流這個東西跟曝光時間和 gain 都有關系,不同的位置也是不一樣的。因此在 gain 增大的時候,電路的增益增大,暗電流也會增強,因此很多 ISP 會選擇在不同 gain 下減去不同的 bl 的值。
它存在的判斷標准就是蓋上鏡頭,確保沒有光線和透光后,若是此時畫面不為黑(可以看 YUV 的 Y 亮度值是否為 0 ),則傳感器出來的實際原始數據並不是真正的黑(即數據不為0),所以可以通過 SO (sensor offset)的偏移量來修正為真正的黑。

未做處理的話,可能會帶來畫面存在一些奇怪的顏色,如下圖的粉到修正后的黑。

校正方法常見如下流程:
- 找手冊確認值。
- 找原廠 FAE 。
- 自己用工具測算。
這個是基礎功能,所以不用擔心找不到答案,大不了就自己拿 ISP 工具處理,讀圖計算。

白平衡(WB) 與 自動白平衡(AWB)
到這里我們第一次見到 3A 算法中的 AWB 了。
為什么需要白平衡,這是因為出來的 RAW (RGGB)數據從粉粉的到綠綠的始終不是真實的顏色,所以白平衡要做的就是對 R B 補償,以修正 R G B 讓畫面色彩正常。
而 AWB 自動白平衡就是在不同的色溫下,通常會在 2700K ~ 4000K ~ 6500K 不同色溫下對【灰色】的 G 值在 128 附近進行標定,需要手動調曝光配合喔。
沒有對應的色溫可以拉一下曲線自適應,通常會成有規律的線性關系,略帶曲線,目的就是補償 R 和 B 好比下圖。

這時候白平衡就會在不同的色溫下,對具體的 R 和 B 值做補償,例如低色溫的場合下偏黃 R ,所以白平衡會加藍 B ,使其 R 和 B 協調,高色溫反之。
可以拿自己的手機出來感受一下。
現在畫面的色彩就會很正常了,但注意此時色彩是失真的,看起來會很淡,如下圖,因為此時還沒有做 CM 色彩矩陣還原。

這時候,白平衡的標定已經結束了,評判的治標可以簡單看看某些物品紅不紅,藍不藍,確認 R G 色彩增強了就行,在這里微調補償值還可以讓圖片看起來偏暖(R多一些)或偏冷(B少一些)。
LSC(Lens Shade Correction) 鏡頭陰影校正(Shading)
因為鏡頭進光從中心向四周擴散,所以會導致光線的呈現中心圓的死角存在亮度不一致的情況,該四角俗稱暗部,那么 Shading 就是處理這個問題的。

流程為給鏡頭蓋上一個均勻透光的擴散片,控制不同光源色溫,調節曝光使中部的 Y 亮度值在 150 190 之間,邊角 在 50 附近,目的是中心不能過亮(150-190),四角不過暗(10-20),然后進行暗部的補償。
有一些 ISP 提供了 LSC 和 MSC ,主要區別在於光源位置可能會不同,就是不一定是中心,可能有多處光源,但同理處理。
CCM(Color Correction Matrix)顏色校正(色彩還原)
一般顏色校正的過程是首先利用該圖像傳感器拍攝到的圖像與標准圖像相比較,以此來計算得到一個校正矩陣,一般情況下,對顏色進行校正的過程,都會伴隨有對顏色飽和度的調整。顏色的飽和度是指色彩的純度,某色彩的純度越高,則其表現的就越鮮明;純度越低,表現的則比較黯淡。

步驟流程類似於 借助24色卡,同樣在不同色溫下手動曝光白色為(230,230,230)就可以開始標定了,通常這個時候可以順便增強色彩的飽和度,使其鮮艷或暗淡一些。
這是影響畫面的整體顏色是否准確的標定,注意,此時的光線一定要均勻夠亮,否則會偏色,白平衡做不好在這里還會影響整體的顏色偏綠,自己多注意一下吧。
Gamma 伽馬校正曲線
由於人眼對暗部畫面比 sensor 敏感,且是非線性的,僅是暗部敏感,所以可以通過 伽馬曲線 映射某一亮度到另一亮度,可以看到低亮度的時候增益幅度較大,而高亮度的時候基本不增益。

如果想要暗處的時候整體提亮,就將曲線底部 Y 軸曲線點拉高,但這可能會造成畫面整體出現灰色蒙板,因為整體亮度被拉高了。
而伽馬曲線主要用於調節不同顏色之間的對比度,也就是在某個像素點下,不同的 RGB 會被不同的伽馬曲線微調增益,有時候這個曲線並不是那么好調,所以根據實際情況做一些修正吧。
調節后,可以讓某些顏色漸變的過程中更亮更鮮艷。
WDR(Wide Dynamic Range)寬動態調節(HDR)
寬動態技術主要用來解決攝像機在寬動態場景中采集的圖像出現亮區域過曝而暗區域曝光不夠的現象。簡而言之,寬動態技術可以使場景中特別亮的區域和特別暗的區域在最終成像中同時看清楚。
主要是解決亮部不過亮,暗部不過暗的問題,這個不同家的實現還挺不一樣的,也是挺有挑戰的部分,例如下圖。


可以看出它會對亮部抑制,暗部補償從而修正該問題,在某些人像設備的背后經常會有光源,這就導致逆光的場合下看不到人臉,因為光線打到人臉上反射給鏡頭的沒有背后的光強烈,從而呈現較暗的畫面,就如上圖的效果。
具體怎么調,那就是調高亮區域和低亮區域的比例和增益曲線了。
銳化(Sharpness)和 降噪
這是兩兄弟了,降噪要在銳化之前,但我們先看銳化的效果吧。

其實銳化最簡單的理解就是對圖像的邊緣做處理,類似於增強畫面清晰度,而降噪呢,就是把圖像的一些噪點去除。【https://zhuanlan.zhihu.com/p/138348467】

可以看到那些斑點就是所謂的噪聲了,但有些事物可能會誤判為噪聲,例如人臉部的痘痘就可能被當作噪聲移除了,說白了就是為了讓畫面看起來更平滑,這時候我們要注意兩個模塊之間的關系。
如果降噪太強,則銳化后的畫面可能就會出現失真的效果,因為根本沒有東西可以被銳化,所以控制降噪和銳化的強弱關系,銳化也不能太強,太強就會出現畫面充滿了噪聲,因為某些噪聲會被邊緣增強。
噪聲還分彩色噪聲和黑白噪聲,通常出現在黑暗曝光不夠的場景里。
還有動態和靜態降噪,其中靜態降噪可以處理暗部抖動的斑點,動態降噪會將前后多幀進行降噪混合處理,進一步去除運動過程中的噪聲斑點,但這會產生殘影的效果,所以要控制好度,可以跟增益(gain)聯動固定下來,或根據光線強度聯動配置多份表來解決。
降噪的故事太多了,我想講可能也是講不完了。
后記
時間已到了 2021年6月9日00點24分,我也已經有些倦意了,所以就寫到這里吧,更多的,等我下次想到了,或者結合實際場景了,我再來開新的一文來補償一下吧。
其實該文也就是記錄了一些基礎流程和認知原理罷了,如果想要得知更為詳細的理論知識,個人建議拿着關鍵詞尋找專業的答案,而博文只能是給你啟發和增長見識而已,在知識上與君共勉,加油!
網上其實有很多學習資料供你學習的,不過這東西,還是要親自試試才有體會,調試到最后斗爭的都是畫面的主觀感受了,所以沒有絕對固定的唯一解,只有你的客戶看着舒服,滿意的解。
這次沒有講關於 AE 自動曝光配合一些寬動態調試的方法,如 PLTM (數字寬動態) 和 WDR 之類的,上文說的都是基礎的客觀調試,最難的是主觀調試,因為客戶通常拿不出競品參考,但又覺得你調的不好,還應該再調調,這就很來火了,調靜態和調動態也不同,下次出一個自己的心得體會把,關於 AF 自動對焦的個人還不熟悉,等會了后再提及。

