본문 바로가기
IT/MATLAB

convolution 하는 이유 in template matching

by Jang HyunWoong 2014. 12. 19.

아래 자료는 http://webtk.blogspot.kr/2012/08/convolution-cross-correlation-template.html 에서 내가 필요로 하는 자료만 링크해온 것이다. 

 

Neural Network로 image matching 소스를 보는 중인데 convolution을 하는 이유를 쉽게 생각해보려고 한다. 

 

템플릿 매칭에서 왜 Convolution을 사용하는가?

 

몇가지 이유가 있지만 구현이 쉽고 빠른 속도에 있다고 생각한다. 


그에 따른 단점도 있다. 단순히 매칭이 되는 곳의 픽셀을 곱한 값이기 때문에 Noise 에서도 높은 값을 가질 수 있다. 

 

해결방법도 있지만 일단 쉽게 이해하기 위해 설명하지 않겠다. 

 

cross correlation은 template 영상(flip 되지 않는다)의 픽셀들을 input 영상 위에서 곱하고 더하는 결과가 된다. 즉, input 영상에서 template 영상이 정확히 매치되는 곳이 있다면, 해당 위치에서 cross correlation 값이 매우 커지게 된다.


아래는 간단한 matrix로 그 예를 보인다.






위와 같이 원본 영상에 해당하는 Matrix a가 있고, 오른 쪽 구석에 해당하는 template b가 있다고 하자. 그리고 이 둘의 convolution을 구해보면(MATLAB) 아래와 같다.


위에서 보다시피, convolution의 가장 큰 점이 왼쪽 상단 구석으로 잡히는 것을 알 수 있다. 그렇다면 cross correlation을 구하면 어떨까?

보다시피, 기대한 오른쪽 구석에서 가장 높은 값이 나오는 것을 알 수 있다.

여기서 잠깐 살펴볼 것은 convolution의 결과 크기가 input보다 큰 것이다. 이것은 convolution의 정의상 그 크기가 [두 matrix의 크기 합 - 1]이기 때문이다. 따라서 이 결과 상에서는 바로 template matching point를 정의할 수 없다. convolution 결과를 input 영상의 자표로 변환해야 하는데, 간단히 input 에서 padding 된 size 의 절반 만큼만 빼주면 된다. 즉, 그림으로 나타내면 아래의 범위가 Input 영상의 범위가 된다.



그리고, matching point(즉, maximum value가 나온 지점)은 template의 중심점이다. 따라서 matching 영역의 시작점을 구하기 위해서는 template size의 절반 만큼 씩 matching point에서 빼줘야 한다. 

 

conv2(...'same') 함수에 'same'이라는 옵션을 넣주면 위의 초록색 영역을 return해준다. 


 

위의 그림처럼 매칭되는 부분이 흰색으로 되는데 그부분이 높은 값을 가지고 있는 것이다.

거기에 템플릿 크기 만큼 템플릿을 만들어 주면 된다. 

 

​매칭되는 부분이 높은 값을 가진다는 것은 컨볼루션 했을 때 매칭이된다면 값이 높아지기 때문이다. 

반응형

'IT > MATLAB' 카테고리의 다른 글

mex .cpp file 셋업 문제  (0) 2015.03.04
ROI 방법  (0) 2014.12.19
4개의 클래스 분류 with a perceptron  (0) 2014.12.19
bwperim() 함수  (0) 2014.12.19
linspace(a, b, n) 함수  (0) 2014.12.19