Example usage for org.opencv.features2d Features2d drawMatches

List of usage examples for org.opencv.features2d Features2d drawMatches

Introduction

In this page you can find the example usage for org.opencv.features2d Features2d drawMatches.

Prototype

public static void drawMatches(Mat img1, MatOfKeyPoint keypoints1, Mat img2, MatOfKeyPoint keypoints2,
            MatOfDMatch matches1to2, Mat outImg) 

Source Link

Usage

From source file:OCV_FeatureDetection.java

License:Open Source License

@Override
public void run(ImageProcessor ip) {
    // QueryImage
    int[] arr_query = (int[]) imp_query.getChannelProcessor().getPixels();
    int imw_query = imp_query.getWidth();
    int imh_query = imp_query.getHeight();
    Mat mat_query = new Mat(imh_query, imw_query, CvType.CV_8UC3);
    OCV__LoadLibrary.intarray2mat(arr_query, mat_query, imw_query, imh_query);

    // TrainImage
    int[] arr_train = (int[]) imp_train.getChannelProcessor().getPixels();
    int imw_train = imp_train.getWidth();
    int imh_train = imp_train.getHeight();
    Mat mat_train = new Mat(imh_train, imw_train, CvType.CV_8UC3);
    OCV__LoadLibrary.intarray2mat(arr_train, mat_train, imw_train, imh_train);

    // KeyPoint//from w  w  w  .j ava 2  s . c o m
    MatOfKeyPoint key_query = new MatOfKeyPoint();
    MatOfKeyPoint key_train = new MatOfKeyPoint();
    detector.detect(mat_query, key_query);
    detector.detect(mat_train, key_train);

    // Descriptor
    DescriptorExtractor extractor = DescriptorExtractor.create(type_ext);
    Mat desc_query = new Mat();
    Mat desc_train = new Mat();
    extractor.compute(mat_query, key_query, desc_query);
    extractor.compute(mat_train, key_train, desc_train);

    // Matcher
    DescriptorMatcher matcher = DescriptorMatcher.create(TYPE_VAL_MATCH[ind_match]);
    MatOfDMatch dmatch = new MatOfDMatch();
    matcher.match(desc_query, desc_train, dmatch);

    dmatch = showData(key_query, key_train, dmatch);

    // Output
    if (enDrawMatches) {
        Mat mat_dst = new Mat();
        Features2d.drawMatches(mat_query, key_query, mat_train, key_train, dmatch, mat_dst);

        String title_dst = WindowManager.getUniqueName("FeatureDetection");
        int imw_dst = mat_dst.cols();
        int imh_dst = mat_dst.rows();
        ImagePlus imp_dst = new ImagePlus(title_dst, new ColorProcessor(imw_dst, imh_dst));
        int[] arr_dst = (int[]) imp_dst.getChannelProcessor().getPixels();
        OCV__LoadLibrary.mat2intarray(mat_dst, arr_dst, imw_dst, imh_dst);
        imp_dst.show();
    }
}

From source file:imageanalyzercv.ImageAnalyzerCV.java

/**
 * @param args the command line arguments
 *//*from www  .j a  v a2  s  .c o  m*/
