Feature 특징

  • 영상으로부터 추출할 수 있는 유용한 정보 ex. 평균 밝기, 히스토그램, 에지, 직선 성분, 코너 등
  • 지역 특징 local feature
    • 영상 전체가 아닌 일부 영역에서 추출할 수 있는 특징
    • ex. 에지, 직선 성분, 코너
  • corner
    • 에지의 방향이 급격하게 변하는 부분 ex. 삼각형 꼭지점
    • 높은 분별력 → 유용
  • feature point 특징점
    • 코너처럼 한 점의 형태로 표현할 수 있는 특징
    • = keypoint, interest point

지역 특징의 조건

  1. 반복성
  2. 불변성
  3. 분별력
  4. 지역성
  5. 적당한 양
  6. 계산 효율

#14-1. 코너 검출

코너 검출 방법

  • A영상
    • 평탄한 영역
    • 하늘 전체가 A와 비슷한 픽셀 값 분포
  • B영상
    • 수평선 부근 추출 확인 가능
    • 정확한 x 좌표는 가늠 X
  • C영상
    • 특정 건물 뾰족하게
    • 원본 영상 오른쪽 산등성이에서 유일한 위치 탐색 가능
    • 튀어나와있는 건물 = 코너 역할 → 위치 파악 수월

모라벡 알고리즘

  • 여러 방향에 대해 색상 변화를 측정하는 제곱차의 합

해리스 코너 검출 방법

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)

FAST 코너 검출 방법

  • 기존의 코너 검출 방법 : 복잡한 연산, 연산 속도 감소
  • 단순한 픽셀 값 비교 방법
  • Features from Accelerated Segment Test
  • 16개 픽셀 중 점 p보다 밝거나 어두운 픽셀이 9개 이상 존재 → 코너
    • Ip+tI_{p} + t , IptI_p-t 픽셀이 아홉개 이상 연속

    • t : 충분히 밝거나 어두운 정도를 조절하기 위한 임계값

  • 비최대 억제 작업 추가적으로 수행
    • 가장 코너에 적합한 픽셀 선택
    • 코너 점수 : 코너점, 주변 16개 점과의 픽셀 값 차이 합
    • 최종 코너 : 코너점수가 큰 코너
  • FAST(image, keypoints, threshold, nonmaxSuppression = true)
    • nonmaxSuppression : 비최대 억제 수행 여부
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)

#14-2. 크기 불변 특징점 검출과 기술

크기 불변 특징점 알고리즘

  • 코너 : 회전 불변 특징점

  • 영상의 크기 변경될 경우 불변 X

    → 코너보다는 edge에 가까운 형태

  • SIFT (Scale Invariant Feature Transform) : 크기 불변 특징 변환

    • 크기가 다른 영상에서도 지속적으로 검출될 수 있는 크기 불변 특징 연구
    • 스케일 스페이스 구성 → 영상에 다양한 표준편차를 이용한 가우시안 브럴링 적용하여 구성한 영상 집합
    • octave (옥타브) : 영상 집합 → 가로, 세로 반으로 줄여 가면서 여러 옥타브 구성
    • 변화량의 극댓값, 극솟값

특징점 기술자

  • 특징점 주변영상의 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㄱ
  • 여러개의실수값으로

SIFT 특징점 검출

12/7까지 진도가 기말고사

#14-3. 특징점 매칭

OpenCV 특징점 매칭

  • 특징점 매칭
    • 두 영상에서 추출한 특징점 기술자 비교
    • 서로 비슷한 특징점 찾는 작업
  • DMatch 클래스
  • distance
    • 두 키포인트 기술자가 얼마나 차이가 나는지 나타내는 매칭 척도의 역할
    • 유사 : 0 / 서로 다른 특징점 : 큰 값
    • 주로 다차원 벡터의 유클리드 거리로 계산 → 이진 기술자끼리 비교 : 해밍거리 사용
  • DescriptorMatcher 클래스
    • match() : 가장 비슷한 기술자 쌍 하나 찾기

    • knnMatch() : 가장 비슷한 기술자 쌍 k개 찾기

    • radiusMatch() : 지정한 거리 반경 안에 있는 기술자 쌍 모두 찾기

      → BFMatcher 클래스, FlannBasedMatcher 클래스가 상속 받음

  • BFMatcher 클래스
    • 전수조차(Brute-Force) 매칭

    • 질의 기술자 집합 - 훈련 기술자 집합 거리 계산

      → 이 중 가장 거리가 작은 기술자 찾아 매칭

    • 매우 직관적

    • 특징점 개수 늘어날수록 거리 계산 횟수 급격하게 늘어남 (연산량 증가)

      → FlannBasedMatcher 클래스가 더 효율적

  • FlannBasedMatcher 클래스
    • Flann(Fast Library approximate nearest neighbors) : 근사화된 최근방 이웃 알고리즘을 빠르게 구현한 라이브러리
    • 근사화된 거리 계산 방법 사용 (L2 norm) → 해밍거리 사용하는 이진 기술자에 사용 불가
    • Optimal point 못 찾을 수도 있음.
    • 빠른 동작
  • drawMatches(img1, keypoints1, img2, keypoints2, …)
    • 매칭 결과 가로로 이어 붙임

    • 추출한 특징점, 매칭 결과를 다양한 색상으로 표시

호모그래피와 영상 매칭

#14-4. 영상 이어 붙이기

영상 이어 붙이기

  • image stitching
    • 여러 장의 영상을 서로 이어 붙여서 하나의 큰 영상을 만드는 기법
    • 파노라마 영상(panorama image) 생성하는 기법
  • 입력 영상들이 서로 일정 비율 이상으로 겹치는 영역이 존재해야함 → 서로 같은 위치 분간할 수 있도록 유효한 특징점 많이 있어야함
  • 입력영상에서 특징점 검출 → 서로 매칭 수행 → 호모그래피 구하기 → 호모그래피 행렬 기반으로 입력 영상 변형하여 서로 이어붙이는 작업 수행 → 자연스럽게 보이도록 블렌딩 (영상의 밝기 적절하게 보정)
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)

  • 결과 영상 주변부에 검은색으로 채워지는 영역 발생할 수 있음
profile
숭실대학교 컴퓨터학부 21

0개의 댓글