Marr-Hildreth邊緣檢測器

松子茶發表於2013-04-18

介紹

20世紀70年代末,David Marr 嘗試將生物視覺融合進一個可以用於機器視覺的模型。Marr描述道“早期視覺處理的目標是對影象構建一個原始但豐富的描述,用於確定可視表面的反射系統和光強度,以及它們相對於觀察者的方向的距離”[1]。他把最低階別的描述稱為原始要素圖,其中最主要的組成部分是邊緣。

基本理論

根據[1]中,我們可以將一個邊緣檢測演算法描述為:

  • 1) 通過一個二維高斯函式對影象I進行卷積運算;
  • 2) 計算卷積影象的Lapace運算元,稱為 L ; 
  • 3)尋找邊緣畫素:在L中存在零交叉的畫素。通過高斯函式計算出來的卷積具有多種不同的標準偏差,而這些標準偏差可以結合為一個單獨的邊緣影象。

我們可以通過差分進行計算,面這個例子中順序並沒有關係,因些可以通過分析法計算高斯拉普拉斯運算元(Laplacian of the Gaussina,LoG),並且取樣這個函式。建立一個卷積掩模;可以對影象應用這個卷積掩模產生同樣的結果。在此,給出相應的程式碼:

float LoG (float x, float sigma){
     float x1;
     x1 = gauss (x, sigma);
     return (x*x-2*sigma*sigma)/(sigma*sigma*sigma*sigma) * x1;
}
在此需要識別出零交叉,標記出在這些位置處的畫素(設P),P處零交叉意味著某個方向兩個相對的相鄰畫素的值的符號不同。我們通過zero_cross函式LoG中的每一畫素進行執行。
void zero_cross (float **lapim, IMAGE im)

為了確保使用了多種不同的尺度,使用了兩個不同的高斯函式,並且將兩種尺度下具有零交叉的畫素選擇出來作為輸出邊緣畫素。當然,還可以使用兩個以上的高斯函式。在此貼出Marri演算法程式碼。

Marri演算法程式碼

void marr (float s, IMAGE im){
   int width;
   float **smx;
   int i,j,k,n;
   float **lgau, z;
 
   //Create a Gaussian and a derivative of Gaussian filter mask
   width = 3.35*s + 0.33;
   n = width+width + 1;
   printf ("Smoothing with a Gaussian of size %dx%d\n", n, n);
   lgau = f2d (n, n);
   for (i=0; i<n; i++)
      for (j=0; j<n; j++)
       lgau[i][j] = LoG (distance ((float)i, (float)j,(float)width, (float)width), s);

   //Convolution of source image with a Gaussian in X and Y directions 
	smx = f2d (im->info->nr, im->info->nc);
	printf ("Convolution with LoG:\n");
	convolution (im, lgau, n, n, smx, im->info->nr, im->info->nc);

  // Locate the zero crossings 
	printf ("Zero crossings:\n");
	zero_cross (smx, im);

  // Clear the boundary
	for (i=0; i<im->info->nr; i++){
	  for (j=0; j<=width; j++) im->data[i][j] = 0;
	  for (j=im->info->nc-width-1; j<im->info->nc; j++)
		im->data[i][j] = 0;
	}
	for (j=0; j<im->info->nc; j++){
	  for (i=0; i<= width; i++) im->data[i][j] = 0;
	  for (i=im->info->nr-width-1; i<im->info->nr; i++)
		im->data[i][j] = 0;
	}

	free(smx[0]); free(smx);
	free(lgau[0]); free(lgau);
}

測試結果分析

由於高斯濾波器的寬度原因,離影象邊緣小於一定值都沒有被處理,區域性性並不是特別好,而且邊緣並不總是很細。不論如何,Marri-Hildreth邊緣檢測器在低訊雜比的情況下要遠好於傳統的方法邊緣檢測。

參考文獻

[1] Theory of Edge Detection D. Marr; E. Hildreth, Proceedings of the Royal Society of London. Series B, Biological Sciences, Vol. 207, No. 1167. (Feb. 29, 1980), pp. 187-217.


關於Image Engineering & Computer Vision的更多討論與交流,敬請關注本博和新浪微博songzi_tea.


相關文章