Java Code Examples for org.opencv.features2d.FeatureDetector#create()

The following examples show how to use org.opencv.features2d.FeatureDetector#create() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ImageTest.java    From onetwo with Apache License 2.0 7 votes vote down vote up
public static Mat FeatureSiftLannbased(Mat src, Mat dst){
	FeatureDetector fd = FeatureDetector.create(FeatureDetector.SIFT);
	DescriptorExtractor de = DescriptorExtractor.create(DescriptorExtractor.SIFT);
	DescriptorMatcher Matcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
	
	MatOfKeyPoint mkp = new MatOfKeyPoint();
	fd.detect(src, mkp);
	Mat desc = new Mat();
	de.compute(src, mkp, desc);
	Features2d.drawKeypoints(src, mkp, src);
	
	MatOfKeyPoint mkp2 = new MatOfKeyPoint();
	fd.detect(dst, mkp2);
	Mat desc2 = new Mat();
	de.compute(dst, mkp2, desc2);
	Features2d.drawKeypoints(dst, mkp2, dst);
	
	
	// Matching features
	MatOfDMatch Matches = new MatOfDMatch();
	Matcher.match(desc, desc2, Matches);
	
	List<DMatch> l = Matches.toList();
	List<DMatch> goodMatch = new ArrayList<DMatch>();
	for (int i = 0; i < l.size(); i++) {
		DMatch dmatch = l.get(i);
		if (Math.abs(dmatch.queryIdx - dmatch.trainIdx) < 10f) {
			goodMatch.add(dmatch);
		}
		
	}
	
	Matches.fromList(goodMatch);
	// Show result
	Mat OutImage = new Mat();
	Features2d.drawMatches(src, mkp, dst, mkp2, Matches, OutImage);
	
	return OutImage;
}
 
Example 2
Source File: MainActivity.java    From OpenCV-Android-Object-Detection with MIT License 6 votes vote down vote up
private void initializeOpenCVDependencies() throws IOException {
    mOpenCvCameraView.enableView();
    detector = FeatureDetector.create(FeatureDetector.ORB);
    descriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);
    matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
    img1 = new Mat();
    AssetManager assetManager = getAssets();
    InputStream istr = assetManager.open("a.jpeg");
    Bitmap bitmap = BitmapFactory.decodeStream(istr);
    Utils.bitmapToMat(bitmap, img1);
    Imgproc.cvtColor(img1, img1, Imgproc.COLOR_RGB2GRAY);
    img1.convertTo(img1, 0); //converting the image to match with the type of the cameras image
    descriptors1 = new Mat();
    keypoints1 = new MatOfKeyPoint();
    detector.detect(img1, keypoints1);
    descriptor.compute(img1, keypoints1, descriptors1);

}
 
Example 3
Source File: KMeansMatcher.java    From mvisc with GNU General Public License v3.0 5 votes vote down vote up
public KMeansMatcher()
{
	model = null;
	featureDetector = FeatureDetector.create(FeatureDetector.PYRAMID_ORB);
	descriptorExtractor = DescriptorExtractor.create(DescriptorExtractor.BRIEF);
	matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_SL2);
}
 
Example 4
Source File: ImageRecognition.java    From onetwo with Apache License 2.0 5 votes vote down vote up
public void init() {
	featureDetector = FeatureDetector.create(detectorType);
	descriptorExtractor = DescriptorExtractor.create(extractorType);
	
	if (this.writeDebugImage) {
		this.writeDestImageKeyPoints = true;
		this.writeCutMatchedImageFromSrc = true;
		this.writeMatchingImage = true;
		this.writeDrawMatchedLineImage = true;
	}
}
 
Example 5
Source File: PartialMatcher.java    From StormCV with Apache License 2.0 5 votes vote down vote up
/**
 * Calculates descriptors as defined by detectorType and 
 * descriptorType provided at construction for the provided image
 * @param input
 * @return
 * @throws IOException
 */
