예를 들어 OpenCV를 사용할 때 SIFT 또는 SURF와 같은 알고리즘이 키포인트를 감지하는 데 자주 사용됩니다. 내 질문은 실제로 이러한 핵심 포인트는 무엇입니까?
나는 그들이 이미지에서 일종의 “관심 지점”이라는 것을 이해합니다. 나는 또한 그것들이 규모가 변하지 않고 원형이라는 것을 알고 있습니다.
또한 오리엔테이션이 있다는 것을 알았지 만 이것이 실제로 무엇인지 이해할 수 없었습니다. 각도이지만 반경과 무언가 사이입니까? 설명해 주시겠습니까? 먼저 필요한 것이 더 간단하고 그 후에는 논문을 이해하는 것이 더 쉬울 것이라고 생각합니다.
답변
아주 좋은 질문입니다. 각 요점을 하나씩 다룹니다.
내 질문은 실제로 이러한 핵심 포인트는 무엇입니까?
키포인트는 관심 포인트와 동일합니다. 그것들은 공간적 위치 또는 이미지에서 흥미로운 점 이나 이미지에서 두드러지는 것을 정의하는 점입니다 . 관심 지점 감지는 실제로 이미지에서 관심 영역이나 공간 영역을 찾는 것을 목표로하는 얼룩 감지 의 하위 집합입니다 . 키포인트가 특별한 이유는 이미지가 어떻게 변하든 … 이미지가 회전, 축소 / 확장, 변환 (이것들은 모두 아핀 변환 이 될 것입니다 …)하거나 왜곡되기 때문입니다 ( 즉, 투영 변환 또는 동질화 ), 동일한 것을 찾을 수 있어야합니다.원본 이미지와 비교할 때이 수정 된 이미지의 키포인트. 다음은 내가 얼마 전에 작성한 게시물의 예입니다.
출처 : module ‘객체에’drawMatches ‘속성이 없습니다 .opencv python
오른쪽 이미지는 왼쪽 이미지의 회전 버전입니다. 또한 두 이미지 사이의 상위 10 개 일치 항목 만 표시했습니다. 상위 10 개 경기를 살펴보면 이미지가 무엇에 관한 것인지 기억할 수 있도록 초점을 맞추고 싶을 것입니다. 카메라맨의 얼굴뿐만 아니라 카메라, 삼각대 및 배경에있는 건물의 흥미로운 텍스처에 초점을 맞추고 싶습니다. 두 이미지 사이에서 이러한 동일한 점이 발견 되었으며 성공적으로 일치되었음을 알 수 있습니다.
따라서 여기서 빼야 할 점은 이미지에서 흥미로운 점이며 이미지가 어떻게 왜곡 되더라도 발견되어야한다는 것입니다.
나는 그들이 이미지의 일종의 “관심 지점”이라는 것을 이해합니다. 나는 또한 그것들이 스케일 불변이며 원형이라는 것을 알고 있습니다.
당신이 올바른지. Scale invariant는 이미지의 크기를 조정하더라도 여전히 해당 포인트를 찾을 수 있어야 함을 의미합니다.
이제 디스크립터 부분 을 살펴 보겠습니다 . 프레임 워크간에 키포인트를 다르게 만드는 것은 이러한 키포인트 를 설명 하는 방식 입니다. 이것을 설명자라고 합니다. 감지 한 각 키포인트에는 함께 제공되는 연관된 설명자가 있습니다. 일부 프레임 워크는 키포인트 감지 만 수행하는 반면 다른 프레임 워크는 단순히 설명 프레임 워크이며 포인트를 감지하지 않습니다. 둘 다 수행 하는 일부도 있습니다 . 키포인트를 감지 하고 설명합니다. SIFT 및 SURF는 키포인트를 감지하고 설명하는 프레임 워크의 예입니다.
설명자는 주로 키포인트 의 크기 와 방향 에 모두 관련됩니다 . 우리가 그 개념을 정해 놓은 키포인트가 있지만, 다른 이미지의 키포인트를 일치시키려는 목적이라면 디스크립터 부분이 필요합니다 . 자, “원형”이 의미하는 바는 점이 감지 된 척도와 관련이 있습니다. 예를 들어 VLFeat Toolbox 튜토리얼 에서 가져온 다음 이미지를 살펴보십시오 .
노란색 포인트는 관심 포인트이지만 일부 포인트는 원 반경이 다릅니다. 이들은 규모 를 다룹니다 . 일반적인 의미에서 관심 지점이 작동하는 방식은 이미지를 여러 스케일로 분해한다는 것입니다. 각 척도에서 관심 지점을 확인하고 이러한 모든 관심 지점을 결합하여 최종 결과물을 만듭니다. “원”이 클수록 포인트가 감지 된 눈금이 커집니다 . 또한 원의 중심에서 가장자리까지 방사되는 선이 있습니다. 이것이 다음에 다룰 키포인트 의 방향 입니다.
또한 그들이 오리엔테이션이 있다는 것을 알았지 만 실제로 그것이 무엇인지 이해할 수 없었습니다. 각도이지만 반경과 무언가 사이?
기본적으로 규모와 방향에 관계없이 키포인트를 감지하려는 경우 키포인트의 방향 에 대해 이야기 할 때 실제로 의미하는 것은 키포인트를 둘러싼 픽셀 주변을 검색하고이 픽셀 주변의 방향 또는이 패치의 방향을 파악한다는 것입니다. 어떤 디스크립터 프레임 워크를 보느냐에 따라 다르지만 일반적인 요점은 패치에서 그라디언트 각도 의 가장 지배적 인 방향 을 감지하는 것 입니다. 이것은 매칭에 중요합니다키포인트를 함께 일치시킬 수 있습니다. 두 명의 카메라맨이 가진 첫 번째 그림을 살펴보십시오. 하나는 회전하고 다른 하나는 회전하지 않습니다. 이러한 점 중 일부를 살펴보면 한 점이 다른 점과 어떻게 일치하는지 어떻게 알 수 있습니까? 우리는 키포인트 를 둘러싼 지점을 살펴보고 이러한 모든 지점이 어떤 방향에 있는지 확인 하기 때문에 관심 지점으로서 카메라맨의 상단이 회전 된 버전과 일치하는지 쉽게 식별 할 수 있습니다 . 방향이 계산됩니다.
일반적으로 키포인트를 감지하려면 위치 만 살펴 봅니다. 그러나 이미지간에 키포인트 를 일치 시키려면 이를 용이하게하기 위해 반드시 배율과 방향이 필요합니다.
도움이 되었기를 바랍니다!
답변
저는 SURF에 익숙하지 않지만 SURF의 기반이되는 SIFT에 대해 말할 수 있습니다. 마지막에 SURF에 대한 몇 가지 메모를 제공했지만 모든 세부 사항을 알지 못합니다.
SIFT 는 이미지에서 매우 독특한 위치 (또는 키포인트 ) 를 찾는 것을 목표로 합니다. 위치는 단순히 이미지의 2D 위치가 아니라 이미지의 축척 공간 에있는 위치입니다. 즉 , x , y 및 scale의 세 좌표가 있습니다 . SIFT 키포인트를 찾는 프로세스는 다음과 같습니다.
- 다른 블러 폭과 샘플링 속도로 이미지를 블러 및 리샘플링하여 스케일 공간을 만듭니다.
- Gaussians 방법 의 차이를 사용하여 다른 스케일에서 얼룩을 감지합니다. 블롭 중심은 주어진 x , y 및 스케일 에서 키포인트가됩니다.
- 주변의 모든 픽셀에 대한 그라디언트 방향의 히스토그램을 계산하고 카운트 수가 가장 많은 방향 빈을 선택하여 모든 키포인트에 방향 을 할당 합니다.
- 16 개의 지역 이웃에있는 픽셀의 그라데이션 방향을 기반으로 모든 키포인트에 128 차원 특징 벡터 를 할당합니다.
2 단계는 스케일 불변을 제공하고 3 단계는 회전 불변을 제공하며 4 단계는 키포인트를 식별하는 데 사용할 수있는 일종의 “지문”을 제공합니다. 함께 사용하여 여러 이미지의 모든 방향 및 배율에서 동일한 기능의 발생을 일치시킬 수 있습니다.
SURF 는 SIFT와 동일한 목표를 달성하는 것을 목표로하지만 속도를 높이기 위해 몇 가지 영리한 트릭을 사용합니다.
얼룩 감지를 위해 Hessian 방법 의 결정자를 사용합니다 . 지배적 인 방향은 Haar 웨이블릿에 대한 수평 및 수직 응답을 조사하여 찾을 수 있습니다. 기능 설명자는 SIFT와 유사하여 16 개 지역의 픽셀 방향을 살펴 보지만 결과적으로 64 차원 벡터가 생성됩니다.
SURF 기능은 SIFT 기능보다 최대 3 배 더 빠르게 계산할 수 있지만 대부분의 상황에서 강력합니다.
참고로 :