我在实现LoG内核时遇到问题。我正在尝试实现9x9核心,theta = 1.4,如链接http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm所示。高斯拉普拉斯算子
但是,我对配方本身有困难。如果有人能告诉我如何计算中心,即为了在9x9内核中获得-40而使用的x和y值,我们将不胜感激。
我在实现LoG内核时遇到问题。我正在尝试实现9x9核心,theta = 1.4,如链接http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm所示。高斯拉普拉斯算子
但是,我对配方本身有困难。如果有人能告诉我如何计算中心,即为了在9x9内核中获得-40而使用的x和y值,我们将不胜感激。
您不需要担心公式 - 这只是用于生成系数。你只需要将这些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;
}
}
啊。但是我很好奇,并且很迷惑,使用该公式生成sigma = 1.4的9x9内核如何?对于我来说,我无法得到应用它的任何一种价值观。 – Don 2010-04-01 07:47:10
检查它的最简单的方法就是查看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
是的。你是对的。我刚刚在5分钟前就明白了这一点。比例因子是。它像其他人一样烦恼。非常感谢Paul,你的帮助非常感谢。 – Don 2010-04-01 08:10:53
最近我实现了日志过滤器, 你唯一需要的是,公式和西格玛作为参数。 如果您需要固定大小的掩膜,您可以将过滤器掩膜值存储在矩阵中并使用它,或者每次重新计算并创建所需的矩阵。 过滤器的大小取决于西格玛值,如果超过该大小 - 它不会产生意义,因为超出某个最大大小的其余部分将使用该公式计算为零。 因此,举例来说,你那么为了计算过滤器本身作为基体有一个过滤器尺寸= 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我失去了一些东西.. 纠正我,如果我犯了一个错误,请
你不能三重邮票的双重印记。 – rook 2010-03-31 23:16:44
请你详细说明一下吗? – Don 2010-03-31 23:41:20
... x和y指的是一个像素的坐标。 – 2010-04-01 04:15:21