一、前言介紹
????????前面兩章里面,已經分別講解了在Raw和Rgb域里面,ISP的相關算法流程,從前面文章里面可以看到,在Raw和Rgb域里面,很多ISP算法操作,更像是屬于sensor矯正或者說sensor標定操作。本質上來說,設計的目的上很多是為了改善sensor本身的硬件缺陷。
????????而在Yuv域中,更多一些的是對圖像畫質的增強或者說風格化處理,在設計意義上,與前面Raw和Rgb階段稍微存在一點區別。如前文描述,Rgb圖像經過CSC格式轉換得到YUV圖像,將人眼敏感的亮度信息和不太敏感的顏色信息分離。因此,在Yuv階段整個流程中,可以看作是能夠并行的對亮度通道Y處理,和對顏色通道UV處理。
二、Y通道處理
1、Luma NR
????????Luma NR也就是對亮度通道去噪,其實前面Raw格式階段,已經有去噪模塊,并且有提到,在Raw圖像上去噪,去噪難度上能明顯好于在后端去噪。但是這塊存在歷史問題,以前的ISP設計或者說低端硬件設備上,通常無法集成太強大的復雜去噪算法,這就導致Raw圖像去噪時候,為了保留更多細節,通常并不會做太多或者太強的去噪,導致后面這邊YUV處理時候,需要做進一步的去噪處理。
????????就目前來說,比較好的ISP上,比如最近比較火的AI ISP,通常都集成的相對強大的Raw去噪算法,可以做到在保住盡可能多細節情況,把圖像噪聲基本處理到期望水平。這種情況下Yuv這里,就可以直接把去噪模塊省掉了。
常見的luma NR算法有很多,這里就不詳解列舉了,后面要研究去噪算法時候再慢慢折騰。
如下圖所示:左邊為待去噪圖像,右邊為Luma去噪后圖像,可以看到去噪后圖像上亮噪基本沒了,但是由于沒有UV去噪,導致殘留有大量的色斑。
?
?2、Edge Enhance
????????Edge Enhance某種程度上可以理解成抗噪聲的圖像銳化,期望是在不明顯放大噪聲情況下,對圖像做一些銳度調整,讓圖像清晰度看起來更加符合人眼感覺。需要注意的是:該模塊通常可以明顯提升圖像清晰度,讓圖像紋理更清晰,但是并不能無中生有,生成出圖像上原本沒有的紋理細節。
????????常見的作法有選擇性銳化或者說多尺度銳化,簡單理解就是將輸入圖像分解到不同頻段,在不同頻段做紋理細節或者說邊緣檢測,然后做不同強度的銳化增強,進而得到期望的清晰度增強結果圖像。
????????但是邊緣增強,并不是越強越好,如下圖可以看到,右邊銳化后結果圖像,紅框位置出現了明顯黑白邊異常,因此調整邊緣增強時候,需要主要各個頻段增強系數,避免圖像異常。
????????根據個人經驗來說,這類算法在實現上,最大的難點在于如何抗噪聲干擾,也就是如何保證確實只對連續的邊緣進行了增強,這就需要比較準確的,從噪聲中分離出邊緣細節。但是換句話說,既然都能把噪聲和邊緣細節分離出來,那基本上也就做了和去噪類似的事情。換個角度來說,如果去噪算法足夠好,那么細節增強時候,不用考慮噪聲干擾的話,該算法在設計和實現上,將會變得非常簡單。
?
3、Contrast & Brightness
亮度的定義上:Y圖像上像素值越接近255表示圖像越亮,越接近0表示圖像越暗;
對比度的定義上:假定圖像亮度范圍為[a, b],那么b-a越接近255則表示圖像對比度越強,反之越接近于0,則表示圖像對比度越差。
數字圖像處理上,定義了最常見的亮度/對比度調整公式:g(x)=αf(x)+β, 其中α和β分別表示圖像的對比度和亮度調整強度。
常用的對比度調整算法還有直方圖均衡化,CLAHE等,主要用來控制結果圖像的用戶風格喜好。
簡單效果對比,可以參考如下截圖(左圖為亮度/對比度調整前,右圖為調整后)。
?
三、UV通道處理
1、Chroma NR
????????Chroma NR也就是彩色噪聲去除,它的實現和Luma NR有比較大的區別,最明顯的差異在于人眼對顏色的敏感程度遠小于亮度變化,因此設計UV通道去噪時候,可以不用考慮微弱紋理,只需要保住強邊就好,簡單暴力來說,可以直接使用多尺度的強保邊濾波器進行去噪處理, 另外在不考慮微弱紋理情況下,多幀堆疊對去uv色噪非常友好。當然了,如果是因為awb異常導致的整體色斑偏色或者暗電流整片底噪的話,那當我沒說過。。。
????????需要特別小心2個地方:1、邊緣顏色擴散。2、濾波去噪后uv出現顏色偏差。一般來說,會考慮將y通道信息加入濾波,使用y通道信息作為引導,來改善濾波可能引起的顏色擴散和偏色等問題。
????????具體算法實現的話,等后面有興趣整理這塊時候,在單獨慢慢折騰了。對細節感興趣的話,小伙伴們可以先參考這個:劉斯寧:Understanding ISP Pipeline - Noise Reduction
????????去噪前和去噪后效果對比大致如下,可以看到輸入圖像上色斑基本處理干凈。
?
?2、Hue & Saturation
????????Hue & Saturation主要是在做顏色和飽和度調整,簡單來說就是根據需求,針對性的對圖像不同區域的UV通道信息進行調整。YUV格式之類科普我這里就不做了,需要了解的話,可以參考:YUV格式到底是什么?-騰訊云開發者社區-騰訊云 等資料。
????????具體來說,這里設計的功能,最初主要用來對不同應用場景和不同客戶喜好的風格調整,比如希望顏色更鮮艷一些之類需求。隨著發展逐漸加入了膚色調整(讓膚色還原度更高),天空調整(比如讓天空更藍)等操作,近些年很多還加入了場景適配,簡單理解就是對預覽輸入畫面進行場景識別,比如風景/人像/寵物/美食等,對不同場景適配不同參數,讓對應的場景顏色等維度,分別能都更加符合人眼感官。
????????具體顏色轉換相關細節,這里也不深入講了,后面研究這塊時候慢慢刷再。目前的話,小伙伴們,可以參考:劉斯寧:Understanding Hue and Saturation 等資料