- 이분 설명이 기가막히다 내꺼 말고 다 여기가서 sift공부해라.
1. SIFT
- 그림처럼 두 영상이 동일한 물체를 담고 있다는 걸 어떻게 하면 찾을 수 있을까?
- 영상의 크기, 회전, 조명은 다르지만 크기, 회전에 불변하는 특징들을 찾아서 매칭시켜주는 것이 SIFT이다.
2. Scale Space
- 영상의 크기에 불변하는 특징을 찾아내는 방법이다.
- 일단 이미지에 가우시안 필터를 적용해서 새로운 영상 L을 도출한다.
- 가우시안 필터를 적용한다는 것 차제가 영상을 smoothing 시켜서 고주파 성분을 날려버리는 것이다.
- smoothing 된다는 건 결국 영상이 축소된다는 뜻과 같다. 예를들어 2배 스무딩하고 픽셀들 중 절반만 고르면 영상면적이 작아지는 것이다.
- 즉 가우시안을 여러번 적용하면 해상도가 흐려질건데 그 뜻은 이미지 크기가 작아지는 것과 같다.
- 가우시안을 반복하면 영상의 크기도 점점 작아지는 것이다.
- s표준편차의 가우시안을 두 번 적용한 것은 s*루트2 표준편차의 가우시안을 한번 적용한 것과 같다. 따라서 마스크의 크기를 바꾸지 않더라도 여러번 convolution하면 큰 크기의 마스크로 convolution을 한번 한 것과 같은 효과라는 것이다.
- 시그마가 커지면 커질수록 더 스무딩 되고 따라서 영상 크기는 더 작아진다고 볼 수 있다.
- 시그마를 한 축으로 두고 나타내면 그래프는 아래와 같다. 여기서 극점을 찾으면 영상의 크기에 불변하는 가장 두드러지는 특징을 찾을 수 있다. 그래프는 아래에 있다.
- 원래 영상에 라플라시안을 계속해서 convolution한 결과들이 있다. 그 결과에서는 에지나 코너들이 두드러지게 나타난다.
- 우측 그래프를 보면 영상의 작은 점은 시그마가 3.59정도일때 가장 잘 찾아졌고 큰 점은 시그마가 5.5일때 가장 잘 찾아졌다.
- 특징의 크기 비는 라플라시안의 표준편차 비와 같다.
- 이 말은 입력으로 들어온 영상에 라플라시안은 계속 적용해서 특징이 가장 잘 나타나는 시그마를 구했을 때, 입력 영상이 원본 영상 보다 몇 배 큰지를 알 수 있다는 말이다.
- 라플라시안을 여러번 적용하는 것보다 가우시안을 여러번 적용한 결과들의 차를 구하는 DoG가 결과는 같은데 계산상으로 더 유리하기 때문에 이 방법을 사용한다.
- 가우시안 결과들의 차를 구하면 DoG(difference of gaussian) 영상이 나오는데 노멀라이즈 하면 정확하게 특징을 잡고 있다.
- 즉 라플라시안을 하지 않아도 DoG로 밝기가 많이 변하는 부분들인 고주파 성분, corner edge 성분들을 잘 찾아낸다.
- 동일 옥타브 내에서 세개의 결과물을 비교하여 극대, 극소 지점을 찾는다. 모든 픽셀에 대해서 위아래26개의 픽셀들과 비교하여 x가 가장 큰지/가장 작은지 판단하는 것이다.
- 그렇게 모든 픽셀에 대해서 극대/극소인지 판별하고나면 결과 값에는 keypoint들만 남게 된다.
- 그런데 이 keypoint들은 아직 정확하지 않다.
- 테일러전개, threshold를 통해 확실한 keypoint들만 걸러낸다.
- 즉 정리하면 우리는 이미지의 크기에 불변하는 특징을 찾아낸 것이다.
- DoG로 찾은 keypoint들이다. 이 키 포인트들을 interesting patch로 잡는다.
4. Orientation assignment for each keypoint
- 그 다음 할 일은 rotation에 invariant하게 하는 것이다.
- 찾은 keypoint 주변의 gradient 방향, 크기를 모아서 가장 두드러지는 방향을 찾는다. (histogram of gradient로 결정할 수 있음)
- 그 찾은 방향,크기를 keypoint에게 할당해준다.
- 그 두드러지는 방향을 한쪽으로 일치시킨 다음에 patch비교를 수행하면 rotation에도 Invariant하게 된다.
- 그라디언트 크기, 방향을 구한다.
- 크기가 가장 두드러지는 방향을 선택해서 keypoint에게 부여한다.
- 키 포인트 중심으로 서브 패치를 만든다. 그리고 그 서브패치안에 그라디언트 크기, 방향을 8개 빈으로 나타내면 위와 같다.
- 그럼 키 포인트 하나 중심으로 16개의 서브패치 * 8개의 그라디언트 빈, 총 128개의 특징이 존재하게 된다.
- 이 feature 벡터에서 keypoint의 gradient 방향을 빼주면 feature vector는 keypoint 방향에 상대적이게 된다.
- 이렇게 keypoint들의 feature vector를 비교하여 두 패치의 일치 여부를 판단한다.
5. 결과
- 왼쪽) DB에 있는 특징 이미지 4개가 있다.
- 우측 사진이 입력값으로 들어왔을 때, 특징 이미지 4개가 사진에 어디에 일치하는지 찾은 결과이다. (아래)
- opencv에 구현되어 있다.
'ComputerScience > ImageProcessing' 카테고리의 다른 글
Computer vision - Alignment (0) | 2022.05.12 |
---|---|
Computer vision - RANSAC (line fitting) (0) | 2022.04.19 |
Computer Vision - Edge Detection (0) | 2022.04.01 |
Computer Vision - Corner Detection (0) | 2022.03.26 |
Computer Vision - Correspondence (Template Matching) (0) | 2022.03.24 |