-1

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


我的原始矩阵(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

过滤器(米)

  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) );


在对 g(c,c) 、 g(c,d) 、 g(d,c) 、 g (d,d) 执行过滤器后,我将矩阵裁剪为过滤后的这些过滤器指向新矩阵,但结果看起来真的很奇怪。(不像书中那样)。我尝试自己在matlab中做。

有一天可以帮我解决这个问题吗?非常感谢你

4

1 回答 1

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

这是否符合您的预期?

注意:上面的函数不是我将如何实现它,但它遵循您为清楚起见提供的示例。

于 2012-11-29T17:05:16.410 回答