乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      好色之圖 | 玩轉(zhuǎn)圖形信號處理,最復雜的細節(jié)問題要如何入手?

       海鯀 2017-01-23

      前言:

      這篇文章是我從事ISP研究數(shù)年來的一些經(jīng)驗總結(jié),沒有用到深奧的理論知識,有的只是根據(jù)實際狀況來處理的一些常規(guī)方法,以及曾經(jīng)犯過的錯誤總結(jié)。我想把ISP function的原理用簡單淺顯的語言描述出來,希望對初學者有所幫助。這里的ISP主要是指從CMOS  sensor輸出的bayer pattern,到轉(zhuǎn)換成通用的YUV或者YCbCr格式的過程,通常用于USB攝像頭/監(jiān)控攝像頭/手機/平板等芯片設(shè)計中。

       

      4.細節(jié)

      細節(jié)部分會介紹去噪denoise,Bayer pattern 轉(zhuǎn) RGB(即interpolation),Edge enhance(即Sharp)以及邊緣偽彩色false color。這部分內(nèi)容是ISP中最復雜的,需要較龐大的計算量和Memory。任何一個function都可以在網(wǎng)上找到不少的論文,這里我只說明一些基本原理和關(guān)鍵因素,不討論詳細的實現(xiàn)算法。


      4.1 去噪Denoise

      首先我們把Noise 分成三類,分別是高斯白噪聲,壞點,受傷點。這三類分別有不同的處理方法。


      壞點Dead pixel是指有些像素不受拍攝景物影響,始終為固定的一個數(shù)值,通常為最大值或者最小值,也就是常說的亮點和黑點。檢測壞點的算法比較容易,因為壞點和周圍的像素差異非常大,檢測出來之后,可以用附近點均值替換即可。


      受傷點wound pixel是指有些點在低照度下,sensor gain很大的時候,會出現(xiàn)一定的偏差,能夠被人眼明顯察覺。這些受傷點輸出的值不固定,同時也受拍攝景物影響,例如比周圍正常像素的數(shù)值大一些,形成不太明顯的亮點,有時候還會隨著時間改變,一閃一閃的。對于受傷點,不是很容易被檢測輸出來,好在它一般只出現(xiàn)在暗光條件下,如果受傷點處在平坦區(qū)域,那么可以用最大值(最小值)替換,或者中值濾波等方法消除,如果正好處在邊緣上,那么就較難辨別出來,中值濾波等處理方法會使得圖像模糊。壞點和受傷點對應到課本中就是椒鹽噪聲。


      一般我們說的噪聲都是指高斯白噪聲,噪聲的大小和sensor的增益大小成比例關(guān)系,同時ISP中的很多運算(例如Gamma,LSC,AWB,CCM等)都會放大Noise幅度。從頻域來看,噪聲遍布整個頻域。對于高頻噪聲,比較容易消除,但是高頻噪聲和實際景物容易混淆,消除噪聲的時候也會使得圖像模糊。對于低頻噪聲,就需要花代價來消除,在任何二維空間域的去噪算法中,都需要一個以當前像素為中心的窗口,這個窗口越大,就越能檢測出低頻的Noise,同時也意味著越多的Memory和計算量。從空間域來看,落在平坦區(qū)域的Noise比較容易消除,落在景物邊緣的Noise則真假難辨,必須在清晰度和Noise之間做一個折中的選擇。
       

      我所知道的可用于ISP中去除Noise的方法大概有以下一些分類(沒有廣泛研究過,肯定有疏漏,請包涵)。

      1.首先是空間域和時間域的劃分。圖像是二維的,空間域是指僅對一幅圖像中的二維數(shù)據(jù)處理,一般照片的去噪都是在二維空間域。時間域是指多幀圖像之間的去噪,在視頻中,前后Frame有著較大的相關(guān)性,對于靜態(tài)場景來說就更加明顯。空間域去噪算法需要考慮的是Noise和圖像清晰度之間的權(quán)衡,而時間域去噪算法需要考慮的是Noise和移動物體的拖尾殘影現(xiàn)象的權(quán)衡。
       

      2.其次是基于位置和基于數(shù)值的劃分。要消除Noise,一般人第一個想到的方法就是低通濾波器,以當前像素為中心,選擇一個一定范圍的中心對稱的低通濾波器,到中心距離越近,對應位置像素的weighting越高,越遠則越小,這就是基于位置的方法。另外一種是基于數(shù)值的方法,先同樣選擇以當前像素為中心的一個范圍,把這個范圍內(nèi)的像素按照數(shù)值大小來排成一個序列,然后再做處理,處理的方法可以是直接選擇某些點(例如最大值/最小值替換,中值濾波),也可以對這個序列再做低通濾波計算。鼎鼎有名的雙邊濾波就是結(jié)合了位置和數(shù)值兩種思想合二為一的算法,不過其公式計算太過復雜,不適合數(shù)字電路設(shè)計實現(xiàn),但是其思想是完全可以借用的。
       

      3.各種變換域的處理方法。例如傅立葉變換,離散余弦變換,最有名的就是小波變換。這些域變換的基本原理都差不多,基于人眼對高頻分量較不敏感的特性,對轉(zhuǎn)換域中的部分數(shù)據(jù)進行歸0或者縮小,以達到消除Noise(或者圖像壓縮)的目的。小波變換效果較好,不過由于計算量很大,在ISP中實現(xiàn)有很大的難度。
       

      在實際應用中,變換域的方法太過復雜,不適合實時視頻處理,所以常用的還是上面兩大類方法。一般來說Noise的幅度總是有限度的,和實際景物邊緣的變化程度有較大差距,所以通常會在平坦區(qū)域盡可能的多消除noise, 而在物體邊緣則盡量保護景物細節(jié),少做denoise處理,根據(jù)景物內(nèi)容動態(tài)調(diào)整去噪算法是必須的。在另一方面,Noise的幅度大小和sensor的增益相關(guān),當環(huán)境變換導致AE gain變化的時候,Noise的幅度變化非常大,有些sensor在低光照條件下會有64倍的AE gain,Noise滿屏跳躍,幾乎掩蓋實際景物。有時候常會說“評價ISP好壞,就是看暗光情況下的Noise大小”,不同的Noise 幅度意味著不同的ISP算法(或者算法中的參數(shù)),所以還需要SW根據(jù)實際情況來動態(tài)調(diào)整去噪算法。因此,在真實的ISP電路設(shè)計中,去噪算法的多樣性和可調(diào)整性是非常必要的。

       

      Figure4.1.1 空間域去噪效果

       

      除了去噪算法以外,抑制Noise根源也是去噪的一個重要手段。Noise本身無處不在,問題根源在于Noise被不斷放大,也就是各種增益Gain(或者說乘法)把Noise放大了許多倍。為了達到一定的亮度,Sensor的AE gain通常沒有辦法改變,能改變的只有ISP自身。常用的抑制Noise手段包括:

      • 降低Lens shading correction曲線的幅度,讓周邊稍微暗一些,減少周邊Noise。
      • 降低Gamma curve在暗處的斜率,減少暗處Noise。
      • 降低CCM系數(shù)絕對值,減少彩色噪聲。
      • 降低edge enhance幅度,減少景物邊緣Noise。
         

      去噪方法可以說是ISP中牽涉最廣,實現(xiàn)難度最大的一個功能,它滲透進AE,LSC,Gamma,AWB,interpolation,edge enhance等多個function,是一個系統(tǒng)工程。

       

      4.2 Interpolation

      這里說的interpolation是指把Bayer pattern data 轉(zhuǎn)化為RGB data的過程,每個像素都要有完整的[R G B]三個分量。先看一下最簡單的雙線性插值算法。

       

      Figure4.2.1 雙線性插值

       

      這是最簡單原始的方法,確實可以得到一幅RGB圖像,不過存在一些問題,例如拉鏈現(xiàn)象,有些模糊,分辨率不高,邊緣有些彩色(false color)等。評價插值算法的好壞,通常用ISO12233測試紙,如下圖。

       

      Figure4.2.2 ISO12233測試紙
       

      觀察細節(jié)算法的好壞,必須把圖像放大到像素級別,直接研究數(shù)值大小,下面以拉鏈現(xiàn)象為例。拉鏈現(xiàn)象出現(xiàn)在水平或者垂直的邊緣上,是由于G分量計算不當所致。以一條水平邊為例,如下圖,用雙線性插值的話,在水平邊緣上就會出現(xiàn)[90, 82.5, 90, 82.5…]這樣的循環(huán)重復規(guī)律。

       

      Figure4.2.3
       

      從圖像效果來看就是類似拉鏈狀。

       

      Figure4.2.4 拉鏈現(xiàn)象(雙線性插值和沿著edge方向插值)

       

      要解決拉鏈現(xiàn)象,保持邊緣的光滑,很直觀的想法就是對G分量采取沿著邊緣方向去插值,在上圖中,就讓G5 =(G4 + G6)/2。這樣就意味著要做邊緣方向性的判斷,如果是垂直邊,那么就會是G=(G2+G8)/2,還有各種其他方向,則可以對周邊四個G分量采用不同的加權(quán)平均算法得到中心點G分量數(shù)值。邊緣方向判斷是interpolation算法中最重要的一個環(huán)節(jié),是各家ISP算法的核心之一,有興趣的同學可以查看這個方面的論文。評價圖像分辨率(清晰度)的一個指標,是看ISO12233中對細密紋理的識別程度。一個好的算法可以判斷出只有一個像素寬度的細條紋。

       

      Figure4.2.5 interpolation識別細密紋理
       

      在Bayer pattern中,一半像素是G,R和B都只占1/4,R和B信息缺失比較嚴重。在雙線性插值算法中,R分量的計算只和周圍的R相關(guān),如果用G分量的信息去修正缺失的R分量,那么清晰度會有不小的提升。以水平方向的邊緣為例:

       

      Figure4.2.6 水平edge上利用G分量修正R或B
       

      上圖中a1和a2是修正系數(shù),范圍在0~1之間。這種常用的計算方法不僅提高了清晰度,也可以緩解false color現(xiàn)象。不過從另一方面來看,這種修正會增加Noise幅度,原本R分量自身有一定的Noise分布概率,現(xiàn)在疊加了G分量的Noise,那么最大Noise幅度會提高。因此系數(shù)a1和a2需要根據(jù)場景,Noise幅度等因素權(quán)衡選擇。

       

      整體來說,Interpolation算法大致過程就是先邊緣方向檢測,然后沿著方向去做插值,兼顧Noise和清晰度的平衡,順便還可以做一些false color的處理。

       

      4.3 Edge enhance

      邊緣增強Edge enhance和一般所說的sharp是一個近似的概念。我這樣區(qū)分二者:sharp是對圖像所有內(nèi)容增加銳利度,包括Noise也會被放大;而edge enhance是要讓真正的edge變得銳利,Noise則盡量不被放大顯現(xiàn)出來。從算法上來說Sharp很好實現(xiàn),任何課本中都會提到sharp算子,而edge enhance則要有效區(qū)分出edge和Noise,并且判斷edge方向來做增強,增強的方法也很有難度,既要達到一定的銳利度MTF,又要解決邊緣粗糙roughness,overshot和undershot等問題。
       

      邊緣增強一般在YCbCr空間進行,并且只對Y分量處理,Cb和Cr保持不變,其原理如下:

       

      Figure4.3.1 edge enhance 原理

       

      淺藍色為原值,深藍色為enhance之后的數(shù)值。從波形上看,edge enhance就是要讓線條的斜率更陡一些,甚至允許出現(xiàn)小幅度的過沖。從數(shù)值上來看,就是讓數(shù)據(jù)朝著遠離鄰近點均值的方向走,而且和鄰近點均值的差越大,走過的距離也越大,把當前像素值和鄰近點均值的差記為d;另外,edge enhance的幅度還和整個edge的變化范圍有關(guān),可以認為上圖中最大值和最小值的差,記為g;最后是用戶設(shè)定的銳利度s,這三者可以得出像素的edge enhance函數(shù)H(x)。

       

      H(x) = x + f(d, g, s)

       

      f(d, g, s)是一個和d,g,s三者都正相關(guān)的函數(shù),但并非線性關(guān)系。這里沒有統(tǒng)一的數(shù)學模型可以給出答案,只有仔細研究規(guī)律,多做實驗,可以說的是想要得到較好的視覺效果,這個模型非常復雜,參數(shù)眾多。通過不斷的對參數(shù)調(diào)試練習,慢慢建立起數(shù)學計算模型和實際圖像效果之間的映射關(guān)系,才能較好的平衡銳利度MTF和roughness,overshort,undershort等因素。
       

      為了避免把Noise enhance出來,edge enhance在實現(xiàn)中還需要判斷當前像素處于光滑區(qū)域還是物體邊緣。當處于光滑區(qū)域的時候,則不要做edge enhance運算,或者做的幅度很??;只有在較明顯的邊緣上才做處理,這樣避免不了邊緣上的noise的影響,所以在銳利度s設(shè)定較大的時候,可以發(fā)現(xiàn)邊緣上會有Noise閃動跳躍的情況。為了緩解這種Noise的跳躍,通常會對f(d, g, s)做最大值和最小值限制保護,并且沿著edge 方向做低通濾波來緩解Noise。

       

      Figure 4.3.2 egde enhance 前后效果比對
       

      整個Edge enhance的大致流程為先判斷平坦區(qū)域還是邊緣,對平坦區(qū)域可以不做或者少做edge enhance(甚至做smooth處理),對邊緣要判斷幅度大小,邊緣方向,選則相對應的高通濾波器處理,最后對enhance的幅度做一定程度的保護處理。

       

      4.4 False color

      False color一般出現(xiàn)在物體邊緣上,特別是白紙黑字。如下,白紙上的黑色線條,一側(cè)偏黃,一側(cè)偏藍。

       

      Figure 4.4.1 放大后的false color現(xiàn)象


      False color的原因有兩個,一是bayer pattern中R和B信息丟失比較嚴重,插值出來的R和B分量帶有誤差;二是鏡頭對不同波長的光的折射率不一樣。前者比較容易理解,后者則可以通過觀察發(fā)現(xiàn)規(guī)律。對ISO12233測試紙拍攝圖片,我分別截取四周的局部圖片,放大比較來看。

       

       

      左上角              右上角

       

       

      左下角            右下角

      Figure 4.3.2 flase color呈現(xiàn)中心對稱的特點


      從上圖中可以發(fā)現(xiàn),黑色方塊靠近圖像中心的邊緣有點橙色,背離中心的邊緣呈現(xiàn)藍色。以左上角的黑色方塊為例,三種顏色分量的數(shù)值曲線有位移,如果其位移的規(guī)律按照figure4.3.3的形狀,那么剛好可以解釋邊緣偏色的情況。

       

      Figure4.3.3 RGB曲線位移


      如果可以糾正這種位移,那么false color就可以明顯消除。從原理上分析,解決方法比較簡單,只要把B分量向著中心位置收縮,收縮的距離和像素到鏡頭中心的距離有關(guān),這可以通過數(shù)學建模得到(例如拋物線)。同樣R分量則要向外擴張,擴張的方式也一樣用數(shù)學建模得到。實現(xiàn)起來則有不小難度,畢竟像素是按照矩陣方式排列的,而收縮或者擴張是360度的,需要復雜的三角函數(shù)和數(shù)據(jù)流控制機制。


      對位移較小的false color處理起來相對容易,畢竟我們已知其規(guī)律,并且有周邊像素作為參考。對于較大范圍的false color(上圖中位移較大的情況)則難有很好的解決方法,因為在當前像素的一個小范圍內(nèi)都是異常的色彩,無法分辨到底是true or false。


      4.5小結(jié)

      細節(jié)相關(guān)的function都比較復雜,較難像色彩和亮度那樣直觀的理解。我自己感覺細節(jié)設(shè)計其實就是數(shù)學和信號處理,需要細致的思考和探究,種種現(xiàn)象都可以從數(shù)學上找到對應的關(guān)系。另外像自動對焦Auto focus和縮放Zoom也和細節(jié)設(shè)計相關(guān),前者需要邊緣檢測,后者需要多采樣濾波。

       

       

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多