List of usage examples for org.opencv.features2d Features2d drawMatches
public static void drawMatches(Mat img1, MatOfKeyPoint keypoints1, Mat img2, MatOfKeyPoint keypoints2, MatOfDMatch matches1to2, Mat outImg)
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); }