2023. 11. 14. 20:46ㆍ컴퓨터비전
방법
1. Detection: 관심 있는 점을 식별
2. Description: 관심 있는 점들의 특징 벡터를 추출하여 어떻게 다르고 어떻게 같은지 표현
3. Matching: 대응하는 점들을 결정하여 매칭
특징
- Repeatability: 같은 특징은 여러 이미지에도 반복적으로 나타나야 한다
(회전, 크기, 빛 등의 변화가 있더라도) - Saliency: 각 특징들은 구별가능한 표현을 가져야 한다
- Compactness and efficiency: 적은 특징만으로 구별가능해야 한다
- Locality: 적당히 작은 구역을 특징으로 잡아야 한다.
(너무 크면 구별하기 어렵다)
Detection
Harris Corner
: 코너성을 찾기 위한 detector
flat: 모든 방향에서 변화가 없음
edge: x 또는 y 방향의 변화량(gradient)만 크다
corner: 모든 방향에서 변화량(gradient)이 크다
찾는 방법
1. 어떤 영상의 특정 위치에 코너가 존재한다면
코너의 주변점들에 대해서 x, y방향 모두 밝기의 차이가 존재할 것.
-> E(u, v)의 값이 크게 나타날 것.

2. 코너가 아님에도 불구하고 밝기 차이가 큰 경우가 있을 수 있다.
따라서 E(u,v)의 값이 모든 방향에서 크게 나타나는지 확인해야 한다.



- 두 고윳값 중 하나가 매우 클 경우: edge
- 두 고윳값 모두 매우 클 경우: corner
- 두 고윳값 모두 매우 작을 경우: flat
얼마나 커야 크다고 할 수 있는가?
-> 세타값을 기준으로 말할 수 있다.


Harris Detector 사용하기
1. 해리스 코너 응답함수 f 계산하기

2. f > threshold인 점들만 찾기

3. 한 코너에 여러 개의 코너값이 검출될 수 있으므로 지역최댓값만 취하기

만약 영상이 회전되어 있었다면?
-> Rotation Invariant 하기 때문에 회전시켜 고윳값을 구하고 다시 원상복구시킨다.
만약 scale이 달라졌다면?
-> Scale Inavariant 하지 않다.

윈도 크기를 다르게 적용해야 하는데 Harris corner는 그런 방법이 없다
그에 따른 해결법으로 Blob detection이 있다.
Blob Detection
영상의 크기가 다를 때
알맞은 윈도 크기는 어떻게 찾을 수 있을까?

x축은 윈도우 크기 y축은 함수 f값
함수 f값의 최고점에 해당하는 윈도우 크기를 지정하면 된다.
어떤 함수를 써야 할까?
-> 1개의 안정적인 sharp peak를 가진 함수를 써야 한다.

Blob Detection을 할 때는 Laplacian of Gaussian 필터를 사용한다.
가우시안을 2번 미분한 것이다.

특징은 작은 이미지는 작은 필터에서
큰 이미지는 큰 필터에서 높은 값을 가지게 된다.

하지만 Laplacian of Gaussian은 많은 연산을 요구하기 때문에
비교적 간단하면서도 비슷한 성능을 낼 수 있는
Difference of Gaussian을 사용한다.


Descriptor
이제 feature point들 detection은 끝났다.
다음은 feature point들을 describe 하는 방법을 알아야 한다.
SIFT descriptor를 사용한다.
1. feature point 주변 gradient의 크기 및 방향을 알아낸다
2. 구한 gradient들로 x축이 방향(각도), 세로축이 크기인 히스토그램을 그린다
3. 히스토그램에서 가장 큰 값을 가지는 방향을 feature point의 방향으로 설정한다
만약 가장 큰 값의 80%보다 큰 방향이 존재한다면, 그 방향도 feature point의 방향으로 설정한다.
4. 아래 그림처럼 feature point를 중심으로 각 픽셀들의 크기와 방향성을 표시한다.

이미지가 회전하면 모든 gradient의 방향이 바뀌게 된다.
따라서 회전된 이미지에서도 변하지 않도록 하기 위해 각각의 4*4 윈도에서
feature point의 방향을 빼준다.
그러면 각 16개의 윈도우 방향은 feature point의 상대적인 방향이 되므로
원래의 이미지와 회전된 이미지에서의 feature point는 같게 된다.
Matching
후보들을 찾기 위해, 모두 비교하여 가장 비슷한 윈도우들을 찾는다.
'컴퓨터비전' 카테고리의 다른 글
| [opencv] Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at 에러 해결 (2) | 2023.11.21 |
|---|---|
| 과제하며 배운 opencv 함수 및 여러 정보 (2) | 2023.11.20 |
| Edge Detection (0) | 2023.11.12 |
| Image Restoration and Reconstruction (0) | 2023.11.10 |
| (opencv) visual studio에 적용하기 (0) | 2023.11.01 |