2010-03-31 91 views
5

我在實現LoG內核時遇到問題。我正在嘗試實現9x9核心,theta = 1.4,如鏈接http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm所示。高斯拉普拉斯算子

但是,我對配方本身有困難。如果有人能告訴我如何計算中心,即爲了在9x9內核中獲得-40而使用的x和y值,我們將不勝感激。

+0

你不能三重郵票的雙重印記。 – rook 2010-03-31 23:16:44

+0

請你詳細說明一下嗎? – Don 2010-03-31 23:41:20

+1

... x和y指的是一個像素的座標。 – 2010-04-01 04:15:21

回答

2

您不需要擔心公式 - 這只是用於生成係數。你只需要將這些9x9係數應用到你的圖像。

例(未測試的代碼!):

const int K = 9; 
const int K2 = K/2; 
const int NORM = 500; // constant for normalising filter gain 
const int coeffs[K][K] = { ... }; 
int in_image[M][N]; 
int out_image[M][N]; 

for (i = K2; i < M - K2; ++i) 
{ 
    for (j = K2; j < N - K2; ++j) 
    { 
     int term = 0; 
     for (di = -K2; di <= K2; ++di) 
     { 
      for (dj = -K2; dj <= K2; ++dj) 
      { 
       term += in_image[i + di][j + dj] * coeff[K2 + ii][K2 + jj]; 
      } 
     } 
     out_image = term/NORM; 
    } 
} 
+2

啊。但是我很好奇,並且很迷惑,使用該公式生成sigma = 1.4的9x9內核如何?對於我來說,我無法得到應用它的任何一種價值觀。 – Don 2010-04-01 07:47:10

+1

檢查它的最簡單的方法就是查看y = 0的情況並查看x的值。似乎有一個約爲483的比例因子。因此,如果你評估483 * LoG(x,y)爲y = 0,x = -4 .. + 4,你會發現你得到了正確的值。 (我只是用電子表格檢查過,看起來不錯。)如果你想更進一步,你當然可以評估內核的y = -4 .. + 4,x = -4 .. + 4,但我離開了作爲讀者的練習...... ;-) – 2010-04-01 08:06:06

+1

是的。你是對的。我剛剛在5分鐘前就明白了這一點。比例因子是。它像其他人一樣煩惱。非常感謝Paul,你的幫助非常感謝。 – Don 2010-04-01 08:10:53

1

最近我實現了日誌過濾器, 你唯一需要的是,公式和西格瑪作爲參數。 如果您需要固定大小的掩膜,您可以將過濾器掩膜值存儲在矩陣中並使用它,或者每次重新計算並創建所需的矩陣。 過濾器的大小取決於西格瑪值,如果超過該大小 - 它不會產生意義,因爲超出某個最大大小的其餘部分將使用該公式計算爲零。 因此,舉例來說,你那麼爲了計算過濾器本身作爲基體有一個過濾器尺寸= 9X9 ,你需要通過這個值運行公式 :

int halfsize = size/2;  
for (int x = -halfsize; x < halfsize; ++x) 
    for (int y = -halfsize; y < halfsize; ++y) 
     mask[x][y] = LoGFunction(x, y); 

類似的東西。 這也意味着過濾器大小必須是奇數值。 希望這有助於。 在你的情況, 大小= 9 差= 1.4 x和y的變化通過-4到使用點式(0,0)(它是濾波器的中心) 你得到的東西接近4 - 12

但是,如果您將西格瑪設置爲0.2986 您將得到接近-40的所需答案。 我也弄不明白爲什麼它被寫西格瑪值等於1.4 月BA我失去了一些東西.. 糾正我,如果我犯了一個錯誤,請