List of usage examples for org.opencv.ml RTrees create
public static RTrees create()
From source file:qupath.opencv.classify.RTreesClassifier.java
License:Open Source License
@Override protected RTrees createClassifier() { RTrees trees = RTrees.create(); ParameterList params = getParameterList(); if (params != null) { int maxDepth = params.getIntParameterValue("maxDepth"); int minSamples = params.getIntParameterValue("minSamples"); boolean use1SE = params.getBooleanParameterValue("use1SE"); trees.setMaxDepth(maxDepth == 0 ? Integer.MAX_VALUE : maxDepth); trees.setMinSampleCount(minSamples); trees.setUse1SERule(use1SE);// w w w . j av a2 s . c o m // setUseSurrogates should help with missing data... but it appears not actually to be implemented // System.out.println("DEFAULT SURROGATES: " + trees.getUseSurrogates()); // trees.setUseSurrogates(true); // Set termination criteria int termCritMaxTrees = params.getIntParameterValue("termCritMaxTrees"); double termCritEPS = params.getDoubleParameterValue("termCritEPS"); termCriteria = createTerminationCriteria(termCritMaxTrees, termCritEPS); if (termCriteria != null) trees.setTermCriteria(termCriteria); else termCriteria = trees.getTermCriteria(); logger.info("RTrees classifier termination criteria: {}", termCriteria); } // lastDescription = getName() + "\n\nMain parameters:\n " + DefaultPluginWorkflowStep.getParameterListJSON(params, "\n ") + "\n\nTermination criteria:\n " + termCriteria.toString(); // // } else // lastDescription = null; // trees.setCVFolds(5); // Seems to cause segfault... // trees.setCalculateVarImportance(true); // Seems to require surrogates, but... // trees.setUseSurrogates(true); // // Seems not yet to be supported... return trees; }
From source file:qupath.opencv.TissueSegmentationCommand.java
License:Open Source License
@Override public void hierarchyChanged(PathObjectHierarchyEvent event) { if (img == null || isChanging || event.isChanging()) return;/*from www . ja va 2 s .com*/ List<PathObject> annotations = hierarchy.getObjects(null, PathAnnotationObject.class); if (annotation != null) annotations.remove(annotation); List<PathObject> background = new ArrayList<>(); List<PathObject> foreground = new ArrayList<>(); PathClass whitespaceClass = PathClassFactory.getDefaultPathClass(PathClasses.WHITESPACE); for (PathObject a : annotations) { if (a == annotation) continue; if (a.getPathClass() == whitespaceClass) background.add(a); else foreground.add(a); } if (background.isEmpty() || foreground.isEmpty()) return; // Create labels Graphics2D g2d = imgMask.createGraphics(); g2d.setColor(Color.BLACK); g2d.fillRect(0, 0, img.getWidth(), img.getHeight()); g2d.scale((double) img.getWidth() / imageData.getServer().getWidth(), (double) img.getHeight() / imageData.getServer().getHeight()); g2d.setColor(Color.GRAY); for (PathObject a : background) { g2d.draw(PathROIToolsAwt.getShape(a.getROI())); } g2d.setColor(Color.WHITE); for (PathObject a : foreground) { g2d.draw(PathROIToolsAwt.getShape(a.getROI())); } g2d.dispose(); // Get the data to classify RTrees trees = RTrees.create(); byte[] bytes = ((DataBufferByte) imgMask.getRaster().getDataBuffer()).getData(); int n = 0; for (int i = 0; i < bytes.length; i++) { byte b = bytes[i]; if (b == (byte) 0) continue; if (b == (byte) 255) { trainingResponses[n] = 2; } else { trainingResponses[n] = 1; } for (int k = 0; k < featureStride; k++) training[n * featureStride + k] = features[i * featureStride + k]; n++; } Mat matTraining = new Mat(n, featureStride, CvType.CV_32FC1); matTraining.put(0, 0, Arrays.copyOf(training, n * featureStride)); Mat matResponses = new Mat(n, 1, CvType.CV_32SC1); matResponses.put(0, 0, Arrays.copyOf(trainingResponses, n)); trees.train(matTraining, Ml.ROW_SAMPLE, matResponses); matTraining.release(); matResponses.release(); Mat samples = new Mat(buf.length, featureStride, CvType.CV_32FC1); samples.put(0, 0, features); Mat results = new Mat(buf.length, 1, CvType.CV_32SC1); trees.predict(samples, results, RTrees.PREDICT_AUTO); BufferedImage imgOutput = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB); float[] resultsArray = new float[buf.length]; results.get(0, 0, resultsArray); for (int i = 0; i < resultsArray.length; i++) { if (resultsArray[i] == 1f) imgOutput.setRGB(i % img.getWidth(), i / img.getWidth(), ColorTools.makeRGB(255, 0, 0)); else if (resultsArray[i] == 2f) imgOutput.setRGB(i % img.getWidth(), i / img.getWidth(), ColorTools.makeRGB(255, 255, 255)); } isChanging = true; hierarchy.fireHierarchyChangedEvent(this); isChanging = false; }