私は、OpenCV を使用して単純なテンプレート マッチング プログラムを作成しました。これは、Android と OSx で驚くほど異なる結果を生成します。
まず、私が何をしているかを見てください:
IplImage *image = cvLoadImage("test3a.png", -1);
Mat templateMat(image);
// detecting keypoints
OrbFeatureDetector detector(500);
std::vector<KeyPoint> templateKeypoints;
detector.detect(templateMat, templateKeypoints);
// computing descriptors
Mat templateDescriptors;
OrbDescriptorExtractor extractor;
extractor.compute(templateMat, templateKeypoints, templateDescriptors);
// matches
BFMatcher matcher(cv::NORM_HAMMING2);
std::vector<std::vector<DMatch> > matches;
matcher.knnMatch(templateDescriptors, templateDescriptors, matches, 2);
次に、私が得ているものを見てください:
Android 4.2.2 を実行している Nexus i9250 と OSx 10.7(Lion) で同じスニペットを実行すると、次の結果が得られます。
- Mat オブジェクト: 両方の OS で同じ
- キーポイント: [Android の場合][2]、[OSx の場合][3]、[違い][4]
- 記述子: [Android の場合][5]、[OSx の場合][6]、[違い][7]
- 一致: [Android の場合][8]、[OSx の場合][9]、[違い][10]
注: これらのファイルを並べ替えても違いはありません。それで、私が得ていないのは、なぜ異なる順序の結果が得られるのですか?? さらなる計算のために必要なので、それらを順番に取得することが私の要件です。さらに、同じプラットフォームで同じコード スニペットを実行すると、常に同じ順序の結果が生成されます。
Stackexchange では、私のアカウントは投稿に 2 つ以上のリンクを投稿するように制限されているため、リンクのコメントを確認してください。