2014-03-02 3 views
3

저는 Harris, FAST, ShiTomas, Noble과 같은 몇 가지 기능 감지기를 구현하는 우수한 GPUImage 라이브러리를 사용해 왔습니다. 그러나 이러한 구현 중 어느 것도 특징 추출 및 일치 부분을 지원하지 않습니다. 그들은 단순히 검출 된 모서리 점의 집합을 출력합니다.iOS 용 GPU 기반 SIFT 기능 추출기?

다음 단계는 감지 된 각 코너 점을 검사하여 그 때부터 피쳐를 추출하여 디스크립터가 될 수 있다는 것입니다 (즉, 32 또는 64 비트 숫자가 될 수 있음). 다른 유사한 지점에 가까운 지점을 색인화하는 데 사용됩니다.

[컴퓨터 비전 알고리즘 및 응용 프로그램, Szeliski]의 4.1 장을 읽으면 BestBin 방식을 사용하면 효율적으로 이웃 일치 기능을 찾는 데 도움이된다는 것을 알고 있습니다. 그러나이 방법은 실제로 알지 못합니다. 그리고 나는 이것을하는 몇 가지 예제 코드를 찾고있다.

GPU에서 가능한 한 많은 기능 추출을 구현한다고 주장하는이 프로젝트 [https://github.com/Moodstocks/sift-gpu-iphone]를 발견했습니다. 또한 버그 설명자를 생성 할 수 있음을 나타내는 토론을 보았습니다.

그리고 그 코드는 추출 된 피쳐가 다른 이미지와 가장 잘 어울리는 방법을 보여주지 않습니다.

이미지에서 객체를 찾으려면 유스 케이스를 사용하십시오.

사람이이 작업을 수행하는 코드가 있거나 추출 된 기능이 어떻게 일치하는지 보여주는 좋은 구현이 있습니까? 나는 전체 알고리즘 세트를 다시 작성하지 않기를 바라고있다.

감사합니다, Rob.

답변

2

우선, the SIFT algorithm is patented과 그 특허 소유자는 사용료가 필요하므로 SIFT 구현에주의해야합니다. 결과적으로 그 알고리즘을 의도적으로 사용하지 않았습니다.

GPU에서도 잘 작동하는 우수한 기능 감지 및 추출 방법을 찾는 것은 약간 까다 롭습니다. GPUImage의 Harris, Shi-Tomasi 및 Noble 코너 감지기는 모두 동일한 기본 작업의 파생물이며 기능을 식별하는 가장 빠른 방법은 아닙니다.

내가 알 수 있듯이, 내 FAST 코너 감지기는 아직 작동하지 않습니다. 아이디어는 로컬 바이너리 패턴을 기반으로하는 조회 텍스처를 사용하는 것입니다 (개념을 테스트하기 위해 먼저 필터를 만든 이유). 그리고 그것이 구석 점인지 아닌지 여부를 반환하는 것이 좋습니다. Harris 등 코너 감지기보다 훨씬 빠릅니다. 또한 히스토그램 피라미드 점 추출기를 완료해야만 피쳐 추출이 GPU의 매우 느린 루프에서 수행되지 않습니다.

FAST 코너 감지기에 조회 텍스처를 사용하면 Jaco Cronje가 BFROST라고 부르는 기술에 대해 this paper에서 영감을 얻었습니다. 이 논문은 특징 검출을위한 빠른 텍스처 기반 룩업을 사용하는 것 외에도 이진 패턴을 특징에 대한 빠른 기술자로 사용하는 것을 제안한다. 그보다 조금 더 많은 것이 있지만 일반적으로 그들이 제안한 것입니다.

특징 매칭은 Hamming distance로 수행되지만, 계산을위한 빠른 CPU 측 및 CUDA 명령이 있지만 OpenGL ES에는 해밍 거리가 없습니다. 거기에는 다른 접근법이 필요할 수 있습니다. 마찬가지로, 나는 CPU의 측면을 뛰어 넘는 기능 그룹 간의 최상의 매치를 찾기위한 좋은 해결책이 없지만, 아직까지 그렇게 생각하지는 못했다.

프레임 워크 (그것이 내가 그것을 구축하는 이유 중 하나)에서 이것을 가지고 광산의 주요 목표이지만, 요즘이 작업 할 수있는 시간이 없었어요. 위의 내가이 접근 할 방법에 적어도 내 생각,하지만 난이 쉽게 구현할 수 없음을 경고.

+0

네,뿐만 아니라, GPUImage 프로젝트 작업을 통해 다음뿐만 아니라 그 티켓을 건지 러, 그래서 FAST 구현하는 방법에 대한 티켓을 발견했다 있었어요. 다음 (아기) 단계로 , 나는 현재 감지기 기능을 추출하지 않는다는 것을 알아 차리지하고있다. 설명자를 만들고 색인을 생성하는 다른 필터에 출력을 공급해야하는 것처럼 보입니다. 그 시점에서 가 나는 기능이 아닌 수십만 만 다루고있어 이후에서, CPU에서 알고리즘을 할 수 있다고 생각. 그게 합리적이라고 생각하니? – Rob

+0

이 도서관을 보았습니까? https://www.vuforia.com/platform. OpenGL을 사용하여 이미지의 객체도 감지합니다. 명백하게 무료, 어떤 요금이 아니라도. – Rob

0

물체 인식을 위해/(전 몇 주 현재) 요즘 가장이에 대한/길쌈 신경망을 tensorflow 사용할 수 있습니다. 애플은 일부 금속의 샘플 코드는 최근에 추가 된 있습니다. https://developer.apple.com/library/content/samplecode/MetalImageRecognition/Introduction/Intro.html#//apple_ref/doc/uid/TP40017385

이미지 내에서 기능을 감지하려면 - opencv로 KAZE/AKAZE 알고리즘을 사용하자. http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html

ios의 경우 설명하기 위해 Akaze 클래스를 다른 바느질 샘플과 함께 붙였습니다.

https://github.com/johndpope/OpenCVSwiftStitch

detector = cv::AKAZE::create(); 
detector->detect(mat, keypoints); // this will find the keypoints 

cv::drawKeypoints(mat, keypoints, mat); 

// this is the pseudo SIFT descriptor 
.. [255] = { 
pt = (x = 645.707153, y = 56.4605064) 
size = 4.80000019 
angle = 0 
response = 0.00223364262 
octave = 0 
class_id = 0 } 

enter image description here