單元五、空間濾波

 

1. 空間迴旋積(Spatial Convolution)

一張影像可以在頻率域(frequency domain)或空間域(spatial domain)進行濾波。本章將介紹各種用在空間域率波的運算子,包括可濾除高頻雜訊的均值濾波器、中值濾波器、高斯濾波器,以及用來增強邊緣特徵的索貝爾濾波器、拉普拉斯濾波器。

空間濾波器(spatial filter)h(i,j)又稱為Mask/Kenel/Window,影像f(x,y)經過空間濾波器的運算,得到濾波後的影像g(x,y),

Eqn:eqnspin1

此一運算為迴旋積(convolution),迴旋積的運算模式為"shift-multiply-summation" ,  shift指由左到右、由上到下移動濾波器h,針對每一次濾波器視窗所涵蓋的原始影像的區域進行相乘,最後累加所有乘積,得到濾波影像g上一個像素的值。假設空間濾波器的大小是M× M,則我們可以寫成:

Eqn:eqnspin2

示意圖如下:

void convolution(uc2D &ima1, f2D &h, uc2D &ima2)

{

    int i,j,ii,jj;

    int N=h.nr/2;

    int mac;

    for(i=N;i<ima1.nr-N;i++)for(j=N;j<ima1.nc-N;j++)

    {

        mac = 0;

        for(ii=-N;ii<=N;ii++)for(jj=-N;jj<=N;jj++)

        {

            mac = mac + ima1.m[i+ii][j+jj]*h.m[ii+N][jj+N];

        }

        ima2.m[i][j]=mac;

    }

}

2. 用於平滑化影像的線性濾波器

A. 均值濾波器(mean filter)

一個3x3均值濾波器是最簡單的平滑化濾波器(smoothing filter),其型態如下

或

B.泛用型權值平滑濾波器(generalized weighted smoothing filter)

 

一個3x3權值平滑濾波器例子

 

/*-------------------------------------------------------------*/

//          Convolution of image with mean filter

//

//                  陳慶瀚,2004.10.12

/*-------------------------------------------------------------*/

 

#include <fstream.h>

#include <math.h>

#include "array.h"

void mean_filter_design(f2D &h, int winsize);

void convolution(uc2D &ima1, f2D &h, uc2D &ima2);

void main()

{

   ifstream in("120x120.raw",ios::binary);

   ofstream out("bin.raw",ios::binary);

   uc2D ima1,ima2;

   ima1.Initialize(120,120);

   ima2.Initialize(120,120);

   char c;

   for(int i=0;i<ima2.nr;i++)for(int j=0;j<ima2.nc;j++)

   {

      in.get(c);ima1.m[i][j]=ima2.m[i][j]=c;

   }

 

   f2D h; //filter

   mean_filter_design(h, 3);

   convolution(ima1, h, ima2);

   for(int i=0;i<ima2.nr;i++)for(int j=0;j<ima2.nc;j++)

      out<<ima2.m[i][j];

}

 

void mean_filter_design(f2D &h, int winsize)

{

   h.Initialize(3,3); // Size initialize by 3X3

   for(int i=0;i<h.nr;i++)for(int j=0;j<h.nc;j++)

    h.m[i][j]=1.0/9.0; // mean filter's coefficients

}

 

void convolution(uc2D &ima1, f2D &h, uc2D &ima2)

{

    int i,j,ii,jj;

    int N=h.nr/2;

    int mac;

    for(i=N;i<ima1.nr-N;i++)for(j=N;j<ima1.nc-N;j++)

    {

        mac = 0;

        for(ii=-N;ii<=N;ii++)for(jj=-N;jj<=N;jj++)

        {

            mac = mac + ima1.m[i+ii][j+jj]*h.m[ii+N][jj+N];

        }

        ima2.m[i][j]=mac;

    }

}

 

C. 高斯平滑濾波器(Gaussian smoothing filter)

在一個二維空間,高斯分布的函數定義為:The Gaussian distribution in 1-D has the form:

Eqn:eqngaus2

假設高斯分布的平均值為0,而σ是高斯分布的標準差,如果σ=1,我們可以得到以下分布型態圖:

離散型態的高斯濾波器使用整數來逼近高斯函數,例如對於一個5x5的高斯濾波器(σ=1),我們可以得到以下的濾波器係數:

高斯濾波器是一個平滑化濾波器,平滑化程度是由標準差σ來控制,σ值越大,平滑程度越高,相對的,影像越模糊。

 

作業1、

設計一個Gaussian_filter( )函式,測試3個不同的σ值(σ=1, σ=2和σ=5)和兩種不同的濾波器大小(filtersize=5和filtersize=11)共六種組合,以mantis500x500.raw影像為對象,觀察不同濾波效果。

3. 用於平滑化影像的非線性濾波器

 

建立在濾波器範圍內的像素的統計排序(ranking)來決定濾波輸出,而非使用迴旋積:

中值濾波器(median filter):h = median{gk | k=1,2,…, M× M}

最大值濾波器(max filter):h = max{gk | k=1,2,…, M× M}

最小值濾波器(min filter):h = min{gk | k=1,2,…, M× M}

A. 中值濾波器

中值濾波器藉由每一個pixel鄰近pixel灰階值排序的中間值來取代該pixel的灰階值。中值的計算是先將鄰近pixel(濾波器視窗範圍)灰階值排序,在取出排序居中的值作為濾波器中間位置影像的像素值。例如

以下是使用bubble sort原理的中值濾波器的參考程式:

//-----------------------------------------------------

// Median filtering

// 2004.10.18 by CHEN Ching-Han

//-----------------------------------------------------

 

