2010-03-31 89 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我失去了一些东西.. 纠正我,如果我犯了一个错误,请