2012-11-29 4 views
-1

나는 Laplacian 필터 방법을 시도했지만 공식에 문제가 있다고 생각합니다.Laplacian Filter Formula


내 원래 매트릭스 (F) 이전 매트릭스 패딩 × 3 필터를 사용하기위한 origial 하나 복제하여

a b 
a 1 2 
b 3 4 

새로운 매트릭스 (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, b) + g (c, c) + m (b, c) (c, d) + m (c, c) * g (d, b) 디));


g (c, c), g (c, d), g (d, c), g (d, d)에 필터를 수행 한 후에 필터를 적용한 것처럼 매트릭스,하지만 결과는 정말 이상해. (책에서와 같이). 나는 혼자서 MATLAB에서 그것을 시도했다.

언젠가이 문제를 해결할 수 있습니까? 고맙습니다.

+0

2x2 이미지에 3x3 필터를 적용하는 것은 실제로 의미가 없습니다. 결과는 여러 가지 방법이있는 가장자리를 처리하는 방법에 의해 거의 완전히 지배됩니다. 보다 합리적인 크기의 이미지 (예 : 8x8. –

+0

방금 ​​간단한 목적으로 작성했습니다. – Xitrum

답변

3

conv2와 filter2 (필터에 대칭 행이 있기 때문에 동일 함)를 사용하여 Nasser의 방법과 동일한 결과를 얻으려면 먼저 내부에서 수행 할 수 없습니다. 이전에 필터링 된 항목은 후속 계산을 엉망으로 만듭니다. . 둘째, 나는 그 g(c,c) + -1*이 들어오는 곳 확실하지 않다 g에 대한 일반 필터 계산 (C, C)이 될 것입니다 :

r은 결과 행렬입니다
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); 

. (원래 매트릭스의 다른 3 개 값의 반복)이 방법을 준다 : 사용

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

UPDATE

:

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 

은 당신이보고 기대이 일치합니까?

참고 : 위의 함수는 구현 방법이 아니지만 명확성을 위해 제공 한 예제를 따릅니다.

+0

g (c, c) + -1 *은 라플라스 식 (Laplacian formula)에서 나온 것으로 imfilter는 위에서 봤던 것과 비슷하지만 잘못된 결과를 가져옵니다. – Xitrum

+0

@Aptos What 결과는 예상하셨습니까? 결과는 무엇입니까? – beaker

+0

위의 원래 행렬과 마스크로 imfilter를 사용할 때, ans는 [3,1, -1, -3]이고, 위의 함수를 적용하면 결과는 [0,0,0,255]입니다. – Xitrum