나는 다른 위치와 각도에서 플래시 카드를 들고 나를 캡처 한 이미지의 시퀀스가 있습니다. 플래시 카드에는 펭귄이 있습니다. 다음은 이 예제에 사용한 시퀀스의 두 프레임입니다. “C:opencvsamplescpp”에서 보면 예제 소스 파일 및 이미지의 큰 무질서한 혼란을 찾을 수 있습니다. 다음은 matcher_simple 예제에서 수행하는 방법을 보여 주지만 OpenCV는 키 포인트 위치에 작은 원을 그리는 cv2.drawKeyPoints() 함수도 제공합니다. 플래그를 전달하면 cv2. DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS에, 키 포인트의 크기와 원을 그릴 것입니다 그리고 그것은 심지어 방향을 표시 합니다. 아래 예제를 참조하십시오. 여기서는 두 이미지 간의 피처를 일치하는 방법에 대한 간단한 예제를 살펴보겠습니다. 이 경우 쿼리이미지와 trainImage가 있습니다. 우리는 쿼리를 찾기 위해 노력할 것입니다사진기능 일치를 사용하여 기차이미지. (이미지는 /샘플/c/box.png 및 /샘플/c/box_in_scene.png) `matcher_simple.cpp`의 예 중 하나는 기능 추출에 대한 소개를 제공합니다.

그것은 기본적으로 SURF를 사용하지만, 당신은 `Sift`와 `서핑`의 간단한 찾기 및 교체와 SIFT로 변경할 수 있습니다! FLANN은 근사한 가까운 이웃을 위한 빠른 라이브러리를 의미합니다. 여기에는 큰 데이터 집합에서 가장 가까운 이웃 검색과 고차원 기능에 최적화된 알고리즘 컬렉션이 포함되어 있습니다. 대용량 데이터 집합의 경우 BFMatcher보다 더 빠르게 작동합니다. FLANN 기반 매치러를 사용하면 두 번째 예제를 볼 수 있습니다. 이 자습서에서는 OpenCV의 `matcher_simple` 예제를 사용하여 SIFT 기능 추출 및 두 이미지 간의 SIFT 피처 일치를 다룹니다. 그러나 모든 이미지에서 학습된 개체를 식별할 수 있는 개체 인식 데모를 설정하는 것만큼 멀리 가지는 않습니다. 세계에서 객체의 고유한 속성은 특정 배율 범위에서 의미 있는 개체로만 존재한다는 것입니다. 간단한 예는 나무의 가지의 개념입니다, 이는 단지 몇 센티미터에서 몇 미터에, 예를 들어, 규모에서 의미가 있습니다. 나노미터 또는 킬로미터 수준에서 나무 개념을 논의하는 것은 의미가 없습니다. 그 규모에서 나무의 잎을 형성하는 분자, 또는 나무가 성장하는 숲에 대해 이야기하는 것이 더 관련이있다. 마찬가지로 특정 범위의 거친 스케일에서 클라우드에 대해 이야기하는 것은 의미가 있습니다. 미세한 스케일에서는 양성자와 전자 등으로 구성된 원자로 구성된 물 분자로 구성된 개별 방울을 고려하는 것이 더 적절합니다.

두 이미지 간의 기능을 일치시키기만 하면 SIFT의 작동 방식에 대한 좋은 예가 되지만, 학습된 개체를 실제로 인식하는 방법은 아닙니다. 예를 들어 비디오 스트림에서 펭귄 플래시 카드를 안정적으로 감지 할 수있는 예제를 설정하고 싶습니다. 예제 코드를 찾았을 때 다른 게시물을 작성하겠습니다. 예제에서 찾을 수 있는 유일한 설명서는 예제 코드에서 두 이미지에서 찾을 수 있는 모든 SIFT 기능을 추출하는 것입니다. 그런 다음 왼쪽 이미지의 각 기능에 대해 오른쪽 이미지에서 가장 가까운 일치 기능을 찾습니다. 왼쪽 이미지의 각 키포인트에서 오른쪽 이미지에서 가장 가까운 일치 지점까지 선을 그립니다. 나는 명확하게 잘못 일치하는 다섯 가지 기능을 볼 수 있지만, 그들 중 대부분은 올바른 것처럼 보인다. 시퀀스에서 두 개의 이미지를 가져와 서열에서 두 개의 이미지를 가져 간 다음 그 중 하나를 펭귄만 으로 자른 다음 두 이미지에서 예제를 실행했습니다.