오늘은 Feature descriptor 와 matching 에 대해서 알아보도록 합시다.
저번 포스팅에서도 언급을 했듯이 Feature을 찾는 과정은 Detection, Description, Matching 으로 이루어져있습니다.
일단 Feature descriptor의 정의를 살펴보면 어떤 이미지에서 알고리즘을 통해서 벡터를 출력하는 알고리즘입니다.
matching은 이렇게 추출한 Feature들을 잇는 거라고 하면 되는거죠.
어떻게 좋은 descriptor 을 구할지 그리고 어떻게 이들을 매치할지가 키포인트겠지요.
가장 좋은 descriptor 은 가장 비슷한 포인트를 두 이미지 속에서 찾아내는 거죠.
가장 심플한거는 같은 위치에 직사각형 Window 를 만들고 매치시키는 건데 세상이 그렇게 만만할리 없겠죠...
그래서 저희는 SIFT 와 같은 접근법들에 대해 알아볼 것입니다.
Descriptor 는 두 가지 요건을 만족시켜야합니다.
하나는 Invariance, 불변입니다.
Descriptor는 이미지가 바뀌더라도 변하면 안됩니다. (이때 이미지 변화는 회전이나 크기 변화와 같은 기하학적 변화나 밝기와 같은 포토메틱적인 변화일 수 도 있습니다.)
또 하나는 Discriminability 로 구분할 수 있어야한다는 겁니다. Descriptor 는 반드시 가각의 포인트해서 unique 한 부분을 찾아낼 수 있어야합니다.
Invariant Descriptor
Translation, 2D rotation scale 뿐만 아니라 3D rotations, affine transforms, illumination/contrast changes에도 불변성을 보여야합니다.
저희가 오늘 언급할 SIFT 60도 가량에 rotation에서도 동작이 가능합니다.
Descriptor 가 Rotation invariance 를 갖기 위해서는 이미지 패치를 잘 찾아야합니다.
예를 들면 x 라는 방향이 주어졌을 때 람다 최댓값에 대응하는 H 의 eigenvector 나 간단하게 gradient 를 구하고 해당하는 orientation을 구한다든지 앵글에 따른 패치를 회전 시킨다는지의 방법으로 말입니다. 마지막 방법은 다음시간에 다루도록 하겠습니다.
MOPS Descriptor (Multiscale Oriented PatcheS descriptor)
MOPS는 로테이션이 있어도 불변하는 Feature Descriptor을 구할 수 있습니다.
8x8 픽셀이 우리가 원하는 Feature Descriptor입니다.
이 Feature Descriptor가 이 패치 내에 Intensity Value를 쓰는 것, 하지만 이 값 자체가 환경에 따라서 밝기를 바꿀 수 있습니다.
이는 Normalization을 하면 변화를 대비할 수 있습니다.
아래 사직을 보면 Scale 에 따라 변하는 패치를 알 수있는데 이때 'Scale'에 따라서 패치가 너무 작아질 경우에는 corner인 feature들도 계속 확대하면 edge 로 밖에 안 보이는 안 좋은 상황이 나올 수 있습니다.
색감과 빛에 대한 불변성은 Edge 로 표현하면 더 효율적입니다.
더 나은 Feature Descriptor을 사용하기 위해서는 Edge 들이 패턴이 Match가 되어야합니다. 모든 기하하적 전환이 불변해야합니다. 또 조그만한 변형(Deformations)에 영향을 받지 않아야 합니다.
SIFT(Scale Invariant Feature Transform)
기본적 아이디어는 다음과 같습니다.
- 찾아낸 feature 주변 16x16 square window
- edge oritentaion 을 각 픽셀에 대해 계산
- weak 한 edge는 날림 (magnitude 가 적은 값)
- 구한 edge orientation에 관한 히스토그램을 작성
Image gradients를 보시면 패치 내 에지들에 방향, angle 들에 대한 histogram을 작성하는 것을 볼 수 있습니다.
이렇게 하면 내부 색깔의 영향을 받지도 않고 회전의 영향도 받지 않는 Powerful 한 Descripotr 을 만들 수 있습니다.
왼쪽 사진은 간략하게 설명이 돼 있는 것이기 때문에 실제적으로는 128 dimensional descriptor가 만들어진다는 것을 알 수 있습니다.
이런 SIFT 의 특성은 단순하지만 견고하고 이미지의 뷰포인트나 조명의 변화를 쉽게 다를 수 있고 빠르고 효율적이어서 실시간으로 사용할 수 있다는 것입니다.
이외에도 히스트그램의 기울기를 사용하는 HOG(Histogram of Gradients), 휴대폰에 사용되는 Visual SLAM의 descriptor 인 FREAK(Fast Retina Keypoint), 그리고 딥러닝에 사용되는 LIFT(Learned Invariant Feature Transform) 등등이 있습니다.
Feature matching
간단하게 matching 에 대해 알아봅시다.
만약 l1 이라는 feature 가 주어질 경우 l2 feature과 가장 적합하게 match 할려면 어떻게 해야할까요?
1. 먼저 두 descriptor 사이를 비교할 distance function을 정의해야 합니다.
2. 가장 distance 가 작은 걸 l2 에서 찾아냅니다.
그럼 어떻게 두 피쳐의 다름을 정의해야할까요?
가장 간단한 방법은 || f1 - f2|| 와 같이 단순 거리 측정입니다.
하지만 아래와 같이 f1 과 f2 를 혼돈할 수 있는 여지가 존재할 수 있겠죠,
이런 경우 ratio distance 를 통해 계산하면 조금 더 낫습니다.
|| f1 - f2 || / ||f1 - f2'|
모호하면 모호할 수록 큰 값이 나옵니다.
만약 이미지에 아웃라이어가 있으면 굉장히 큰 영향을 끼칠 수 있는데 이는 다음 시간에 알아보도록 하겠습니다.
오늘은 Feature Descriptor 와 Feature Matching 에 대해 배워보았습니다.
'공부 > 컴퓨터비젼' 카테고리의 다른 글
[컴퓨터비젼] 9. RANSAC (0) | 2021.04.12 |
---|---|
Canny Edge 설명 & 구현코드 (0) | 2021.04.06 |
[컴퓨터비젼] 8. Image alignment (0) | 2021.04.05 |
[컴퓨터비젼] 7. Transformations and warping (1) | 2021.03.30 |
[컴퓨터비젼] 5. Corner Detection와 Harris Operator (2) | 2021.03.29 |