private Mat calculateDescriptors(byte[] buffer) throws IOException{
	MatOfByte mob = new MatOfByte(buffer);
	Mat image = Highgui.imdecode(mob, Highgui.CV_LOAD_IMAGE_ANYCOLOR);
	
	FeatureDetector siftDetector = FeatureDetector.create(detectorType);
	MatOfKeyPoint mokp = new MatOfKeyPoint();
	siftDetector.detect(image, mokp);
	
	Mat descriptors = new Mat();
	DescriptorExtractor extractor = DescriptorExtractor.create(descriptorType);
	extractor.compute(image, mokp, descriptors);
	return descriptors;
}
 
Example 6
Source File: FeatureMatcherOp.java    From StormCV with Apache License 2.0 5 votes vote down vote up
/**
 * Calculates descriptors as defined by detectorType and 
 * descriptorType provided at construction for the provided image
 * @param input
 * @return
 * @throws IOException
 */
private Mat calculateDescriptors(byte[] buffer) throws IOException{
	MatOfByte mob = new MatOfByte(buffer);
	Mat image = Highgui.imdecode(mob, Highgui.CV_LOAD_IMAGE_ANYCOLOR);
	
	FeatureDetector siftDetector = FeatureDetector.create(detectorType);
	MatOfKeyPoint mokp = new MatOfKeyPoint();
	siftDetector.detect(image, mokp);
	
	Mat descriptors = new Mat();
	DescriptorExtractor extractor = DescriptorExtractor.create(descriptorType);
	extractor.compute(image, mokp, descriptors);
	return descriptors;
}
 
Example 7
Source File: GripPipelineRedJewel.java    From FtcSamples with MIT License 4 votes vote down vote up
/**
 * Detects groups of pixels in an image.
 * @param input The image on which to perform the find blobs.
 * @param minArea The minimum size of a blob that will be found
 * @param circularity The minimum and maximum circularity of blobs that will be found
 * @param darkBlobs The boolean that determines if light or dark blobs are found.
 * @param blobList The output where the MatOfKeyPoint is stored.
 */
private void findBlobs(Mat input, double minArea, double[] circularity,
	Boolean darkBlobs, MatOfKeyPoint blobList) {
	FeatureDetector blobDet = FeatureDetector.create(FeatureDetector.SIMPLEBLOB);
	try {
		File tempFile = File.createTempFile("config", ".xml");

		StringBuilder config = new StringBuilder();

		config.append("<?xml version=\"1.0\"?>\n");
		config.append("<opencv_storage>\n");
		config.append("<thresholdStep>10.</thresholdStep>\n");
		config.append("<minThreshold>50.</minThreshold>\n");
		config.append("<maxThreshold>220.</maxThreshold>\n");
		config.append("<minRepeatability>2</minRepeatability>\n");
		config.append("<minDistBetweenBlobs>10.</minDistBetweenBlobs>\n");
		config.append("<filterByColor>1</filterByColor>\n");
		config.append("<blobColor>");
		config.append((darkBlobs ? 0 : 255));
		config.append("</blobColor>\n");
		config.append("<filterByArea>1</filterByArea>\n");
		config.append("<minArea>");
		config.append(minArea);
		config.append("</minArea>\n");
		config.append("<maxArea>");
		config.append(Integer.MAX_VALUE);
		config.append("</maxArea>\n");
		config.append("<filterByCircularity>1</filterByCircularity>\n");
		config.append("<minCircularity>");
		config.append(circularity[0]);
		config.append("</minCircularity>\n");
		config.append("<maxCircularity>");
		config.append(circularity[1]);
		config.append("</maxCircularity>\n");
		config.append("<filterByInertia>1</filterByInertia>\n");
		config.append("<minInertiaRatio>0.1</minInertiaRatio>\n");
		config.append("<maxInertiaRatio>" + Integer.MAX_VALUE + "</maxInertiaRatio>\n");
		config.append("<filterByConvexity>1</filterByConvexity>\n");
		config.append("<minConvexity>0.95</minConvexity>\n");
		config.append("<maxConvexity>" + Integer.MAX_VALUE + "</maxConvexity>\n");
		config.append("</opencv_storage>\n");
		FileWriter writer;
		writer = new FileWriter(tempFile, false);
		writer.write(config.toString());
		writer.close();
		blobDet.read(tempFile.getPath());
	} catch (IOException e) {
		e.printStackTrace();
	}

	blobDet.detect(input, blobList);
}
 
