使用openCV和JavaCV的图像比较在最后一步停留 - 下一步

时间:2013-06-05 16:39:13

标签: java opencv image-processing javacv image-compression

以下是我使用现有示例编写的一个小代码,它是比较2个图像。要求是检查小图像是否是大图像的一部分。

    String smallUrl = "rsz_our-mobile-planet-us-infographic_infographics_lg_unberela.jpg";
    String largeUrl = "our-mobile-planet-us-infographic_infographics_lg.jpg";

    IplImage image = cvLoadImage(largeUrl,CV_LOAD_IMAGE_UNCHANGED );
    IplImage image2 = cvLoadImage(smallUrl,CV_LOAD_IMAGE_UNCHANGED ); 

    CvMat descriptorsA = new CvMat(null);
    CvMat descriptorsB = new CvMat(null);

    final FastFeatureDetector ffd = new FastFeatureDetector(40, true);
    final KeyPoint keyPoints = new KeyPoint();
    final KeyPoint keyPoints2 = new KeyPoint();

    ffd.detect(image, keyPoints, null);
    ffd.detect(image2, keyPoints2, null);

    System.out.println("keyPoints.size() : "+keyPoints.size());
    System.out.println("keyPoints2.size() : "+keyPoints2.size());
     // BRISK extractor = new  BRISK();
     //BriefDescriptorExtractor extractor = new BriefDescriptorExtractor();
    FREAK extractor = new FREAK();

    extractor.compute(image, keyPoints, descriptorsA);
    extractor.compute(image2, keyPoints2, descriptorsB);

    System.out.println("descriptorsA.size() : "+descriptorsA.size());
    System.out.println("descriptorsB.size() : "+descriptorsB.size());

    DMatch dmatch = new DMatch();
    //FlannBasedMatcher matcher = new FlannBasedMatcher();
    //DescriptorMatcher matcher = new DescriptorMatcher();

    BFMatcher matcher = new BFMatcher();
    matcher.match(descriptorsA, descriptorsB, dmatch, null);

    System.out.println(dmatch.capacity());

现在在调用match()方法之后,我需要判断小图像是否是大图像的一部分,可能有一些阈值,如90%匹配等。

我被困在这一点上,说实话,我不知道如何继续这一点。我猜可能与dmatch对象有关,我还发现还有其他方法,比如knnMatch和radiusMatch。但我仍然找不到适当的指导。

如果有人能在这一点上指导我,那将是一个很大的帮助。

0 个答案:

没有答案