출처: https://www.geeksforgeeks.org/sift-interest-point-detector-using-python-opencv/
SIFT(Scale Invariant Fourier Transform) 추출 알고리즘은 인풋 이미지에 대해 특징점을 탐지하는데 쓰인다.
다음과 같은 애플리케이션에서 이미지의 특징점을 식별할 수 있다.
- 이미지에서 오브젝트 인식
- 길찾기 나 장애물 피하기 알고리즘
- 제스쳐 인식이나 모자이크 생성 등등
Harris Detector 알고리즘은 이미지의 viewpoint, depth, scale 에 의존적이며, 반면에 SIFT는 이러한 이미지의 프로퍼티들에 상관없이 탐지가 된다. 이미지데이터 scale-invariant coordinate(크기 불변)의 트랜스폼 정보를 이용하는데, SIFT Detector는 동물 영장류의 배경이나 사물을 인식하는 방식과 거의 유사하다고 한다.
특징 점을 추출하는 스텝은 다음과 같다.
1.Scale Space Peak Selection
Scale Space의 컨셉은 다음과 같은데, 각기 다른 sigma parameter를 이용해 Gaussiann 필터를 적용한 여러 이미지들 중 특정 지점에 차이가 발생할 경우이다. Scale Space Peak의 뜻은 원형의 크기안에 얼마만큼 동시 다발적으로 발생하는 양에 따라 다른것이다. 서로 다른 스케일의 Gaussian이 적용된 이미지들에서 한 지점에서 edge가 동시에 발견되었을 때 비로소 진정한 edge라고 인식을 하는 것이다.
2. Key Point Localization
Key point localization은 이전 스테이지에서 선택된 여러 특징점들 중 불안정한 키포인트, edge에 있는 점, 작은 콘트라스트가 있는 점 등을 지운다. 이것은 이전 스테이지의 Laplacian을 계산함으로써 할 수 있는데
위의 공식에서, D는 가우시안의 차이 이다. Unstable한 포인트를 지우기 위해 z가 계산되어지고 z의 값이 threshold 보다 낮으면 삭제되는 것이다.
3. Assigning Orientation to Keypoints
이미지가 전체적으로 회전하더라도 탐지를 유지하기 위해서는 키포인트들에 대한 회전 방향값을 구해야한다. 이것은 키포인트들의 주변에 있는 포인트들에 대한 방향을 조사하여 얻는데, 360 degrees에서 10 degrees 크기별 36개의 각을 히스토그램으로 만든다. 그리하여 만약 하나의 방향이 67.8일 경우 60-70 degrees bin에 갯수를 더하는 방식이다.
4.Key Point Descriptor
마지막으로 각각의 키포인트들의 descriptor는 키포인트들의 neighborhood에 의해 만들어지는데, 이러한 descriptor는 유사한 다른 이미지들에서 매칭을할때 쓰이게 된다.
'프로그래밍 > python' 카테고리의 다른 글
파이썬 SQLite Database 기본 사용법 정리 (0) | 2020.12.27 |
---|---|
파이썬 datetime 모듈로 날짜 관련형식 정복하기 (0) | 2020.12.25 |
파이썬 pandas 기초 정리 DataFrame 수정하기..3 (0) | 2020.12.25 |
파이썬 pandas 기초 정리 많이 쓰이는 기능..2 (0) | 2020.12.25 |
파이썬 pandas 기초 정리 데이터 읽고 쓰기..1 (0) | 2020.12.25 |