1. 程式人生 > >引導圖濾波(Guided Image Filtering)原理以及OpenCV實現

引導圖濾波(Guided Image Filtering)原理以及OpenCV實現

引導圖濾波器是一種自適應權重濾波器,能夠在平滑影象的同時起到保持邊界的作用,具體公式推導請查閱原文獻《Guided Image Filtering》以及matlab原始碼:http://kaiminghe.com/eccv10/index.html。這裡只說一下自適應權重原理、C++實現灰度影象以及彩色影象的引導圖濾波、驗證結果。

  • 自適應權重原理

     引導圖濾波作為一種線性濾波器,可以簡單定義為如下形式:

    其中I是引導影象(guided Image),P是輸入的待濾波影象,Q是濾波後的輸出影象,W是根據引導圖I確定的權重值。權重值W可以用下式表示(原文獻有詳細推導):

            μk是視窗內畫素點的均值,Ii

    Ij指相鄰兩個畫素點的值,σk代表視窗內畫素點的方差,ε是一個懲罰值。自適應權重可以根據上式分析得到:Ii和Ij在邊界兩側時,(Ii-μk)(Ij-μk)異號,否則,則同號。而異號時的權重值將遠遠小於同號時的權重值,這樣處於平坦區域的畫素則會被加以較大的權重,平滑效果效果更明顯,而處於邊界兩側的畫素則會被加以較小的權重,平滑效果較弱,能夠起到保持邊界的效果。
          懲罰值ε對濾波效果影響也很大,當ε值很小時,濾波如前面所述;當ε值很大時,權重的計算公式將近似為一個均值濾波器,平滑效果會更明顯。
         

    同樣也可以根據線性濾波公式來看引導圖濾波的自適應權重原理,區域性線性濾波模型公式如下:

          I指引導影象,Q是輸出影象,akbk兩個係數根據引導圖I和輸入影象P共同決定。將上式兩邊求梯度,可以得到▽q=a*▽I,輸出影象的梯度資訊完全由引導影象的梯度資訊決定,當引導圖中有邊界時,輸出影象中對應位置也會有邊界。而a和b的值將會決定梯度資訊和平滑資訊的權重大小。
          通過觀察a和b的公式,a的分子為I和P的協方差,分母部分為I的方差加上截斷值ε;b的值為P的均值減去a乘以I的均值。可以看出當a值很小時,b約等於視窗內畫素點的均值pk,近似於均值濾波;而當a值很大時,輸出則主要取決於a*▽I的大小,梯度資訊能夠得到保留。

  • C++實現灰度影象以及彩色影象的引導圖濾波

    根據原文獻中提供的虛擬碼,不難用C++實現引導圖濾波演算法。虛擬碼如下:



    這裡需要分兩種情況,1.引導圖為單通道的灰度圖;2.引導圖為三通道的彩色圖。
  1. 引導圖為單通道
    分別算出I與P的均值影象,以及I²和I*P的均值影象;再求出I的方差影象,以及I*P的協方差影象;利用公式求出a和b的值;再視窗內對a和b求均值;再根據公式算出輸出影象。
    這裡又分為兩種情況:
    ①輸入圖為單通道:按照上述步驟計算即可。
    ②輸入圖為三通道:先分離三個通道,對每個通道進行上述濾波操作,然後合併通道即可。
  2. 引導圖為三通道
    此時,將上述模型做了稍微修改,如下:

    不同之處在於求a時將原來的方差σ替換為協方差3x3矩陣∑k,表示如下:

    U是3x3單位矩陣,求出來的a將不再是一個值,而是一個1*3的向量,然後求b。a為1*3的向量,μk為3*1的向量,相乘後b為一常量,由此可以求得常量b的值。

    這裡又分為兩種情況:
    ①輸入圖為單通道:按照上述步驟計算即可。
    ②輸入圖為三通道:先分離三個通道,對每個通道進行上述濾波操作,然後合併通道即可。

    注:引導圖為彩色圖比引導圖為灰度圖,邊界保護更加明顯,見原文。

  • 效果驗證

