1. 程式人生 > >影象處理中的卷積與模板

影象處理中的卷積與模板

1.使用模板處理影象相關概念:      

  模板:矩陣方塊,其數學含義是一種卷積運算。

  卷積運算:可看作是加權求和的過程,使用到的影象區域中的每個畫素分別與卷積核(權矩陣)的每個元素對應相乘,所有乘積之和作為區域中心畫素的新值。

   卷積核:卷積時使用到的權,用一個矩陣表示,該矩陣與使用的影象區域大小相同,其行、列都是奇數,是一個權矩陣。

     卷積示例:

             假設3 * 3的畫素區域R與卷積核G分別為:


則卷積運算為:

              R5(中心畫素)=R1G1 + R2G2 + R3G3 + R4G4 + R5G5 + R6G6 + R7G7 + R8G8 + R9G9

2、使用模板處理影象時涉及到的問題:

      邊界問題:當處理影象邊界畫素時,卷積核與影象使用區域不能匹配,卷積核的中心與邊界畫素點對應,卷積運算將出現問題。

      處理辦法:

              A.忽略邊界畫素,即處理後的影象將丟掉這些畫素。

              B.保留原邊界畫素,即copy邊界畫素到處理後的影象。

3、常用模板:

      (a)低通濾波器

                             
 

   (b)高通濾波器                 

                       

   (c)平移和差分邊緣檢測

                      

    (d)匹配濾波邊緣檢測

                       

    (e)邊緣檢測

                           

    (f)梯度方向邊緣檢測

                      

                     

4、我們來看一下一維卷積的概念.

    卷積(convolution,另一個通用名稱是德文的Faltung)的名稱由來,是在於當初定義它時,定義成integ(f1(v)*f2(t-v))dv,積分割槽間在0到t之間。舉個簡單的例子,大家可以看到,為什麼叫“卷積”了。比方說在(0,100)間積分,用簡單的辛普生積分公式,積分割槽間分成100等分,那麼看到的是f1(0)和f2(100)相乘,f1(1)和f2(99)相乘,f1(2)和f2(98)相乘,.........等等等等,就象是在座標軸上回卷一樣。所以人們就叫它“回捲積分”,或者“卷積”了。

    連續空間的卷積定義是f(x)與g(x)的卷積是f(t-x)g(x)在t從負無窮到正無窮的積分值.t-x要在f(x)定義域內,所以看上去很大的積分實際上還是在一定範圍的.
       實際的過程就是f(x)先做一個Y軸的反轉,然後再沿X軸平移t就是f(t-x),然後再把g(x)拿來,兩者乘積的值再積分.想象一下如果g(x)或者f(x)是個單位的階越函式.那麼就是f(t-x)與g(x)相交部分的面積.這就是卷積了.

    卷積運算滿足交換律,也就是說:f與g進行卷積完全等於g與f進行卷積。

   由兩個函式f和g進行卷積而得到的函式f*g,一般要比原來的f和g都要光滑。所以在影象處理中對影象進行卷積後會使原影象模糊。因為卷積具有平滑作用。

    有趣的是,如果把兩個人的照片互相進行卷積,所得到的照片,就同時和這兩個人都很相像。

把積分符號換成求和就是離散空間的卷積定義了.

   那麼在影象中卷積是什麼意思呢,就是影象就是影象f(x),模板是g(x),然後將模版g(x)在模版中移動,每到一個位置,就把f(x)與g(x)的定義域相交的元素進行乘積並且求和,得出新的影象一點,就是被卷積後的影象.模版又稱為卷積核.卷積核做一個矩陣的形狀。

5、卷積運算時的核函式

      在Matlab中,對影象進行卷積運算時,都要先得到一個核函式,其實就是模板。其函式呼叫是:

>> G=fspecial('gaussian',5,0.5)

G =

     0.0000    0.0000    0.0002    0.0000    0.0000

    0.0000    0.0113    0.0837    0.0113    0.0000

    0.0002    0.0837    0.6187    0.0837    0.0002

    0.0000    0.0113    0.0837    0.0113    0.0000

     0.0000    0.0000    0.0002    0.0000    0.0000

>> G=fspecial('gaussian',5,1.5)

G =

    0.0144    0.0281    0.0351    0.0281    0.0144

   0.0281    0.0547    0.0683    0.0547    0.0281

   0.0351    0.0683    0.0853    0.0683    0.0351

   0.0281    0.0547    0.0683    0.0547    0.0281

   0.0144    0.0281    0.0351    0.0281    0.0144

    能夠看出來,fspesial()函式的第一個引數表示返回高斯核函式(低通濾波器、模板等名稱其實都一樣)。第二個引數“5”表示該模板的大小,是5X5的矩陣。第三個引數是sigma了。