public static void main(String[] args) {
    System.out.println("path: " + System.getProperty("java.library.path"));
    System.loadLibrary("opencv_java300");

    Mat m = Highgui.imread("/Users/chintan/Downloads/software/image_analyis/mydata/SAM_0763.JPG");
    System.out.println("m = " + m.height());
    MatOfKeyPoint points = new MatOfKeyPoint();
    FeatureDetector.create(FeatureDetector.SURF).detect(m, points);

    Mat m2 = Highgui.imread("/Users/chintan/Downloads/software/image_analyis/mydata/SAM_0764.JPG");
    System.out.println("m = " + m2.height());
    MatOfKeyPoint points2 = new MatOfKeyPoint();
    FeatureDetector.create(FeatureDetector.SURF).detect(m2, points2);

    DescriptorExtractor SurfExtractor = DescriptorExtractor.create(DescriptorExtractor.BRISK);
    Mat imag1Desc = new Mat();
    SurfExtractor.compute(m, points, imag1Desc);

    Mat imag2Desc = new Mat();
    SurfExtractor.compute(m2, points2, imag2Desc);

    MatOfDMatch matches = new MatOfDMatch();

    Mat imgd = new Mat();
    imag1Desc.copyTo(imgd);
    System.out.println(imgd.size());
    DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING).match(imag2Desc, imag1Desc,
            (MatOfDMatch) matches);

    double min_distance = 1000.0;
    double max_distance = 0.0;
    DMatch[] matchArr = matches.toArray();
    for (int i = 0; i < matchArr.length; i++) {
        if (matchArr[i].distance > max_distance)
            max_distance = matchArr[i].distance;
        if (matchArr[i].distance < min_distance)
            min_distance = matchArr[i].distance;
    }

    ArrayList<DMatch> good_matches = new ArrayList<DMatch>();

    System.out.println("Min Distance: " + min_distance + "  Max distance: " + max_distance);
    double totalScore = 0.0;
    for (int j = 0; j < imag1Desc.rows() && j < matchArr.length; j++) {
        if ((matchArr[j].distance <= (11 * min_distance)) && (matchArr[j].distance >= min_distance * 1)) {
            good_matches.add(matchArr[j]);
            //System.out.println(matchArr[j]);
            totalScore = totalScore + matchArr[j].distance;

        }
        //good_matches.add(matchArr[j]);

    }
    System.out.println((1 - (totalScore / (good_matches.size() * ((max_distance + min_distance) / 2)))) * 100);
    // System.out.println(matches.toList().size());
    Mat out = new Mat();
    MatOfDMatch mats = new MatOfDMatch();
    mats.fromList(good_matches);
    Features2d.drawMatches(m2, points2, m, points, mats, out);
    Highgui.imwrite("/Users/chintan/Downloads/one2.jpg", out);
}

From source file:Recognizer.Recognizer.java

public void SIFT(Image imQ, Image imDB) {
    Mat Q = imQ.Image1CtoMat_CV();
    Mat DB = imDB.Image1CtoMat_CV();

    Mat matQ = new Mat();
    Mat matDB = new Mat();

    Q.convertTo(matQ, CvType.CV_8U);//from  w w w . ja  v  a 2s . c  o  m
    DB.convertTo(matDB, CvType.CV_8U);

    FeatureDetector siftDet = FeatureDetector.create(FeatureDetector.SIFT);
    DescriptorExtractor siftExt = DescriptorExtractor.create(DescriptorExtractor.SIFT);

    MatOfKeyPoint kpQ = new MatOfKeyPoint();
    MatOfKeyPoint kpDB = new MatOfKeyPoint();

    siftDet.detect(matQ, kpQ);
    siftDet.detect(matDB, kpDB);

    Mat matDescriptorQ = new Mat(matQ.rows(), matQ.cols(), matQ.type());
    Mat matDescriptorDB = new Mat(matDB.rows(), matDB.cols(), matDB.type());

    siftExt.compute(matQ, kpQ, matDescriptorQ);
    siftExt.compute(matDB, kpDB, matDescriptorDB);

    MatOfDMatch matchs = new MatOfDMatch();

    DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE);

    matcher.match(matDescriptorQ, matDescriptorDB, matchs);

    int N = 10;

    DMatch[] tmp01 = matchs.toArray();
    DMatch[] tmp02 = new DMatch[N];

    for (int i = 0; i < tmp02.length; i++) {
        tmp02[i] = tmp01[i];
    }

    matchs.fromArray(tmp02);

    Mat matchedImage = new Mat(matQ.rows(), matQ.cols() * 2, matQ.type());
    Features2d.drawMatches(matQ, kpQ, matDB, kpDB, matchs, matchedImage);

    Highgui.imwrite("./descriptedImageBySIFT.jpg", matchedImage);

}