일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DP
- IN
- canny edge detection
- 자료구조
- 강화학습
- machine learning
- 그래프 이론
- dynamic programming
- 백준
- exists
- clustering
- Mask Processing
- 딥러닝
- 인공지능
- classification
- Python
- AlexNet
- dfs
- C++
- TD
- Reinforcement Learning
- 머신러닝
- image processing
- edge detection
- MySQL
- opencv
- BFS
- sklearn
- MinHeap
- SIFT
- Today
- Total
JINWOOJUNG
[ 영상 처리 ] Ch9. Local Feature Detection and Matching(2) 본문
본 영상 처리 개념과 기법들에 대한 공부를 진행하면서 배운 내용들을 중심으로 정리한 포스팅입니다.
책은 Computer Vision: Algorithms and Applications를 기반으로 공부하였습니다.
또한, 인하대학교 박인규 교수님의 디지털 영상 처리 과목을 기반으로 제작된 포스팅입니다.
Before This Episode
앞선 포스팅에서 찾은 Corner Feature은 Axis-Aligned Corner이다.
아래쪽 그림과 같이 Corner가 각 축에 대하여 평행한 Edge들에 의해 생기는 경우를 Axis-Aligned Corner라 한다.우리는 이처럼 이상적인 Corner에 대하여 $A$ Matrix를 아래와 같이 정의하였고, Eigen Value가 둘다 큰 경우 Corner라고 판단하였다.
하지만 실제 환경에서는 Corner가 Rotation되어 각 축과 평행하지 않은 상황도 존재한다. 따라서 일반적인 상황에서는 어떻게 Corner를 추출할 수 있을까?
$A$ Matrix를 잘 보면 Symmetric Matrix 즉, $A_{ij} = A_{ji} \to A_T = A$인 대칭행렬임을 알 수 있다. 따라서 대칭행렬은 Orthogonal Diagonalization(직교 대각화)가 가능하다.
직교 대각화란, 대칭 행렬 $A$를 Orthogonal Matrix $P$의 역행렬, 대각 행렬, $P$로 분해할 수 있다고만 이해해도 충분하다. 이때, Orthogonal Matrix는 모든 행들이 서로 직교 하는 행렬이고, 가운데 대각 행렬이 $A$의 Eigen Value라는 것이 직교 대각화의 특징이다. 그리고 여기서 $P$ Matrix가 Alignment Rotation 즉, 축에 Align하게 하는 회전의 역할 한다.
따라서 우리는, 위와 같이 축에 Align하지 않아도 $P$를 통해 축에 Align 하게 만들어 Eigen Value를 구하고 다시 $P$의 역행렬을 곱해서 원상태로 되돌리면 된다. 즉, $A$ Matrix가 무엇이든지 상관 없이 Eigen Value를 구하는 문제로 귀결된다.
앞서 그래프로 확인해 본 Eigen Value에 다른 Feature를 정리한 것이다. 두 Eigen Value가 모두 크면 Corner, 둘 중 어느 하나가 매우 크면 Edge, 둘다 0에 가까운 매우 작은 값이면 Flat이다. 하지만 여전히 "크다"의 기준이 없다. 따라서 그 기준을 수치적으로 만든 것이 Corner Response Function이다.
$R$은 $A$ Matrix의 det()와, trace()로 계산된다. 이때, 어떠한 Matrix의 det()는 두 Eigen Value의 곱, trace()는 두 Eigen Value의 합으로 계산된다. 이때, $\Alpha$는 가중치로 일반적으로 0.06을 사용한다. 따라서 R을 Eigen Value에 따라 Plot한 결과를 보면 왼쪽 하단의 그림이 된다. 결국 두 Eigen Value가 커야지만 $R$이 큰 값이 나옴을 확인할 수 있다. 따라서 Corner에 대한 기준을 Eigen Value가 아닌 $R$로 판단할 수 있게 되었다.
결국 Corner는 $A$ Matrix의 Eigen Value에 의해 결정되는데, "크다"의 기준이 모호해서 Corner Response $R$ 함수를 기준으로 한다. 하지만, Eigen Value를 계산하는 것은 매우 복잡하고 귀찮다. 따라서 일반적으로는 $A$ Matrix의 det(), trace()를 계산하여 $R$을 구하게 된다.
Harris Corner Detector - Algorithm Steps
- 모든 영상의 Patch(Window)에 대하여 $A$ Matrix를 계산하여 $R$ Response를 계산한다.
- 특정 Threshold $T$를 기반으로 Thresholding을 진행한다.
- Local Maximum을 구하기 위한 Non-Maximum Suppression(NMS)을 진행한다.
- $R$의 Peak 점을 찾는다고 생각하자.
원본 영상과 조명차이, Rotation, Veiw Point 변환 등이 적용된 영상이 있다. 해당 영상들의 $R$을 구한 결과가 가운데 결과이다. 이후 특정 임계값 $T$를 기준으로 Thresholding 한 결과 오른쪽과 같다.
Thresholding 한 결과에서 NMS를 적용한 결과 왼쪽과 같이 $R$의 Peak 점만 남은 것을 확인할 수 있다. 즉, Corner를 추출 한 것이다. 이를 원본 영상에 다시 plot하면 오른쪽과 같다.
인형의 머리 부분에 추출된 Corner를 보면 좌,우측 영상 모두에서 검출되었음을 확인할 수 있다. 이처럼, Harris Detector로 구한 Corner는 재현성이 좋다 즉, 영상의 변화가 있어도 안정적으로 추출됨을 확인할 수 있다.
하지만, Scale에 강건하지 않아, Scaling 된 영상의 경우 보정되어 동일한 Corner Feature를 추출을 못 할 수도 있다. 또한, 영상이 Rotation 될 때 Out Plane Rotation되면, 특징점의 위치와 형태 등이 변환되어 동일한 Feature여도 서로 다른 Feature Description이 발생할 수 있다. 이때, Out of Plane Rotation이란 위 인형의 영상과 같이 View Point가 변화하여 평면(2D)를 벗어난 회전이 발생한 경우를 의미한다.
앞서 언급 한 것처럼, Harris Detector는 $R$을 이용하면 코너를 찾을 수 있기 때문에, 영상의 회전은 $P$ Matrix에 의해 보정 가능하여 불변함을 기억하자.
단점은 Scale에는 무관하지 않다는 점이다. 영상의 Scale이 작은 왼쪽의 경우, Patch의 변화에도 변화량이 적기 때문에 Edge로 불류된다. 하지만 영상의 Scale이 커지면, 해당 부분이 패치 내에서 Corner로써 검출됨을 확인할 수 있다. 이처럼, Scale에 의존적이기 때문에 크기가 다른 두 물체의 Feature Matching에는 한계가 있다.
그래서 등장한 것이 바로 SIFT 이다.
'2024 > Study' 카테고리의 다른 글
[ 영상 처리 ] Ch9. Local Feature Detection and Matching(4) (0) | 2024.05.28 |
---|---|
[ 영상 처리 ] Ch9. Local Feature Detection and Matching(3) (0) | 2024.05.27 |
[ 영상 처리 ] Ch9. Local Feature Detection and Matching(1) (0) | 2024.05.27 |
[ 영상 처리 ] Part5. OpenCV K-Means Clustering & Segmentation(C++) (0) | 2024.05.06 |
[ 영상 처리 ] Ch6. Frequency Domain (0) | 2024.04.17 |