拉普拉斯滤波公式

时间:2012-11-29 15:13:24

标签: matlab image-processing octave

我尝试了拉普拉斯滤波器方法,但我认为我的公式做错了。


我的原始矩阵(f)

  a b
a 1 2
b 3 4 

新矩阵(g)通过填充旧矩阵并复制原始矩阵以使用3x3滤镜

  a b c d e f
a 1 2 1 2 1 2
b 3 4 3 4 3 4
c 1 2 1 2 1 2
d 3 4 3 4 3 4
e 1 2 1 2 1 2
f 3 4 3 4 3 4

过滤器(m)

  a  b  c
a 0  1  0
b 1 -4  1
c 0  1  0

然后我从新矩阵的[c,c]开始。我在计算中做了什么
g(c,c)= g(c,c)+ -1 *(m(a,a)* g(b,b)+ m(a,b)* g(b,c)+ m(a,c)* g(b,d)+ m(b,a)* g(c,b)+ m(b,b)* g(c,c)+ m(b,c)* g (c,d)+ m(c,a)* g(d,b)+ m(c,b)* g(d,c)+ m(c,c)* g(d,d)); < / p>


对g(c,c),g(c,d),g(d,c),g(d,d)进行滤波后,我将矩阵裁剪为滤波后的滤波点新的矩阵,但结果看起来很奇怪。 (不像书中那样)。我自己尝试在matlab中做这件事
总有一天可以帮助我吗?非常感谢你

1 个答案:

答案 0 :(得分:3)

为了获得与使用conv2和filter2的Nasser方法相同的结果(由于您的过滤器具有对称行,它们只是相同的),首先您不能就地执行此操作。以前过滤的条目会搞乱后续计算。其次,我不确定g(c,c) + -1*的位置.G(c,c)的正常过滤器计算如下:

r(c,c) = m(a,a)*g(b,b) + m(a,b)*g(b,c) + m(a,c)*g(b,d) +...
         m(b,a)*g(c,b) + m(b,b)*g(c,c) + m(b,c)*g(c,d) +...
         m(c,a)*g(d,b) + m(c,b)*g(d,c) + m(c,c)*g(d,d);

其中r是结果矩阵。该方法(对原始矩阵中的其他3个值重复)给出:

r =
   c  d
c  6  2
d -2 -6

<强>更新

使用:

A =
    1     2     1     2     1     2
    3     4     3     4     3     4
    1     2     1     2     1     2
    3     4     3     4     3     4
    1     2     1     2     1     2
    3     4     3     4     3     4

mask =
    0     1     0
    1    -4     1
    0     1     0

imfilter给出:

imfilter(A,mask)
ans =
    1    -2     3    -2     3    -3
   -6    -6    -2    -6    -2    -9
    4     2     6     2     6     1
   -6    -6    -2    -6    -2    -9
    4     2     6     2     6     1
   -7    -8    -3    -8    -3   -11

上面建议的功能,

for i=1:2
    for j=1:2
        r(i,j) = m(1,1)*g(i+1,j+1) + m(1,2)*g(i+1,j+2) + m(1,3)*g(i+1,j+3) +...
                 m(2,1)*g(i+2,j+1) + m(2,2)*g(i+2,j+2) + m(2,3)*g(i+2,j+3) +...
                 m(3,1)*g(i+3,j+1) + m(3,2)*g(i+3,j+2) + m(3,3)*g(i+3,j+3);
    end
end

给出:

ans =
     6     2
    -2    -6

这与您期望看到的相符吗?

注意:上面的函数不是我实现它的方式,但它遵循你给出的清晰的例子。