SIFT: Scale Invariant Feature Transform을 이용한 Feature Matching
이전 글에서 blob 형태의 이미지 속 특징점(feature)을 추출하였다.
이제 이를 이용해서 다른 이미지와 현재 이미지를 비교도 하고, stitching도 하고 해야 하는데, 이러한 feature들의 비교와 매칭은 어떻게 수행할까?
바로 특징점들을 설명하는 descriptor가 필요한 순간이다.
이러한 descriptor들은 크기(scale), 회전(rotation), 조도(illumination) 등 다양한 변화가 가해져도 같은 특징들을 잘 기술해야 한다.
Scale 극복하기
같은 물체를 촬영한 사진이더라도 촬영 환경에 따라 크기가 다르게 나올 수 있다.
이런 경우는 해결하기 어렵지 않은데, 어차피 blob의 크기를 알기 때문에 검출된 blob의 크기를 똑같이 맞춰주면 해결된다!
Rotation 극복하기
같은 특징점 blob 이미지인데, 회전이 가해진 상태라면 어떻게 비교해야 할까?
먼저 blob 내부의 픽셀들의 gradient 방향을 구해준다.
이 gradient 방향들을 이용해 히스토그램을 만들어준다.
이를 통해 blob 내부의 주된 gradient 방향을 알 수 있다.
이제 이 dominant gradient가 무조건 상단을 향하게 blob을 rotation 시켜주면 rotation도 일반화할 수 있다.
Illumination, Out of plane rotation
위에 것들은 비교적 쉬웠지만, 난감한 것이 조도의 변화와 촬영 각도(out of plane rotation) 변화이다.
이미지의 촬영 각도나 조도가 변화하면 각 픽셀의 정보들이 상당히 많이 바뀔 수밖에 없다.
그렇기 때문에 위 경우들처럼 픽셀 단위로 조정하는 대신, feature vector라는 것을 만든다.
- 각 blob을 $4\times 4$ 크기의 격자로 나눈다.
- 각 격자의 gradient를 구하고, gradient의 방향을 8개로 나누어 histogram을 만든다.
- 그러면 패치별로 $8 \times 4 \times 4 = 128$개의 값이 나온다.
이렇게 만든 feature vector들을 사용하면 pixel 단위의 값이 아닌 gradient를 이용하기 때문에, 밝기 변화에 강건하다.
더불어 촬영 각도의 변화도 60도 정도는 대처할 수 있게 된다.
한 개의 patch를 128개의 비교적 적은 값으로 표현하니 효율적이기까지 하다!
Matching
이제 비로소 feature vector를 이용한 matching을 수행한다.
두 개의 이미지에서 같은 영역을 matching 해주는 것인데, 간단하다.
각 이미지의 feature vector의 거리(norm)를 구해주면 된다.
그런데, 이미지 안에 반복적인 패턴이 있으면 matching이 잘못될 수도 있다.
그렇기 때문에 Ratio Threshold를 적용한다.
이미지 A의 벡터 $v_a$와 유사한 이미지 B의 벡터들 중, 가장 유사도가 높은 $v_{b1}$과 두 번째로 높은 $v_{b2}$에 대하여 다음 비율을 구한다.
$$ R= \frac{||v_a - v_{b1}||}{||v_a-v_{b2}||} $$
만약 이미지 B의 두 후보 영역이 비슷하여 헷갈린다면, $R$은 1에 가까운 값이 나올 것이다.
이런 경우, 확실하지 않기 때문에 matching을 포기하면 된다.
한편, 후보 중 헷갈리는 것 없이, 유사도가 가장 높은 $v_{b1}$이 $v_{b2}$보다 유사도가 훨씬 높다면 $R$은 0에 가까워지기 때문에, matching을 그대로 수행하면 된다.
'Deep Learning > 영상처리' 카테고리의 다른 글
Bag of Visual Words (BoVW) (2) | 2023.03.10 |
---|---|
이미지 변형 (Image Transformation) (1) | 2023.03.09 |
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection (0) | 2023.03.08 |
코너 검출 (Corner Detection) (0) | 2023.03.08 |
Line Fitting (RANSAC, HOUGH transform) (0) | 2023.03.08 |
댓글
이 글 공유하기
다른 글
-
Bag of Visual Words (BoVW)
Bag of Visual Words (BoVW)
2023.03.10 -
이미지 변형 (Image Transformation)
이미지 변형 (Image Transformation)
2023.03.09 -
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection
SIFT: Scale Invariant Feature Transform 을 이용한 Blob Detection
2023.03.08 -
코너 검출 (Corner Detection)
코너 검출 (Corner Detection)
2023.03.08