OpenCV 템플릿 매칭

Lily·2023년 10월 27일
0

TIL

목록 보기
15/21

템플릿 매칭

  • 입력 영상에서 (작은 크기의) 부분 영상 위치를 찾는 기법
  • 템플릿(template): 찾을 대상이 되는 작은 영상
  • 템플릿 매칭 수행 과정: 템플릿을 슬라이딩 윈도우로 계속 진행하면서 유사도/비유사도를 구한 후 최대값/최소값 선정
void matchTemplate(InputArray image, inputArrag templ,
				   OutputArray result, int method,
                   InputArray mask=noArray());
  • image : (입력) 입력 영상, 8비트 또는 32비트

  • templ : (입력) 템플릿 영상, image보다 작거나 같은 크기, 같은 타입

  • result : (출력) 비교 결과를 저장할 행렬, 1채널 32비트 실수형

    • image의 크기가 W x H 이고, templ의 크기가 w x h 이면 result 크기는 (W-w+1) x (H-h+1) 임
  • method : 비교 방법 (TM_: template matching)

    comparisiondescriptioncheck point
    TM_SQDIFF / TM_SQDIFF_NORMEDSum of squared difference완전히 같으면 0, 다르면 값이 커짐
    TM_CCORR / TM_CCORR_NORMED(Cross) Correlation같으면 큰 값, 다르면 작은 값
    TM_CCOEFF / TM_CCOEFF_NORMEDCorrelation Coefficient평균 보정 후(영상 - 평균: 밝기 성분 미리 보정) Correlation 연산

업로드중..

  • mask : 마스크 영상

템플릿 매칭 비교 방법 분석

  • Sum of Squared Difference:
    • 두 이미지 픽셀 위치가 같은 패턴이면 낮은 수치를 보임
    • 두 이미지 픽셀 위치가 다른 패턴이면 높은 수치를 보임
    • 튀는 값은 높은 수치를 나타내므로, outlier에 대하여 (cross) correlation 보다는 완건성을 지님
  • Correlation
    • 두 이미지 픽셀 위치가 같은 패턴이면 높은 수치를 보임
    • 두 이미지 픽셀 위치가 다른 패턴이면 낮은 수치를 보임
    • 튀는 값도 높은 수치를 나타내므로, oultier에 대해 취약함
    • 특히 (255, 255, 255)인 value를 가질 경우, 그쪽으로 템플릿 매칭이 될 가능성이 높음
    • 튀는 값을 대비해 normalize 하면 그나마 변별력이 생김
  • Correlation coefficient
    • 처음부터 평균을 이용해 normalize 해서 밝기 보정을 하므로, 비교할 이미지들의 픽셀 scale이 거의 같아지고, 이를 토대로 좀 더 쉽게 같은 패턴인지, 다른 패턴인지를 판별 가능함 (계산된 수치 값이 전반적으로 줄어듬)
    • _NORMED 기능을 추가했을 때, 완전 일치는 1, 상호 연관성이 없으면 0, 역일치는 -1로 수치값을 표현할 수 있음
    • _NORMED 기능을 추가했을 때가 가장 정확하지만, 연산량이 많아진다는 약점이 있음

입력 영상에 변형이 있다면?

  • Noise: Gaussian Filter 사용해서 보완 가능
  • Brightness/contrast: Normalization 사용하면 보완 가능
  • Resize: 템플릿 이미지 스케일과 원본 이미지 스케일이 다르면, 잘 못찾을 수 있음
  • Rotation: 결과 수치가 낮은 것으로 확인되며, 회전에 취약함

\\
\\

번외: 서브픽셀 정확도 엣지 위치 검출

  • 실수 단위 엣지 위치 검출하기

    • 1차 미분의 최댓값 또는 최솟값 위치의 주변 3개 픽셀 위치에서의 미분값을 이용하여 2차 다항식 근사화
    • 근사화된 2차 다항식의 최댓값 또는 최솟값 위치를 찾음
      • 즉 세 점을 2차식 그래프로 그림그릴 때 그래디언트가 0인 위치를 찾음
  • (1,x),(0,y),(1,z)(-1, x), (0, y), (1, z) 에 대하여 2차식 y=ax2+bx+cy=ax^2+bx+c 에 대입해서 극값을 구하면,

    {X=ab+cY=cZ=a+b+c{a=X2Y+Z2b=ZX2c=Y\begin{cases}X=a-b+c \\Y=c \\Z=a+b+c \end{cases} \Longrightarrow \begin{cases}a=\displaystyle \frac{X-2Y+Z}{2} \\b=\displaystyle \frac{Z-X}{2} \\c=Y \end{cases}

    함수 y=ax2+bx+cy=ax^2+bx+cx=b2a=XZ2X4Y+2Zx=-\displaystyle \frac{b}{2a}=\displaystyle \frac{X-Z}{2X-4Y+2Z} 에서 최댓값(최솟값)을 가짐

\\
\\

References

  • 자율주행 데브코스 황선규 강사님
profile
First Attempt In Learning

0개의 댓글