程式碼裡面求均值部分,可以由OpenCV中的boxFilter()函式實現,或者blur()函式實現。總之是一個均值濾波器,之所以與視窗大小無關,是因為使用直方圖實現的均值濾波,能夠大大降低運算時間。VS2015+OpenCV3.4.0實現的程式碼放在我的碼雲code上:ε,輸出引數為濾波後圖像Q。引導圖I和輸入影象P可以相同,也可以不同,比如stereo matching中常常用原參考影象作為引導圖,對代價空間圖進行引導圖濾波以實現代價聚合。這樣能儘量保留原影象邊界區域的匹配代價,而平滑平坦區域的匹配代價。
   
 (注:文獻中的程式碼是通過matlab編寫的,matlab中讀取影象時會自動將影象歸一化到0-1,因此截斷值ε的設定也對應小很多,比如0.1,0.01等。而本文中讀取影象後未進行歸一化操作,所以截斷值ε的設定會有不同。如果需要歸一化,則自行讀取影象後除以255即可)。

  1. 單通道灰度圖原圖


    改變截斷值ε
      r=10, ε=0                            r=10,  ε=100            
        

    r=10 , ε=2000                          r=10, ε=8000    
     

    改變視窗半徑r
     r=0, ε=500                                   r=5, ε=500 

                          
      
               r=10, ε=500                              r=20, ε=500 
               

  1. 三通道彩色圖
    原圖


    改變截斷值ε
      r=10, ε=0                            r=10,  ε=100                           
         
      
    r=10 , ε=2000                          r=10, ε=8000 
        


    改變視窗半徑r
    r=0, ε=500                             r=5, ε=500                            
            

    r=10, ε=500                              r=20, ε=500 
        
  • 快速引導圖濾波演算法
    快速引導圖濾波演算法見文獻《fast guided filter》,上述主頁中也有。快速的地方主要是採用了影象金字塔思想。步驟如下:

  1. 對引導影象I和輸入影象P進行1/s的降取樣,得到I', P';
  2. 利用I'和P'計算係數a和b,並計算輸出影象Q';
  3. 將Q'進行s倍的上取樣得到最終輸出影象Q。

       由於計算部分是降取樣的影象,運算量會大大減小,而不會引入明顯的失真,因此成為快速引導圖濾波。程式碼見上述碼雲code連結的fastGuidedFilter分支。

相關推薦

引導濾波Guided Image Filtering原理以及OpenCV實現

引導圖濾波器是一種自適應權重濾波器,能夠在平滑影象的同時起到保持邊界的作用,具體公式推導請查閱原文獻《Guided Image Filtering》以及matlab原始碼:http://kaiminghe.com/eccv10/index.html。這裡只說一下自適應權重原理、C++實現灰度影象以及彩色影象的

保持邊緣的濾波函式————Guided Image Filtering

1,定義 引導濾波:即需要引導圖的濾波器,引導圖可以是單獨的影象或者是輸入影象,當引導圖為輸入影象時,引導濾波就成為一個保持邊緣的濾波操作,可以用於影象重建的濾波。 引導濾波的流程見下圖: 假設輸入影象為p,輸出影象為q,引導圖為I,q與I在以畫素k為中心的視窗中存在區域性線性關係: 視窗半徑為r,

MLP多層感知機人工神經網路原理及程式碼實現

一、多層感知機(MLP)原理簡介多層感知機(MLP,Multilayer Perceptron)也叫人工神經網路(ANN,Artificial Neural Network),除了輸入輸出層,它中間可以有多個隱層,最簡單的MLP只含一個隱層,即三層的結構,如下圖:從上圖可以看

Gradient Domain Guided Image Filtering梯度域導向濾波

reg UC clear mat min ati double CP guide 作者提出了一種新的梯度域引導圖像濾波器,通過將明確的一階邊緣感知約束結合到現有的引導圖像濾波器中。

引導濾波 Guided Image Filtering

本文主要介紹導向濾波,引導濾波在濾波的同時,具有保邊緣的特效,考慮了空間因素,可以用在影象去霧演算法中對透射率t的優化中,能起到很好的效果 論文如下: Guided Image Filtering Kaiming He  , Jian Sun , and Xiao

LeetCode 48. 旋轉Rotate Image

return leetcode 二維 get lee 圖像 代碼 必須 tps 題目描述 給定一個 n × n 的二維矩陣表示一個圖像。 將圖像順時針旋轉 90 度。 說明: 你必須在原地旋轉圖像,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。

導向濾波小結:從導向濾波guided filter到快速導向濾波fast guide filter原理,應用及opencv實現程式碼

1. 導向濾波簡介導向濾波是何凱明在學生時代提出的一個保邊濾波(edge-preserving smoothing)演算法。何凱明在cv圈應該算是名人了,學生時代關於影象去霧的研究就以第一作者的身份獲得Best Paper Award(CVPR 2009),而且今年剛剛又斬獲

Egret打包App 修改App名稱和Egret4.1.0

