OpenCV / / 2022. 11. 16. 14:05

OpenCV - 디스크립터(Descriptor)

'''디스크립터 
-ORB 
oriented BRIEF 
- FAST + BRIEF + Harris corner detector 
- SIFT, SURF를 대체하기 위해 개발되었고 속도 빠름 
- 회전 불변성
특징점 검출 
- 피라미드 FAST 혹은, Harris 응답 사용하여 특징 선택
- 1차 모멘트 이용 방향 검색 

디스크립터 계산 
-BRIEF 사용 
-->특징점에 대한 디스크립터로 특징점 검출 방법은 제공하지 않음 
-->FAST처럼 어두운 픽셀 , 밝은 픽셀, 유사한 픽셀로 분류

'''

 

<ORB> 

src = cv2.imread(path +'chessBoard.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(5,5),0.0)

orbF = cv2.ORB_create()
orbF1 = cv2.ORB_create(scoreType=1)

kp = orbF.detect(gray)
kp1 = orbF1.detect(gray)
dst = cv2.drawKeypoints(gray,kp,None,color=(0,0,255))
dst1 = cv2.drawKeypoints(gray, kp1, None, color=(0,0,255))
print('len(kp)=',len(kp))
print('len(kp1)=',len(kp1))
cv2.imshow('gftt', dst)
cv2.imshow('gftt1',dst1)
cv2.waitKey()

 

'''brisk'''
src = cv2.imread(path +'chessBoard.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
gray1 = cv2.GaussianBlur(gray,(5,5),0.0)

briskF = cv2.ORB_create()

kp = briskF.detect(gray)
kp1 = briskF.detect(gray1)
dst = cv2.drawKeypoints(gray,kp,None,color=(0,0,255))
dst1 = cv2.drawKeypoints(gray, kp1, None, color=(0,0,255))
print('len(kp)=',len(kp))
print('len(kp1)=',len(kp1))
cv2.imshow('brisk', dst)
cv2.imshow('brisk1',dst1)
cv2.waitKey()

'''디스크립터

-KAZE, AKAZE
-> 기존의 스케일 공간 특징점 검출 방법의 한계
-->가우시안 피라미드로 인한 특징점 약화
-->비선형 확산 필터링 사용

-물체 경계 유지

-특징점 검출 정확도 높임

-속도는 SIFT와 비슷하고 SURF보다 느림

-AKAZE는 FED로 비선형 공간에서 피라미드 구축 시 속도 개선

-디스크립터 : 64비트 정규화 벡터


--SIFT
harris corner detection의 한계
-코너는 회전 불변의 특징점
-스케일 변환에 대응을 못함

--> 크기가 다른 두 객체 영상에서 코너 점을 이용하여 서로 같은 위치를 찾는 것은 한계가 있음

크기 불변 특징 변환 등장

DOG
- 인접한 가우시안 블러링의 차영상 이용
- SIFT는 DoG영상을 고려한 지역 극값 위치 특징점 사용
- 엣지 성분이 강하거나 명암비가 낮은 지점은 특징점에서 제외



'''
src = cv2.imread(path +'chessBoard.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
gray1 = cv2.GaussianBlur(gray,(5,5),0.0)

siftF = cv2.ORB_create()

kp = briskF.detect(gray)
#kp1 = briskF.detect(gray1)
dst = cv2.drawKeypoints(gray,kp,None,color=(0,0,255))
#dst1 = cv2.drawKeypoints(gray, kp1, None, color=(0,0,255))
print('len(kp)=',len(kp))
#print('len(kp1)=',len(kp1))
cv2.imshow('sift', dst)
#cv2.imshow('brisk1',dst1)
cv2.waitKey()

 

 

'OpenCV' 카테고리의 다른 글

OpenCV- 얼굴 라이브 인식  (0) 2022.11.22
OpenCV - OBJECT DETECTION  (0) 2022.11.21
OpenCV - CircleGrid  (0) 2022.11.15
OpenCV - 체스보드 패턴 코너점 검출  (0) 2022.11.15
OpenCV - 해리스 코너 ,패스트 코너 검출  (0) 2022.11.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유