Example 8
Source File: GripPipelineBlueJewel.java    From FtcSamples with MIT License 4 votes vote down vote up
/**
 * Detects groups of pixels in an image.
 * @param input The image on which to perform the find blobs.
 * @param minArea The minimum size of a blob that will be found
 * @param circularity The minimum and maximum circularity of blobs that will be found
 * @param darkBlobs The boolean that determines if light or dark blobs are found.
 * @param blobList The output where the MatOfKeyPoint is stored.
 */
private void findBlobs(Mat input, double minArea, double[] circularity,
	Boolean darkBlobs, MatOfKeyPoint blobList) {
	FeatureDetector blobDet = FeatureDetector.create(FeatureDetector.SIMPLEBLOB);
	try {
		File tempFile = File.createTempFile("config", ".xml");

		StringBuilder config = new StringBuilder();

		config.append("<?xml version=\"1.0\"?>\n");
		config.append("<opencv_storage>\n");
		config.append("<thresholdStep>10.</thresholdStep>\n");
		config.append("<minThreshold>50.</minThreshold>\n");
		config.append("<maxThreshold>220.</maxThreshold>\n");
		config.append("<minRepeatability>2</minRepeatability>\n");
		config.append("<minDistBetweenBlobs>10.</minDistBetweenBlobs>\n");
		config.append("<filterByColor>1</filterByColor>\n");
		config.append("<blobColor>");
		config.append((darkBlobs ? 0 : 255));
		config.append("</blobColor>\n");
		config.append("<filterByArea>1</filterByArea>\n");
		config.append("<minArea>");
		config.append(minArea);
		config.append("</minArea>\n");
		config.append("<maxArea>");
		config.append(Integer.MAX_VALUE);
		config.append("</maxArea>\n");
		config.append("<filterByCircularity>1</filterByCircularity>\n");
		config.append("<minCircularity>");
		config.append(circularity[0]);
		config.append("</minCircularity>\n");
		config.append("<maxCircularity>");
		config.append(circularity[1]);
		config.append("</maxCircularity>\n");
		config.append("<filterByInertia>1</filterByInertia>\n");
		config.append("<minInertiaRatio>0.1</minInertiaRatio>\n");
		config.append("<maxInertiaRatio>" + Integer.MAX_VALUE + "</maxInertiaRatio>\n");
		config.append("<filterByConvexity>1</filterByConvexity>\n");
		config.append("<minConvexity>0.95</minConvexity>\n");
		config.append("<maxConvexity>" + Integer.MAX_VALUE + "</maxConvexity>\n");
		config.append("</opencv_storage>\n");
		FileWriter writer;
		writer = new FileWriter(tempFile, false);
		writer.write(config.toString());
		writer.close();
		blobDet.read(tempFile.getPath());
	} catch (IOException e) {
		e.printStackTrace();
	}

	blobDet.detect(input, blobList);
}
 
Example 9
Source File: GripPipeline.java    From FtcSamples with MIT License 4 votes vote down vote up
/**
 * Detects groups of pixels in an image.
 * @param input The image on which to perform the find blobs.
 * @param minArea The minimum size of a blob that will be found
 * @param circularity The minimum and maximum circularity of blobs that will be found
 * @param darkBlobs The boolean that determines if light or dark blobs are found.
 * @param blobList The output where the MatOfKeyPoint is stored.
 */
