Program/OPEN_CV

[Open CV] 특징점 검출과 매칭 _ 특징점 검출

사막여유 2022. 6. 20. 08:14
728x90

2022.06.20 금일은 특징점 검출과 매칭 특징점검출에  관한 강의였다.

 

 

지난 시간 Harris , GFTT, FAST 코너에 대한 설명 중 문제점이 있었다.이동, 회전 변환에는 강인하지만 크기 변환에는 취약하다. 비교 영상에서 확대가 되거나 축소가 되면 코너가 아닌 것처럼 보일 수 있기 때문

작은 객체를 봤을때는 코너처럼 보이기는 하지만 크기를 키우거나 확대하면 엣지로 보일 수 있다.그래서 다양한 크기 관점에서 특징 검출이 필요하다. *  특징점(feature point) = 키포인트(keypoint) = 관심점(interest point)
 * 기술자(descriptor) = 특징벡터(feature vector)

 

* 특징 벡터(feature vector) : 패턴 인식에서는 인식 대상이 되는 객체가 특징으로 표현되고, 특징은 차원을 가진 벡터로 표현되는데 이를 특징벡터라고 한다.

 

크기 불변 특징점 검출 방법

 - ISFT,KAZE,AKAZE,ORB 등 다양한 특징점 검출 방법에서 스케일 스페이스 ( Scale-space ) , 이미지 피라미드 ( image
   pyramid ) 를 구성하여 크기 불변 특징점을 검출

 - 내부적으로 영상을 리사이즈 해가면서 초점이 안맞는거 같은 사진을 가상으로 만들어내서 ( Sclae-space  * 가우시안
   필터링을 포함한 리사이즈 기법) 반복적으로 검출이되는 코너를 정확하게 판단하는 검출방법

 

OpenCV 특징점 검출 클래스 : Feature2D 클래스와 파생 클래스

https://docs.opencv.org/4.x/d0/d13/classcv_1_1Feature2D.html

기존에는 xfeatureds2d.SIFT 와 cv2.xfeatures2d.SURF 알고리즘에는 특허가 걸려있어 상업적으로

이용할 시에는 특허사용료를 지불해야 했었는데 현재 SIFT 알고리즘은 특허가 만료되어

OpenCV 4.4 버젼 이후로는 무료로 사용할 수 있다.

 

위 방법들이 특징점을 검출하는 방법, 특징점을 기술하는 방법이 있는데특징점을 기술할 수 없는 알고리즘에 기술을 하라고 명령을 주면 프로그램이 죽을 수 있으니 조심해야한다.

 

위 클래스들을 사용하기 위해서는 각 객체를 생성해줘야한다.

cv2.KAZE_creat(, ...) ->retval

cv2.AKAZE_create(, ...)->retval

cv2.ORB_create(, ...)->retval

cv2.xfeatures2d.SIFT_create(, ...)->retval

이와같이 각각의 클래스들의 객체를 생성해주고 실제 특징점 검출 함수를 사용한다.


cv2.Feature2D.detect ( image, mask=None ) -> keypoints

image : 입력 영상

mask : 마스크 영상

keypoints :  검출된 특징점 정보. cv2.KeyPoint 객체의 리스트
                   ( pt, size, angle ) 


검출된 특징점 그리기 함수

cv2.drawKeypoints ( image, keypoints, outImage, color=None, flags = None ) -> outImage

image : 입력 영상

keypoints : 검출된 특징점 정보

outImage : 출력 영상

color : 특징점 표현 색상.
           기본값은 ( -1,-1,-1,-1 )이며, 이경우 임의의 색상으로 표현.

flags : 특징점 표현 방법
* cv2.DRAW_MATCHES_FLAGS_DEFUALT : 특징점 위치를 표현하는 작은 크기의 원
  cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS : keyPoints 에 있는 size, angle을 기반으로 하여 
                                                                                                      원으로 표현


 

 

KAZE

 

AKAZE

 

ORB

 

위 결과영상들을 보면 방향성이 없는 결과도 볼 수 있다. ( KAZE는 방향성분이 0도로 표현 )

좌측에 있는 영상은 정면을 찍은 사진이고 , 우측에 있는 영상은 기울인 상태로 측면에서 찍은 사진인데두개의 영상에서 공통적으로 찾아지는 코너들이 있다. ( 특징점 ) 위 영상은 특징점들이 너무 많아 확인하기는 어렵지만 이렇듯 2개의 영상을 다른 각도와 다른 방향에서 찍어도위 알고리즘들을 통해 고유 특징점들을 찾아내어 비교할 수 있다.

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90