본문 바로가기
Quality control (Univ. Study)/Digital Image Processing

Digital Image Processing - Local Feature

by 생각하는 이상훈 2024. 5. 19.
728x90

Local feature

Local feature와 Global feature를 비교하면 위와 같다. Global feature는 전체 Histogram을 비교하여 비슷한지 평가할때 쓰일 수 있다. 앞에서 texture에 대해서 배울때 나왔던 개념인 Gradient orientation의 Histogram을 뜻하는 HoG가 유용하게 쓰인다. 반면 위 사진에서 볼 수 있듯이 local feature는 부분 부분을 비교하고 평가하는 것이다.

부분부분을 뽑아내서 비교하는 모습이다. 이렇게 뽑아낸 부분부분을 patch라고 부른다. 이때 첫번째 patch는 하늘의 어느곳을 잡아도 비슷하므로 local feature를 잡아냈다고 하기 어려울 것이다. 반면 세번째 patch는 조금만 이동해도 완전히 달라지는 부분이므로 local feature를 분석하기 좋은 patch일 것이다.

예를들어 위와 같은 panorama stitching task를 진행하려면 이미지의 정확한 부분들을 찾아내서 일치시켜야한다.

위 그림을 보면 local feature를 정확히 파악해서 일치하는 부분들을 연결지어주는 모습이다.

 

Local feature를 잡아내는 것은 주로 Detection, Description, Matching에서 쓰인다.

위 그림과 같이 rotation, transform, scale이 변한 이미지에서도 descriptor vector를 뽑아내서 비교를하여 그 차이가 일정 threshold를 넘지 않으면 같다고 판단하는 식이다. 순서대로 살펴보면 아래와 같다.

 
1. 이미지에서 구별 가능한 여러 특징점을 찾는다.
2. 각 특징점 주변에 scale 또는 affine 변환에 불변하는 방식으로 supporting region을 정의한다.
3. 정의된 supporting region에서 내용을 추출하고 이를 정규화한다.
4. 정규화된 영역에서 descriptor vector를 계산한다.
5. 계산된 descriptor vector들을 서로 매칭한다.

 

Local feature의 예시로는 아래와 같은 것들이 있다.

Edges는 말 그대로 이미지에서의 선이나 경계이다.
Corners는 이미지에서 두 개의 경계가 만나는 지점으로, Harris 코너 검출기와 같은 알고리즘을 사용하여 찾을 수 있다.
Blobs는 일반적인 모양보다 더 크고 뚜렷한 지점으로, Scale-Invariant Feature Transform (SIFT)와 같은 알고리즘을 통해 찾아진다.
Affine covariant regions는 물체의 움직임이나 뷰포인트 변화에도 불구하고 일관되게 검출될 수 있는 영역으로 Bolbs+affine motion이라고도 말할 수 있다.


Corner feature

Corner feature는 2D 이미지에서 곡률이 높은 점들이다. 이러한 특징점들이 반드시 실제 3D 공간에서의 코너와 대응되는 것은 아니다. 교차점, 질감이 많은 표면, 가려짐 현상이 있는 경계 등에서 발생한다. 아래는 corner features를 추출한 결과이다.

Corner feature가 중요한 local feature로 간주되는 이유는 아래 그림을 통해 알 수 있다. 맨 왼쪽의 flat region부터 보면 patch를 상하좌우로 움직여봐도 특별한 변화가 없기 때문에 현재 어느 위치인지 특정하는 것이 불가능하다. 다음으로 edge region을 보면 patch가 edge의 방향과 일치하는 방향으로 움직일때 변화가 크지 않다. 반면 corner region에서 patch를 움직여보면 상하좌우 어느 방향으로 움직여서 변화가 쉽게 감지되어 local feature로써의 역할을 하기 좋다.

추가적으로 corner edge는 너무 특징적이어서 조명이나 시점이 바뀌어도 사라지지 않고 그대로기 때문에 local feature로써의 장점이 크다.


Harris Corner Detector

Harris detector는 가장 잘 알려진 corner detector중 하나이다. 기본 원리는 Sliding window 방식과 동일하다. 위에서 살펴본 patch를 움직여서 차이를 비교하는 방식이 바로 Harris detector의 방식이다. 이미지의 한 픽셀의 중심점으로 잡고, 그 중심 픽셀에 Window를 설정해, Window 내의 픽셀값의 합을 I(x,y)로 설정한다. 그 후 Window를 x축의 방향으로 u만큼, y축의 방향으로 v만큼 이동시켜서 다시 I(x+u,y+v)를 구해준다. 식으로 살펴보면 아래와 같다. 식에서 w()는 window 함수이고 delta u는 patch가 이동하는 이동벡터이다.

결국 핵심은 이동하기 전과 이동한 후의 intensity를 비교하는 것이다. Window function이 곱해진 SSE(오차제곱합)가 쓰였음을 알 수 있다. 이때 window function은 아래와 같이 indicator function이나 Gaussian function을 사용한다. 보통 Gaussian이 많이 쓰인다고는 한다.

 

아래 그림을 통해서 더 직관적으로 이해해볼 수 있다.

 

 

Intensity를 그래프로 3차원 공간에 표현한 것을 살펴보자. 그래프에서 z값이 작아서 움푹 파여있는 부분이 intesity 차이가 적은 것이고 진한색으로 z값이 큰 부분이 intensity 차이가 큰 것이다. 하늘같이 특징점이 없는 부분은 많이 이동해야 차이가 나타나고 edge는 특정 방향으로는 움직여도 차이가 거의 없는 모습이다. 마지막으로 corner부분은 어느 방향으로 움직여도 차이가 금방 커지는 특징을 볼 수 있다.

 


728x90