private void findBlobs(Mat input, double minArea, double[] circularity,
	Boolean darkBlobs, MatOfKeyPoint blobList) {
	FeatureDetector blobDet = FeatureDetector.create(FeatureDetector.SIMPLEBLOB);
	try {
		File tempFile = File.createTempFile("config", ".xml");

		StringBuilder config = new StringBuilder();

		config.append("<?xml version=\"1.0\"?>\n");
		config.append("<opencv_storage>\n");
		config.append("<thresholdStep>10.</thresholdStep>\n");
		config.append("<minThreshold>50.</minThreshold>\n");
		config.append("<maxThreshold>220.</maxThreshold>\n");
		config.append("<minRepeatability>2</minRepeatability>\n");
		config.append("<minDistBetweenBlobs>10.</minDistBetweenBlobs>\n");
		config.append("<filterByColor>1</filterByColor>\n");
		config.append("<blobColor>");
		config.append((darkBlobs ? 0 : 255));
		config.append("</blobColor>\n");
		config.append("<filterByArea>1</filterByArea>\n");
		config.append("<minArea>");
		config.append(minArea);
		config.append("</minArea>\n");
		config.append("<maxArea>");
		config.append(Integer.MAX_VALUE);
		config.append("</maxArea>\n");
		config.append("<filterByCircularity>1</filterByCircularity>\n");
		config.append("<minCircularity>");
		config.append(circularity[0]);
		config.append("</minCircularity>\n");
		config.append("<maxCircularity>");
		config.append(circularity[1]);
		config.append("</maxCircularity>\n");
		config.append("<filterByInertia>1</filterByInertia>\n");
		config.append("<minInertiaRatio>0.1</minInertiaRatio>\n");
		config.append("<maxInertiaRatio>" + Integer.MAX_VALUE + "</maxInertiaRatio>\n");
		config.append("<filterByConvexity>1</filterByConvexity>\n");
		config.append("<minConvexity>0.95</minConvexity>\n");
		config.append("<maxConvexity>" + Integer.MAX_VALUE + "</maxConvexity>\n");
		config.append("</opencv_storage>\n");
		FileWriter writer;
		writer = new FileWriter(tempFile, false);
		writer.write(config.toString());
		writer.close();
		blobDet.read(tempFile.getPath());
	} catch (IOException e) {
		e.printStackTrace();
	}

	blobDet.detect(input, blobList);
}
 
Example 10
Source File: ObjectDetection.java    From FTCVision with MIT License 4 votes vote down vote up
/**
 * Instantiate an object detector based on the FAST, BRIEF, and BRUTEFORCE_HAMMING algorithms
 */
public ObjectDetection() {
    detector = FeatureDetector.create(FeatureDetectorType.FAST.val());
    extractor = DescriptorExtractor.create(DescriptorExtractorType.BRIEF.val());
    matcher = DescriptorMatcher.create(DescriptorMatcherType.BRUTEFORCE_HAMMING.val());
}
 
Example 11
Source File: ImageTest.java    From onetwo with Apache License 2.0 4 votes vote down vote up
@Test
	public void imgMatching2() throws Exception {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//		Mat src_base = Imgcodecs.imread("D:\\test\\test5.jpg");
//		Mat src_test = Imgcodecs.imread("D:\\test\\test3.jpg");

		Mat src_base = Imgcodecs.imread("g:/test/find-src.jpg");
		Mat src_test = Imgcodecs.imread("g:/test/find-dest2.jpg");
		
		Mat gray_base = new Mat();
		Mat gray_test = new Mat();
		// 转换为灰度
		Imgproc.cvtColor(src_base, gray_base, Imgproc.COLOR_RGB2GRAY);
		Imgproc.cvtColor(src_test, gray_test, Imgproc.COLOR_RGB2GRAY);
		// 初始化ORB检测描述子
		FeatureDetector featureDetector = FeatureDetector.create(FeatureDetector.ORB);//特别提示下这里opencv暂时不支持SIFT、SURF检测方法,这个好像是opencv(windows) java版的一个bug,本人在这里被坑了好久。
		DescriptorExtractor descriptorExtractor = DescriptorExtractor.create(DescriptorExtractor.ORB);
		// 关键点及特征描述矩阵声明
		MatOfKeyPoint keyPoint1 = new MatOfKeyPoint(), keyPoint2 = new MatOfKeyPoint();
		Mat descriptorMat1 = new Mat(), descriptorMat2 = new Mat();
		// 计算ORB特征关键点
		featureDetector.detect(gray_base, keyPoint1);
		featureDetector.detect(gray_test, keyPoint2);
		

        Mat output=new Mat();
        Features2d.drawKeypoints(gray_base, keyPoint1, output );
        Imgcodecs.imwrite("g:/test/out.jpg", output);
        
		// 计算ORB特征描述矩阵
		descriptorExtractor.compute(gray_base, keyPoint1, descriptorMat1);
		descriptorExtractor.compute(gray_test, keyPoint2, descriptorMat2);
		float result = 0;
		// 特征点匹配
		System.out.println("test5:" + keyPoint1.size());
		System.out.println("test3:" + keyPoint2.size());
		if (!keyPoint1.size().empty() && !keyPoint2.size().empty()) {
			// FlannBasedMatcher matcher = new FlannBasedMatcher();
			DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_L1);
			MatOfDMatch matches = new MatOfDMatch();
			matcher.match(descriptorMat1, descriptorMat2, matches);
			// 最优匹配判断
			double minDist = 100;
			DMatch[] dMatchs = matches.toArray();
			int num = 0;
			for (int i = 0; i < dMatchs.length; i++) {
				if (dMatchs[i].distance <= 2 * minDist) {
					result += dMatchs[i].distance * dMatchs[i].distance;
					num++;
				}
			}
			// 匹配度计算
			result /= num;
		}
		System.out.println(result);
	}
 
