본문 바로가기
IT/영상 처리

[Python_OpenCV] Feature Matching (이미지 특성 매칭)

by 빨강자몽 2018. 7. 22.

이미지 특성 매칭이란 이미지의 특징들을 찾아 유사한 특징점들을 연결하는 것을 말한다.


밑에서 동그란 점들은 각 이미지에서 찾은 특징들을 의미하고 선은 특정 값이상의 유사도를 가지는 특징쌍을 연결한것을 의미한다.


- 이미지 매칭 결과



- 코드

import numpy as np

import cv2



img1 =cv2.imread("1.jpg",cv2.IMREAD_GRAYSCALE)

img2 =cv2.imread("eye.jpg",cv2.IMREAD_GRAYSCALE)

img1 = cv2.resize(img1, None, fx=0.1, fy=0.1, interpolation=cv2.INTER_CUBIC)

img2 = cv2.resize(img2, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_CUBIC)

res = None



orb=cv2.ORB_create()
 kp1, des1 = orb.detectAndCompute(img1,None)
 kp2, des2 = orb.detectAndCompute(img2,None)



bf= cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) 
matches=bf.match(des1,des2)



matches = sorted(matches, key=lambda x:x.distance)
 res=cv2.drawMatches(img1,kp1,img2,kp2,matches[:5],res,flags=0)


cv2.imshow("Feature Matching",res)
 cv2.waitKey(0)
 cv2.destroyAllWindows()


- 코드 분석


orb=cv2.ORB_create()


- 이미지 특성 매칭에는 여러 방식이 있다 SIFT, SURF, BRIEF, ORB.... 등등 써봤을때 성능은 ORB가 좋은것 같다.




matches = sorted(matches, key=lambda x:x.distance)


res=cv2.drawMatches(img1,kp1,img2,kp2,matches[:5],res,flags=0)


- 정렬하고 유사한 특징들을 연결한다.

- matches[:5] : 가장 유사한 특징 쌍 부터 5개의 쌍을 연결한다.


- 이미지 매칭 하면서 느낀점


이미지 특성 매칭의 경우 색상의 차이는 특징이 되지 않는다.

색상이 아닌 선분의 굴곡등과 같은 특징이 많아야 한다.

회전, 이미지 크기 등과 같은 변화에 강하다.