void Median(uc2D &InIm, uc2D &OutIm, int WinSize)

{

   int   r,c, y,x, i,j, n, Area;

   unsigned char  Buf;

   unsigned char  *Lst;

 

   n = (WinSize-1) >> 1;

   Area = (2*n+1) * (2*n+1);

   Lst = new char[Area];

   Int nr=InIm.nr, nc=InIm.nc;  

   for (r=0; r<nr; r++)for (c=0; c<nc; c++)OutIm[r][c] = 0;

   for (r=n; r<nr-n; r++)

   {

     for (c=n; c<nc-n; c++)

     {

       i=0;

       for (y=-n; y<=n; y++)for (x=-n; x<=n; x++)

{

Lst [i] = InIm [r+y] [c+x];i++;}

/*---------- bubble sort -------------------*/

       for (i=0; i<Area-1; i++)for (j=Area-1; i<j; j--)

if (Lst[j-1] > Lst[j])

       {

           Buf      = Lst[j-1];

           Lst[j-1] = Lst[j];

           Lst[j]   = Buf;

       }

       OutIm [r][c] = Lst [Area/2];  // get madian value

     }

   }

}

 

作業2:

請分別以7x7的median, max, min濾波器對mantis500x500.raw影像作空間濾波,定性比較三者的差異。

 

B. 參數可調的中值濾波器─加權中值濾波器(Weighted median filter)

作業3:

請參考median函式,設計一個WeightedMedian函式,並以3X3濾波器大小為例,執行加權中值濾波。使用不同的W來觀查加權中值濾波對finger300x300濾波效果。或假設W=。

進階作業3(option):使用隨機最佳化或演化最佳化方法找出一組W係數(整數),使得加權中值濾波器可以執行Edge enhancement的低通濾波。

 

4. 邊緣偵測濾波器(edge detection filter)

 

A. Sobel濾波器

Sobel濾波器使用空間一階導數來增強高頻的空間訊號,在影像中,這些高頻訊號通常代表較銳利的物體邊緣或線條特徵。

一維的一階導數:

二維的一階導數以梯度(gradient)表示:

 = Gx + Gy

Gx和Gy分別表示x和y方向的梯度分量,其離散濾波器形式可以表示如下:

梯度的大小(amplitude)是
Eqn:eqnrob1

或

Eqn:eqnrob2

至於方向(orientation)則為

Eqn:eqnsob3

作業4:

設計一個sobel濾波器函式,輸入11x11的整數值資料檔,輸出amplitude資料表和 orientation資料表,如下圖。另外(option)繪出orientation方向圖(4個方向即可)。

 

作業5:

類似sobel濾波器的一階導數濾波器還有Prewitt, Frei-Chen, Sharr等,其濾波器分別如下:

請設計這4個濾波器(包含Sobel)的程式,並用同一張影像比較4個濾波器的執行結果。

 

作業6:

有兩種被稱為羅盤濾波器(compass filter)的一階導數濾波器,就是下圖的Robinson濾波器和Kirsch濾波器,它們都使用一個濾波器視窗旋轉8個角度得到8組濾波器係數,這8個濾波器視窗分別和影像作迴旋積,8個迴旋積當中的最大值定義為edge的強度(amplitude),edge的方向(orientation)則是對應的濾波器視窗角度編號(0~7),角度0(即r0或k0)代表垂直edge,角度3代表水平edge。

 

 

 

 

 

Robinson濾波器

 

 

 

 

Kirsch濾波器

請設計這2個濾波器的程式,輸入一張影像,輸出amplitude影像和orientation影像(使用角度編號0~7,以圖形或資料表呈現均可)。

 

B.Laplacian濾波器

拉普拉斯濾波器是一種空間二階導數的運算子,它對於影像中快速變化的區域(包含edge)具有很大的強化作用,因此常結合Zero Crossing Detection(如下圖)作為邊緣偵測的工具。

一維的二階導數:

空間(二維)的二階導數:

Laplacian濾波器 L(x,y) 定義為:

逼近的離散Laplacian濾波器有以下三種型態:

Laplacian濾波器的使用也採標準的迴旋積方法。由於它對高頻訊號的高度敏感,同時也會強化高頻雜訊,所以應用拉普拉斯濾波器前常先進行平滑化濾波(如高斯平滑濾波),以便降低雜訊干擾。但高斯平滑濾波+Laplacian濾波需要雙重迴旋積運算,十分耗費計算資源,因此多數採用LoG (Laplacian of Gaussian)濾波器。

LoG (Laplacian of Gaussian)濾波器(zero mean及標準差σ) :

Eqn:eqnlog2

其函數曲面圖如下:

一個9x9離散濾波器係數例子如下( 標準差σ= 1.4):

LoG注意事項

The LoG operator calculates the second spatial derivative of an image. This means that in areas where the image has a constant intensity (i.e. where the intensity gradient is zero), the LoG response will be zero. In the vicinity of a change in intensity, however, the LoG response will be positive on the darker side, and negative on the lighter side. This means that at a reasonably sharp edge between two regions of uniform but different intensities, the LoG response will be:

作業7:

設計一個9x9 LoG (Laplacian of Gaussian)濾波器函式,對ant(gray)600x400影像進行edge增強濾波,(a)輸出LoG濾波後影像(請注意值域的normalization);(b)(option)輸出zero-crossing影像,也就是找出LoG濾波後影像的zero-crossing的pixel位置標示為0,其他標示為255。

 

5. UnShape濾波器

 

作業8(option):

設計一個UnShap濾波器函式,其中的Histogram Shrink模組,提供一個可調控的機制,例如Shrink範圍設定在[0,50]和[0,150]將產生不同的edge強化效果。