Example 12
Source File: FeatureExtractionOp.java    From StormCV with Apache License 2.0 4 votes vote down vote up
@Override
public List<CVParticle> execute(CVParticle particle) throws Exception {
	List<CVParticle> result = new ArrayList<CVParticle>();
	if(!(particle instanceof Frame)) return result;
	
	Frame frame = (Frame)particle;
	if(frame.getImageType().equals(Frame.NO_IMAGE)) return result;
	try{
		MatOfByte mob = new MatOfByte(frame.getImageBytes());
		Mat image = Highgui.imdecode(mob, Highgui.CV_LOAD_IMAGE_ANYCOLOR);
		
		FeatureDetector siftDetector = FeatureDetector.create(detectorType);
		MatOfKeyPoint mokp = new MatOfKeyPoint();
		siftDetector.detect(image, mokp);
		List<KeyPoint> keypoints = mokp.toList();
		
		Mat descriptors = new Mat();
		DescriptorExtractor extractor = DescriptorExtractor.create(descriptorType);
		extractor.compute(image, mokp, descriptors);
		List<Descriptor> descrList = new ArrayList<Descriptor>();
		float[] tmp = new float[1];
		for(int r=0; r<descriptors.rows(); r++){
			float[] values = new float[descriptors.cols()];
			for(int c=0; c<descriptors.cols(); c++){
				descriptors.get(r, c, tmp);
				values[c] = tmp[0];
			}
			descrList.add(new Descriptor(frame.getStreamId(), frame.getSequenceNr(), new Rectangle((int)keypoints.get(r).pt.x, (int)keypoints.get(r).pt.y, 0, 0), 0, values));
		}
		
		Feature feature = new Feature(frame.getStreamId(), frame.getSequenceNr(), featureName, 0, descrList, null);
		if(outputFrame){
			frame.getFeatures().add(feature);
			result.add(frame);
		}else{
			result.add(feature);
		}		
	}catch(Exception e){
		// catching exception at this point will prevent the sent of a fail! 
		logger.warn("Unable to extract features for frame!", e);
	}
	return result;
}
 
Example 13
Source File: ObjectDetection.java    From FTCVision with MIT License 2 votes vote down vote up
/**
 * Instantiate an object detector based on custom algorithms
 *
 * @param detector  Keypoint detection algorithm
 * @param extractor Keypoint descriptor extractor
 * @param matcher   Descriptor matcher
 */
public ObjectDetection(FeatureDetectorType detector, DescriptorExtractorType extractor, DescriptorMatcherType matcher) {
    this.detector = FeatureDetector.create(detector.val());
    this.extractor = DescriptorExtractor.create(extractor.val());
    this.matcher = DescriptorMatcher.create(matcher.val());
}