我在实现LoG内核时遇到了问题。我正在尝试实现9x9内核,theta = 1.4,如此链接http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm所示。
然而,我对公式本身有困难。如果有人能告诉我如何计算中心,即在9x9内核中使用什么x和y值才能得到-40,那就太感谢了。
发布于 2010-04-01 14:45:47
您不需要担心公式-它只用于生成系数。您只需要将这些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;
}
}发布于 2010-04-02 21:53:17
最近我实现了LoG过滤器,你唯一需要做的就是将公式和sigma作为参数。如果您需要固定大小的掩码,您可以将滤镜掩码值存储在矩阵中并使用它,或者每次重新计算它并创建所需的矩阵。过滤器的大小取决于sigma值,如果使用的大小超过这个值-它就没有意义,因为超出某个最大值的其余部分会使用该公式计算为零。因此,例如,你得到一个过滤器大小= 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);差不多吧。它还意味着过滤器大小必须是奇数值。希望这能有所帮助。在你的例子中,size =9 sigma = 1.4 x,y在-4到4之间变化。在(0,0)点(它是滤波器的中心)使用公式,你可以得到接近-12的值。
但是如果你把sigma设为0.2986,你会得到接近于-40的答案。我也不明白为什么写着sigma值等于1.4,我漏掉了一些东西。如果我弄错了,请纠正我
https://stackoverflow.com/questions/2556958
复制相似问题