아래 자료는 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 값이 매우 커지게 된다.
위에서 보다시피, convolution의 가장 큰 점이 왼쪽 상단 구석으로 잡히는 것을 알 수 있다. 그렇다면 cross correlation을 구하면 어떨까?
그리고, 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 |