2014-02-09 4 views
0

MATLAB에 통합 된 opencv로 작업하고 있습니다. Opencv의 Features2D 및 Nonfree 라이브러리를 사용하여 다른 키포인트 탐지 및 설명 알고리즘을 실행하고 있습니다.MATLAB 입력을 계속해서 실행하고 기다리는 C++ mexx

많은 테스트를 거친 끝에 BRISK가 내 데이터를 잘 수행하고 있음을 확인했습니다. 문제는 BRISK 클래스의 생성자가 다른 알고리즘에 비해 매우 느리다는 것입니다. 이 줄 번호 :

BRISK 감지기 (10,3,1.0f);

은 검출보다 더 느린 순서이며 설명은 모두 일치합니다. 이제 새로운 이미지가 도착할 때마다 mex 파일을 실행하고 모든 선언과 클래스 구성이 다시 완료되어 느려집니다.

mex 파일을 시작하는 방법은 MATLAB 스크립트의 시작 부분 (mex 파일에 새로운 이미지를 보내는 루프 앞에 있음)에서 시작하여 필요한 모든 선언을 만들고 MATLAB의 입력을 위해 백그라운드에서 기다리게합니다. . 이렇게하면 코드가 훨씬 빨라집니다. BRISK의 제작자가 제공 한 matlab API에서이 방법으로 처리 된 것 같지만 내 자신의 mex 코드에서 동일한 작업을 수행 할 방법을 찾지 못했습니다.

나는 이것을 stackoverflow에서 검색해 보았지만, 무엇을 검색해야하는지, 또는 이런 종류의 것이 불려지는지 정말로 알지 못한다.

감사합니다.

답변

0

mex 호출간에 개체를 영구적으로 만들 수있는 방법을 찾고 있습니까? here이 (편집)를 참조하십시오 :

예, 당신은 C 통화 사이의 지속적인 ++ 오브젝트 할 수 있습니다, 당신은 Matlab의 작업 영역에 포인터를 반환하지 않습니다. mexFunction 진입 점 위에 개체를 정의하기 만하면됩니다. mex 파일이 메모리에 남아 있으면 (즉, mex 파일을 지우지 않은 경우) 영속으로 유지됩니다 ( ).