OpenCV / / 2022. 11. 15. 12:34

OpenCV - 해리스 코너 ,패스트 코너 검출

< 해리스 코너 검출 방법 >

->코너 검출 연구는, 1970년대 후반부터 활발하게 진행 

->1988년 해리스가 개발한 코너 검출 방법은 코너 점 구분을 위한 기본적인
아이디어를 수학적으로 잘 정의하였다는 점에서 큰 의미가 있음 

영상의 특정위치 (x,y)에서 △x와 △y 만큼 떨어진 픽셀과의 밝기 차이를 다음 수식으로
표현함 


w(x,y) : 균일한 값 또는 가우시안 형태의 가중치를 갖는 윈도우 

E(△x,△y) 함수가 모든 방향으로 값이 크게 나타난다면 점(x,y)는 코너라고 간주할 수 있음. 
해리스는 수학적 기법을 적용하여 코너 응답 함수 R을 유도함 

k: 보통 0.01~0.06
R이 0보다 충분히 큰 양수 : 코너 
R이 0에 가까운 실수 : 평탄한 영역 
R이 0보다 작은 음수 : 엣지 

 

src = cv2.imread(path + 'CornerTest.jpg')
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
res = cv2.cornerHarris(gray, blockSize=5, ksize=3, k=0.01) # 해리스에서 지정하는 k 상수
ret, res2 = cv2.threshold(np.abs(res), 0.005, 0, cv2.THRESH_TOZERO) # 임계값 0.02 기준, res 절대값 낮으면 0, 높으면 원래 값
corners = findLocalMaxima(res2) # 위 함수에 적용, 로컬 맥시마 위치 저장
print('corners =', corners) # 코너 좌표 출력
dst = src.copy()
for x, y in corners:
    cv2.circle(dst, (x, y), 3, (0, 0, 255), 2)
cv2.imshow('cornerHarris', dst)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.waitKey(1)

 

FAST 코너 검출 방법

16개의 주변 픽셀과 밝기를 비교하여 코너 여부 판별 
-p점 주변 1번부터 16번 픽셀과의 밝기 비교 

-주변 16개의 픽셀 중에서 점 p보다 충분히 밝거나 또는 충분히 어두운 픽셀이 
9개 이상 연속으로 존재하면 코너로 정의(원 논문은 12개)

 

 

import matplotlib.pyplot as plt
src = cv2.imread(path+'lena.jpg')

gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)

corner =cv2.FastFeatureDetector_create(30) 
#corner.setNonmaxSuppression(0)
corner_point = corner.detect(gray, None)
drawing = cv2.drawKeypoints(src, corner_point, None)

cv2.imshow('lena', drawing)
cv2.waitKey()
cv2.destroyAllWindows()

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유