-1

ラプラシアンフィルター法を試しましたが、その式に何か問題があったと思います。


私の元の行列 (f)

  a b
a 1 2
b 3 4 

古い行列をパディングし、3x3 フィルター マスクを使用するために元の行列を複製することによる新しい行列 (g)

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


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 に答える