harris = cv2.cornerHarris(src, 3, 3, 0.04)
harris_norm = cv2.normalize(harris, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
for y in range(harris_norm.shape[0]):
for x in range(harris_norm.shape[1]):
if harris_norm[y, x] > 120:
if (harris[y, x] > harris[y-1, x] and
harris[y, x] > harris[y-1, x] and
harris[y, x] > harris[y-1, x] and
harris[y, x] > harris[y-1, x]):
cv2.circle(dst, (x, y), 5, (0,0,255), 2)
, 픽셀이 아홉개 이상 연속
t : 충분히 밝거나 어두운 정도를 조절하기 위한 임계값
fast = cv2.FastFeatureDetector_create(60)
keypoints = fast.detect(src)
dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
for kp in keypoints:
pt = (int(kp.pt[0]), int(kp.pt[1]))
cv2.circle(dst, pt, 5, (0, 0, 255), 2)
코너 : 회전 불변 특징점
영상의 크기 변경될 경우 불변 X
→ 코너보다는 edge에 가까운 형태
SIFT (Scale Invariant Feature Transform) : 크기 불변 특징 변환
12/7까지 진도가 기말고사
match() : 가장 비슷한 기술자 쌍 하나 찾기
knnMatch() : 가장 비슷한 기술자 쌍 k개 찾기
radiusMatch() : 지정한 거리 반경 안에 있는 기술자 쌍 모두 찾기
→ BFMatcher 클래스, FlannBasedMatcher 클래스가 상속 받음
전수조차(Brute-Force) 매칭
질의 기술자 집합 - 훈련 기술자 집합 거리 계산
→ 이 중 가장 거리가 작은 기술자 찾아 매칭
매우 직관적
특징점 개수 늘어날수록 거리 계산 횟수 급격하게 늘어남 (연산량 증가)
→ FlannBasedMatcher 클래스가 더 효율적
매칭 결과 가로로 이어 붙임
추출한 특징점, 매칭 결과를 다양한 색상으로 표시
imgs = []
for i in range(1, argc):
img = cv2.imread(sys.argv[i])
if img is None:
print('Image load failed!')
exit()
imgs.append(img)
stitcher = cv2.Stitcher_create()
status, dst = stitcher.stitch(imgs)
if status != cv2.Stitcher_OK:
print('Error on stitching!')
exit()
cv2.imshow('dst', dst)