[OpenCV] Template와 Core.MinMaxLocResult란 무엇인가

프로그래밍/그 외2018. 4. 14. 22:40

안녕하세요. 개발자 드리머즈입니다.


Core 클래스의 MinMaxLocReuslt클래스에 대해 알아보겠습니다.


그 전에 먼저 아래의 공식 사이트 튜토리얼?에서 Template Matching에 대해 알아봐야 합니다.


https://github.com/opencv/opencv/blob/89b6e68e1eea83262ef79c2110df111dbc089b97/doc/js_tutorials/js_imgproc/js_template_matching/js_template_matching.markdown



Template Matching


Goals

  • To find objects in an image using Template Matching
  • You will learn these functions : cv.matchTemplate()cv.minMaxLoc()

Theory

Template Matching is a method for searching and finding the location of a template image in a larger image. OpenCV comes with a function cv.matchTemplate() for this purpose. It simply slides the template image over the input image (as in 2D convolution) and compares the template and patch of input image under the template image. Several comparison methods are implemented in OpenCV. (You can check docs for more details). It returns a grayscale image, where each pixel denotes how much does the neighbourhood of that pixel match with template.

If input image is of size (WxH) and template image is of size (wxh), output image will have a size of (W-w+1, H-h+1). Once you got the result, you can use cv.minMaxLoc() function to find where is the maximum/minimum value. Take it as the top-left corner of rectangle and take (w,h) as width and height of the rectangle. That rectangle is your region of template.

@note If you are using cv.TM_SQDIFF as comparison method, minimum value gives the best match.


Template Matching in OpenCV

We use the function: cv.matchTemplate (image, templ, result, method, mask = new cv.Mat())

@param image image where the search is running. It must be 8-bit or 32-bit floating-point. @param templ searched template. It must be not greater than the source image and have the same data type. @param result map of comparison results. It must be single-channel 32-bit floating-point. @param method parameter specifying the comparison method(see cv.TemplateMatchModes). @param mask mask of searched template. It must have the same datatype and size with templ. It is not set by default.


이론 부분만 번역을 해보면 아래와 같습니다.


이론

Template Matching이란 원본 이미지에서 template image(견본 이미지)를 검색해 그 위치(location)을 찾는 방법입니다. OpenCV를 이를 위해 cv.matchTemplate()함수를 제공합니다. 이 함수는 간단하게 원본 이미지 위에 견본 이미지를 움직여가면서 견본 이미지와 견본 이미지 밑의 원본 이미지 부분을 비교합니다. 몇 가지의 비교 함수들이 OpenCV에 구현되어 있습니다.(docs에서 자세한 내용 확인 가능) 이 함수는 grayscale(흑백) 이미지를 반환하는데, 여기서 각각의 픽셀은 그 픽셀의 주위가 얼마나 견본과 일치하는지 나타냅니다.


만약 원본 이미지의 크기가 WxH이고 견본 이미지의 크기가 wxh라면, 출력 이미지는 (W-w+1, H-h+1)의 크기를 가집니다. 결과를 얻고 난 이후에 최고값과 최저값의 위치를 찾기 위해 cv.minMaxLoc() 함수를 사용할 수 있습니다. 이 함수가 반환하는 것을 사각형 왼쪽 상단의 코너로 (w, h)를 사각형의 폭과 높이로 사용하세요. 그 사각형이 견본의 영역입니다.


주의 : 만약 cv.TM_SQdIFF를 비교 함수로 사용중이라면, 최저값이 가장 일치하는 부분을 의미합니다.


음.. Template 부분은 아직 확실하게 다 이해가 되지는 않네요.


https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html


위의 설명도 봐야할 것 같습니다.


minMaxLoc()함수는 간단하게 주어진 input의 최소값(min)과 최대값(max)이 있는 위치(location)를 찾는데 사용되는 것 같습니다.


작성자

Posted by 드리머즈

관련 글

댓글 영역