2017-01-09 5 views
0

私は、ビデオ内の現在のフレームとあらかじめ保存されているフィーチャ記述子を比較することで、既知のオブジェクトを検出しようとしています。私の考えは、現在のフレームのフィーチャをあらかじめ保存されているフィーチャと照合し、良好なフィーチャの数があるしきい値を上回っている場合に肯定的な検出を報告することです。オブジェクトがOpenCVのシーンにないときに `DescriptorMatcher`は何をしますか?

しかし、DescriptorMatcherは、オブジェクトが実際にシーン内にあるかどうかにかかわらず、一定の固定数を常に報告するため、動作していないようです。私はきれいな従来のフィルタリング手法を使用して上位x個の良い一致を維持していますが、それはまだ現在のフレームに関連するメトリックです。

DescriptorMatcherのマッチのようなものがありますか?ハード・スレッショルドとして使用する可能性はありますか?これにはより良いアプローチがありますか?私は以前にBag of Wordsを使っていましたが、手元に問題が残っているように思われます。また、私のニーズには余りにも徹底的に計算されています。任意の提案/ヒント/ポインタがありがとうございます。

ImageDescriptor imageDescriptor = null; 
imageDescriptor = ImageDescriptor.fromJson(jsonMetadata); 
Mat storedDescriptors = imageDescriptor.getFeatureDescriptors(); // prestored features 

FeatureDetector featureDetector = FeatureDetector.create(FeatureDetector.ORB); 
DescriptorExtractor descriptorExtractor = DescriptorExtractor.create(DescriptorExtractor.ORB); 
DescriptorMatcher descriptorMatcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING); 

MatOfKeyPoint keyPoints = new MatOfKeyPoint(); 
featureDetector.detect(rgba, keyPoints); // rgba is the image from current video frame 

MatOfDMatch matches = new MatOfDMatch(); 
Mat currDescriptors = new Mat(); 

descriptorExtractor.compute(rgba, keyPoints, currDescriptors); 
descriptorMatcher.match(descriptors_scene, storedDescriptors, matches); 

MatOfDMatch good_matches = filterMatches(matches); // filterMatches return the matches that have a distance measure of < 2.5*min_distance 

if(good_matches.rows()>threshold) 
    return true; 

return false; 

答えて

0

descriptorMatcherは常に見つける(または見つけようとします)ベストマッチ(= smalles距離と一致)をされます、それはマッチが実際に本当に正しいかどうかをを伝えることはできません。どの試合が正しいかを推測するいくつかのアプローチがあり、試合は間違っています。

  1. マッチの障害を見てください。距離の値が大きすぎると、(たとえそれがすべてのキーポイントの中で最小の距離であったとしても)マッチが正しくない可能性があります。

  2. ベストマッチを計算するのではなく、2番目のベストマッチも計算してください。 2番目にベストマッチがほぼ同じ品質(=同じ距離)であれば、その1つが良いマッチであると判断することはできません。

  3. は、RANSACを使用して堅牢なホモグラフィを計算します。あなたの試合に十分なinlierが現れれば、それらの試合はかなり頑強になるかもしれません。

  4. 4と同じ

    ではなく、ホモグラフィ

の基礎行列は、それをチェックしますが、多分これを見ていませんでした:https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/calib3d/real_time_pose_estimation/src/RobustMatcher.h

http://docs.opencv.org/3.1.0/dc/d2c/tutorial_real_time_pose.html

+0

おかげで、まさに私は探していた! –

関連する問題