본문 바로가기

SURF/LOG,DOG,Gaussian filter

LoG (Laplacian of Gaussian)

일단 먼저 LoG는 가우시안 함수를 Gradient취한 식 이라고 쉽게 말할 수 있다. 그렇다면, LoG가 영상처리에 왜 자주 등장하는지 알아보자.

Gaussian필터에 대한 설명은  이곳 에서 설명하였다. 일반적으로 영상에서 특징을 추출하기 위해서는 영상의 edge나 픽셀의 변화율을 특징으로 잡는 경우가 가장 흔하다.
 픽셀의 변화율을 얻고자 할 경우에는 잘 알겠지만 영상을 미분하게 된다. 그런데 원본 영상이 노이즈가 없이 깨끗한 이미지라면 상관 없지만, 대부분 깨끗한 이미지가 아니며, 깨끗한 이미지라고 하더라도 영상의 특징으로 잡기에는 너무 특징이 없는 자잘한 픽셀로 표현되는 영상 값들이 있다. 이러한 놈들을 날려주기 위해서 먼저 Gaussian필터를 이용하여 적당히 부드럽게 만든 후에 미분을 하게 된다.
 영상에서 Gaussian필터를 Convolution한 후에 미분 영상을 얻기 위해서는 x축과 y축에 각각 미분을 취해야 하는데 이는 곧 해당 영상데이터를 2차 편비분한다는 의미이다. 백터로 본다면 Gradient를 취하는 것을 의미하는데, 영상을 벡터로 해석하는 것이 일반적임으로 Gradient를 취한다고 이야기 하는 것이 더 좋을 것이다. 

 가우시안 함수는 아래와 같고... 


이 함수와 이미지 값 f(x,y)를 Convolution하면 아래의 식으로 나타낼 수 있다.


위 식에서 *는 곱셈이 아니라  Convolution을 의미한다.

얼마나 멋진 일인지......결과적으로 Gaussian과 해당 영상을 Convolution해서 그 결과의 Gradient를 구할 필요 없이 LoG와 영상을 Convolution하면 우리가 원하는 결과값이 나온다는 의미이다. 

----------------------------------------------------------------------
참고로 Gaussian의 x에 대한 1차 편미분과 2차 편미분, 그리고 Gradient의 값과 메트랩 코드는 아래와 같다. 해당 수식에 대한 자세한 사항은 아래의 참조 링크를 보기 바란다. 

clf
x = -4:0.1:4;
y = -4:0.1:4;
[x,y] = meshgrid(x,y);
sigma = 1;

% first order derivation by x
first = -(x/sigma^2).* (exp(-(x.^2+y.^2)/(2*sigma^2)));
subplot(1,3,1); surf(x,y,first);

%second order derivation by x
second = ((x.^2-sigma^2)/sigma^4).* (exp(-(x.^2+y.^2)/(2*sigma^2)));
subplot(1,3,2); surf(x,y,second);

%divergence by x and y
div = ((x.^2 + y.^2 - sigma^2)/sigma^4).* (exp(-(x.^2+y.^2)/(2*sigma^2)));
subplot(1,3,3); surf(x,y,div);


---------------------------------------------------------------------- 

** 이 페이지는 틀린 내용이 많이 있음.
    빠른 시일내에 수정할 것~!!!


[참조]
http://fourier.eng.hmc.edu/e161/lectures/gradient/node10.html