2013-05-15 124 views
0

我使用的,什麼是在http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm描述的組合http://wwwmath.tau.ac.il/~turkel/notes/Maini.pdf縮放拉普拉斯檢測

簡而言之利用高斯的拉普拉斯邊緣檢測,我用這個公式計算:

for(int i = -(kernelSize/2); i<=(kernelSize/2); i++) 
    { 

     for(int j = -(kernelSize/2); j<=(kernelSize/2); j++) 
     { 

      double L_xy = -1/(Math.PI * Math.pow(sigma,4))*(1 - ((Math.pow(i,2) + Math.pow(j,2))/(2*Math.pow(sigma,2))))*Math.exp(-((Math.pow(i,2) + Math.pow(j,2))/(2*Math.pow(sigma,2)))); 
      L_xy*=426.3; 
     } 

    } 

並使用L_xy變量來構建LoG內核。

問題是,當圖像尺寸較大時,應用相同的內核會使濾波器對噪聲更敏感。邊緣清晰度也不相同。

讓我把一個例子這裏...

假設我們已經得到了這一形象:Original image

適馬= 0.9的值,以及5×5矩陣的一個480×內核大小該圖像的264像素版本中,我們得到以下輸出:

Small Image

然而,如果我們使用上的1920×1080個像素版本此圖像的(相同的西格瑪值和核大小)相同的值,我們得到像這樣:enter image description here

[這兩個圖像是縮小版本的一個更大的圖像。縮小比例是使用照片編輯器完成的,這意味着圖像中包含的數據不完全相似。但是,至少它們應該非常接近。]

鑑於較大的圖像大約是較小圖像的4倍......我還嘗試通過4倍(西格瑪* = 4)和輸出是......你猜對了,一個黑色的畫布。

請幫助我瞭解如何實現一個LoG邊緣檢測器,即使輸入信號放大或縮小(將給出縮放比例因子),它也能從輸入信號中找到相同的特徵。

回答

2

看着你的圖片,我想你正在使用24位RGB。當你增加西格瑪時,你的濾波器的響應相應地減弱,因此你在具有較大內核的較大圖像中得到的值接近於零,這些值被截斷或接近零,以至於顯示器無法區分。

爲了使各不同尺度的差異可比性,你應該使用尺度空間微分算子(Lindeberg等):

Scale-space differential

從本質上講,微分算子被應用到高斯核函數(G_{\sigma} )以及結果(或者卷積核;無論如何它只是一個標量乘數)由\sigma^{\gamma}縮放。這裏L是輸入圖像,而LoG是高斯拉普拉斯圖像。

當差的順序是2,\gamma通常設置爲2

那麼你應該得到兩個圖像非常相似幅度。

來源:

[1] Lindeberg: 「尺度空間理論在計算機視覺」 1993年

[2] FRANGI等。 「多尺度血管增強過濾」1998

+0

謝謝。是的你是對的,這實際上是32位RGB-alpha。所以,你說我應該縮放西格瑪^ 2。你能否澄清一下\ partial \ 2 \ \ partial_ {x_m x_n}這個詞。從我從http://en.wikipedia.org/wiki/Scale_space_implementation瞭解的內容....我只需要擴大高斯內核?多一點解釋會有所幫助。任何鏈接到託尼Lindeberg參考將不勝感激。 – metsburg

+0

是的,你是對的,你只需要調整高斯內核。我修改了我的答案,希望現在更清楚。 – Vaaksiainen