私は、ビデオ内の現在のフレームとあらかじめ保存されているフィーチャ記述子を比較することで、既知のオブジェクトを検出しようとしています。私の考えは、現在のフレームのフィーチャをあらかじめ保存されているフィーチャと照合し、良好なフィーチャの数があるしきい値を上回っている場合に肯定的な検出を報告することです。オブジェクトが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;
おかげで、まさに私は探していた! –