< 해리스 코너 검출 방법 >
->코너 검출 연구는, 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()
'OpenCV' 카테고리의 다른 글
OpenCV - CircleGrid (0) | 2022.11.15 |
---|---|
OpenCV - 체스보드 패턴 코너점 검출 (0) | 2022.11.15 |
OpenCV - 코너점 검출 (0) | 2022.11.15 |
OpenCV - 영상 코너 검출 (0) | 2022.11.15 |
OpenCV - 영상 공간 필터링 , 모폴로지, 엣지 추출 및 허프 변환 요약 (0) | 2022.11.14 |