1. 코너 검출
- 코너 검출
코너의 특징
• 평탄한 영역(flat) & 에지(edge) 영역은 고유한 위치를 찾기 어려움
• 코너(corner)는 변별력이 높은 편이며, 영상의 이동, 회전 변환에 강인함
<코너 검출 방법>
해리스(Harris): 영상 내부 작은 영역이 모든 방향에 대해 변화가 큰 경우 코너로 규정
코너 응답 함수 R을 반환 → R(x,y)가 충분히 크면 코너로 구분
cv2.cornerHarris() 함수 사용
추적하기 좋은 특징(Good Features to Track):
해리스 코너 검출 방법을 기반으로 향상된 방법
비최대 억제 수행
코너 품질 함수를 정의 → 가장 값이 큰 순서대로 정렬하여 반환
cv2.goodFeaturesToTrack() 함수 사용
FAST(Features from Accelerated Segment Test):
주변 16개 픽셀 값 크기를 분석
기준 픽셀(p)보다 충분히 밝거나(>p+t) 또는 충분히 어두운(<p-t)
픽셀이 n개 연속으로 나타나면 코너로 인식 (n은 보통 9)
해리스, GFTT 방법보다 매우 빠르게 동작 > 다음 픽셀이 밝아지면 1, 어두워지면 0 이런식으로 계산하기 때문에 속도가 빠르다.
<해리스 코너 응답 함수 계산>
cv2.cornerHarris(src, blockSize, ksize, k, borderType=None) -> dst
src:입력 단일채널 8비트 또는 실수형 영상
blockSize:코너 응답 함수 계산에서 고려할 이웃 픽셀 크기. 보통 2-5
ksize:(미분을 위한) 소벨 연산자를 위한 커널 크기. 보통 3
k:해리스 코너 검출 상수 (보통 0.04~0.06)
borderType: 가장자리 픽셀 확장 방식. 기본값은 cv2.BORDER_DEFAULT
dst:해리스 코너 응답 계수. src와 같은 크기의 행렬(numpy.ndarray). dtype=numpy.float32
<추적하기 좋은 특징 코너 검출>
cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance, mask=None, blockSize=None, useHarrisDetector=None, k=None) -> corners
image:8비트 또는 32비트 실수, 단일채널 영상
maxCorners: 최대 코너 개수. maxCorners <=0 이면 무제한
qualityLevel: 코너점 결정을 위한 값. 보통 0.01 ~ 0.1
minDistance: 코너점 사이의 최소 거리
corners:검출된 코너점 좌표. numpy.ndarray. shape=(N, 1, 2). dtype=numpy.float32.
mask:마스크 영상
blockSize:코너 검출을 위한 블록 크기. 기본값은 3
useHarrisDetector: 해리스 코너 방법 사용 여부. 기본값은 False
k:해리스 코너 검출 시 사용할 k 값
<FAST 코너 검출>
cv2.FastFeatureDetector_create(threshold=None, nonmaxSuppression=None, type=None) -> retval
cv2.FastFeatureDetector.detect(image) -> keypoints
threshold:중심 픽셀 값과 주변 픽셀 값과의 차이 임계값. 기본값은 10 >> 중심과 주변의 밝기를 비교하는데 차이값을 임계값으로 둔다
nonmaxSuppression: 비최대 억제 수행 여부. 기본값은 True
type:코너 검출 방법. 기본값은 cv2.FAST_FEATURE_DETECTOR_TYPE_9_16 >> 코너 검출 방법
retval:FastFeatureDetector 객체
image:(입력) 그레이스케일 영상
keypoints:(출력) 검출된 코너점 정보. cv2.KeyPoint 객체를 담은 리스트. cv2.KeyPoint의 pt 멤버를 이용하여 코너 좌표 추출.pt[0]은 x좌표, pt[1]은 y좌표
코너 검출 반복성 비교
• FAST 방법의 반복 검출률이 대체로 높음
• FAST 방법은 노이즈에 민감함
'workSpace > PYTHON' 카테고리의 다른 글
[openCV] opencv 작업에 도움되는 로직 (0) | 2021.02.22 |
---|---|
[openCV] opencv를 활용한 머신러닝 (0) | 2021.02.19 |
[openCV] 영상 분할 및 객체 (0) | 2021.02.17 |
[openCV] 이진 영상 처리 (0) | 2021.02.16 |
[openCV] harrcascade train 시키기. (0) | 2021.02.16 |