如何处理orb功能匹配?

时间:2012-10-24 21:56:22

标签: java android opencv computer-vision

我正在 Android 上的 OpenCV 中的徽标检测应用程序中工作。我有很多搜索,并发现为此目的,大多数时候使用特征检测。

所以我搜索并尝试了不同的探测器和匹配器,最后我编写了一个适用于 ORBFeatureDetector BruteForce匹配器的代码:

private DescriptorMatcher BruteMatcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);

我找到了匹配数量,最小距离和好匹配数量,如下所示:

 List<DMatch> matches = mat_of_matches.toList();
        double max_dist =0, min_dist= 100;
        int row_count = matches.size();
        for(int i=0;i<row_count;i++)
        {
            double dist = matches.get(i).distance;
            //System.out.println("dist="+dist);
            if(dist<min_dist)min_dist = dist;
            if(dist>max_dist)max_dist = dist;


        }


       // Log.e("Max_dist,Min_dist", "Max="+max_dist+", Min="+min_dist);
        List<DMatch> good_matches = new ArrayList<DMatch>();

        double good_dist = 3*min_dist;

        for(int i =0;i<row_count; i++)
        {

            if(matches.get(i).distance<good_dist)
            {

                good_matches.add(matches.get(i));
                //Log.e("good_matches", "good_match_id="+matches.get(i).trainIdx);

            }

        }

,最后我创建了一个这样的阈值:

if(row_count>490&&good_matches.size()<60&&min_dist<12)logo_detected=true;
else logo_detected=false;

问题是,对于访问阈值的许多其他事情,应用程序仍然会检测到徽标。

我想知道如何处理检测到的匹配功能?这是正确的做法(阈值处理)吗?或者我是否需要做其他事情来检测徽标?

请帮助,谢谢。

0 个答案:

没有答案