ring 項目 mil src image val 白色 span value 圖標替換位置在項目res下的drawable這些目錄下,用新圖標覆蓋即可。 這裏我用白色圖片替換了白鷺默認的圖片ic_launcher.png 修改App名字,在res->

關於Yii2中的MVC中的視總結持續更新中

gif pre lis frontend dbo register front reg open 一、首先在控制器中,將處理好的數據發送給前臺: $this->layout = ‘base‘; 這裏填寫視圖的模板文件(可以不寫這行代碼,如果不寫,默認為views/la

復合硬件加速

ati blog nbsp 狀態 city 過渡 隱式 render 性能 如何變成復合圖層(硬件加速) 將該元素變成一個復合圖層,就是傳說中的硬件加速技術 最常用的方式:translate3d、translateZ opacity屬性/過渡動畫(需要動畫執行的過程

程序員隨筆:使用來自服務器的有源碼

程序員 ios開發 移動開發 iOS開發人員 如果您是移動應用程序開發人員,則在某個時間點您需要與後端進行互動。您可能需要做的其中一項任務是從服務器檢索並顯示圖像,或將圖像提交給該服務器。提交圖像時應該使用什麽格式?如何將從服務調用接收的字節轉換為圖像?讓我們將整個堆棧從服務器構建到iOS應用

微信小程序 視wxml,wxss

全局 快速開發 text icon inpu 應用 容器 form IE 豐富的組件:https://developers.weixin.qq.com/miniprogram/dev/component/ 全局樣式:app.wxss 頁面+頁面樣式:page.wxml +p

Coursera概率模型Probabilistic Graphical Models第一周編程作業分析

期望 and find 不同的 列表 mali 一周 模型 course Computing probability queries in a Bayesian network 計算貝葉斯網絡中的概率查詢 1.基礎因子操作 作業中因子的結構 phi =

Coursera概率模型Probabilistic Graphical Models第四周編程作業分析

map tel ica join 正常 最大化 expected 聯合 else Decision Making 作決策 這一周的內容在老版本的CS228課程中,是作為第六周的一個小節講的(老版本的CS229只有9周的課程),而在概率圖模型的教材裏邊對應的是第22章

淺談WPF中對控件的位特效WPF Bitmap Effects

作用 ive 圖形圖像 控件 級別 library art 分享 ack 原文:淺談WPF中對控件的位圖特效(WPF Bitmap Effects) ---------------

油田採油生產業務建模之資料流實踐EA使用入門

  資料流圖(Data Flow Diagram):簡稱DFD,是從資料傳遞、儲存和處理的角度,以圖形方式來表達系統資料相關的邏輯功能、資料在系統內部的邏輯流向和邏輯變換過程,是結構化系統分析方法的主要表達工具,以及用於表示軟體模型的一種圖示方法。   資料流圖強調的是資料流和處理過

油田採油生產業務建模之活動實踐EA使用入門

  UML活動圖(Activity Diagrams)是將低階系統行為描述為一系列控制和物件流路徑,是闡明瞭業務用例實現的工作流程,活動圖類似於流程圖,在EA上可以使用泳道,每個活動圖有一個起始點和結束點。      本文續接上篇《油田採油生產業務建模之業務用例實踐(EA使用入門)》

設計模式應試複習篇——11種行為型模式的類結構7~11種

7、觀察者模式 1)觀察者模式包含如下角色 Subject:目標又稱為主題,它是指被觀察的物件。在目標中定義了一個觀察者集合,一個觀察目標可以接受任意數量的觀察者來觀察,它提供一系列方法來增加和刪除觀察者物件,同時它定義了通知方法notify()。目標類可以是介面,也可以是抽象類或具體類。

設計模式應試複習篇——11種行為型模式的類結構1~6種

1、職責鏈模式 1)職責鏈模式包含如下角色: Handler:抽象處理者角色,它定義了一個處理請求的介面,一般設計為抽象類,由於不同的具體處理者處理請求的方式不同,因此在其中定義了抽象請求處理方法。因為每一個處理者的下家還是一個處理者,因此在抽象處理者中定義了一個抽象處理者型別的物件(如結構

Coursera概率模型Probabilistic Graphical Models第三週程式設計作業分析

Markov Networks for OCR 光學字元識別的馬爾科夫網路   說到光學字元識別(OCR),此前筆者首先想到的會是卷積神經網路,而單詞識別則會考慮使用遞迴神經網路。而本週的作業則基於馬爾科夫網路構建了一個較為基礎OCR系統,目的也主要是讓我們對馬爾科夫網路有個感