Example usage for org.opencv.ml RTrees create

List of usage examples for org.opencv.ml RTrees create

Introduction

In this page you can find the example usage for org.opencv.ml RTrees create.

Prototype

public static RTrees create() 

Source Link

Usage

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;
}