방법은 강아지 그림을 움직여 가면서 비교해 보면 된다.
왼쪽에서 오른쪽으로 그리고 위에서 아래쪽으로 한 픽셀씩 움직이면서 각 픽셀의 빼기나 곱하기 계산을 한다. 그 결과를 배열로 저장해서 보면 아래 그림처럼 가장 값이 큰(밝은) 부분이 가장 가능성이 높은 부분임을 알 수 있다.
matchTemplate
void matchTemplate(InputArray image, InputArray templ, OutputArray result, int method)
image안에서 x, y로 한칸씩 이동하면서 templ을 겹쳐 놓고 각 셀의 차이나 곱의 합을 계산해서 result배열을 만들어서 돌려 준다. 이때 image의 크기는 templ의 크기보다 커야 하고 계산 방식은 method로 정해진다.
CV_TM_SQDIFF ... 각 픽셀의 차이의 합
CV_TM_SQDIFF_NORMED ... CV_TM_SQDIFF / sqrt(각 픽셀의 제곱의 곱)
CV_TM_CCORR ... 각 픽셀의 곱의 합
CV_TM_CCORR_NORMED ... CV_TM_CCORR / sqrt(각 픽셀의 제곱의 곱)
CV_TM_CCOEFF
CV_TM_CCOEFF_NORMED ... CV_TM_CCOEFF / sqrt(각 픽셀의 제곱의 곱)
normalize
void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, intdtype=-1, InputArray mask=noArray() )
normType=NORM_MINMAX일때 src를 alpha(최소값)과 beta(최대값) 사이의 값으로 환산한다.
minMaxLoc
CV_TM_SQDIFF_NORMED ... CV_TM_SQDIFF / sqrt(각 픽셀의 제곱의 곱)
CV_TM_CCORR ... 각 픽셀의 곱의 합
CV_TM_CCORR_NORMED ... CV_TM_CCORR / sqrt(각 픽셀의 제곱의 곱)
CV_TM_CCOEFF
CV_TM_CCOEFF_NORMED ... CV_TM_CCOEFF / sqrt(각 픽셀의 제곱의 곱)
normalize
void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, intdtype=-1, InputArray mask=noArray() )
normType=NORM_MINMAX일때 src를 alpha(최소값)과 beta(최대값) 사이의 값으로 환산한다.
minMaxLoc
void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, InputArraymask=noArray())
src배열에서 최소와 최대값을 찾은 후 그 값과 위치를 돌려 준다.
http://stackoverflow.com/questions/11541154/checking-images-for-similarity-with-opencv
http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
http://stackoverflow.com/questions/11541154/checking-images-for-similarity-with-opencv
http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html
댓글 없음 :
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.