Search in sources :

Example 1 with Grid

use of boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid in project BoofCV by lessthanoptimal.

the class DetectCalibrationCircleHexagonalApp method renderGrid.

@Override
protected void renderGrid(Graphics2D g2, double scale) {
    List<Grid> grids = detector.getDetector().getGrider().getGrids().toList();
    BasicStroke thin = new BasicStroke(3);
    BasicStroke thick = new BasicStroke(5);
    for (Grid g : grids) {
        double x0 = Double.MAX_VALUE;
        double x1 = -Double.MAX_VALUE;
        double y0 = Double.MAX_VALUE;
        double y1 = -Double.MAX_VALUE;
        for (int i = 0; i < g.ellipses.size(); i++) {
            EllipseRotated_F64 e = g.ellipses.get(i);
            if (e == null)
                continue;
            x0 = Math.min(e.center.x, x0);
            x1 = Math.max(e.center.x, x1);
            y0 = Math.min(e.center.y, y0);
            y1 = Math.max(e.center.y, y1);
        }
        x0 *= scale;
        y0 *= scale;
        x1 *= scale;
        y1 *= scale;
        g2.setColor(Color.WHITE);
        g2.setStroke(thick);
        VisualizeShapes.drawRectangle(x0, y0, x1, y1, line, g2);
        g2.setColor(Color.ORANGE);
        g2.setStroke(thin);
        VisualizeShapes.drawRectangle(x0, y0, x1, y1, line, g2);
    }
    renderTangents(g2, scale);
}
Also used : EllipseRotated_F64(georegression.struct.curve.EllipseRotated_F64) ConfigCircleHexagonalGrid(boofcv.abst.fiducial.calib.ConfigCircleHexagonalGrid) CalibrationDetectorCircleHexagonalGrid(boofcv.abst.fiducial.calib.CalibrationDetectorCircleHexagonalGrid) SquareGrid(boofcv.alg.fiducial.calib.squares.SquareGrid) Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid)

Example 2 with Grid

use of boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid in project BoofCV by lessthanoptimal.

the class DetectCalibrationCircleRegularApp method renderGrid.

@Override
protected void renderGrid(Graphics2D g2, double scale) {
    List<Grid> grids = detector.getDetector().getGrider().getGrids().toList();
    BasicStroke thin = new BasicStroke(3);
    BasicStroke thick = new BasicStroke(5);
    for (Grid g : grids) {
        double x0 = Double.MAX_VALUE;
        double x1 = -Double.MAX_VALUE;
        double y0 = Double.MAX_VALUE;
        double y1 = -Double.MAX_VALUE;
        for (int i = 0; i < g.ellipses.size(); i++) {
            EllipseRotated_F64 e = g.ellipses.get(i);
            if (e == null)
                continue;
            x0 = Math.min(e.center.x, x0);
            x1 = Math.max(e.center.x, x1);
            y0 = Math.min(e.center.y, y0);
            y1 = Math.max(e.center.y, y1);
        }
        x0 *= scale;
        y0 *= scale;
        x1 *= scale;
        y1 *= scale;
        g2.setColor(Color.WHITE);
        g2.setStroke(thick);
        VisualizeShapes.drawRectangle(x0, y0, x1, y1, line, g2);
        g2.setColor(Color.ORANGE);
        g2.setStroke(thin);
        VisualizeShapes.drawRectangle(x0, y0, x1, y1, line, g2);
    }
}
Also used : EllipseRotated_F64(georegression.struct.curve.EllipseRotated_F64) CalibrationDetectorCircleRegularGrid(boofcv.abst.fiducial.calib.CalibrationDetectorCircleRegularGrid) SquareGrid(boofcv.alg.fiducial.calib.squares.SquareGrid) Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid) ConfigCircleRegularGrid(boofcv.abst.fiducial.calib.ConfigCircleRegularGrid)

Example 3 with Grid

use of boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid in project BoofCV by lessthanoptimal.

the class DetectCircleGrid method process.

/**
 * Processes the image and finds grids.  To retrieve the found grids call {@link #getGrids()}
 * @param gray Input image
 */
public void process(T gray) {
    if (verbose)
        System.out.println("ENTER DetectCircleGrid.process()");
    configureContourDetector(gray);
    this.binary.reshape(gray.width, gray.height);
    inputToBinary.process(gray, binary);
    ellipseDetector.process(gray, binary);
    List<BinaryEllipseDetector.EllipseInfo> found = ellipseDetector.getFound().toList();
    if (verbose)
        System.out.println("  Found " + found.size() + " ellpises");
    clusters.clear();
    clustering.process(found, clusters);
    clustersPruned.clear();
    clustersPruned.addAll(clusters);
    if (verbose)
        System.out.println("  Found " + clusters.size() + " clusters");
    pruneIncorrectSize(clustersPruned, totalEllipses(numRows, numCols));
    if (verbose)
        System.out.println("  Remaining clusters after pruning by size " + clustersPruned.size());
    List<EllipseRotated_F64> foundEllipses = new ArrayList<>();
    for (int i = 0; i < found.size(); i++) {
        foundEllipses.add(found.get(i).ellipse);
    }
    grider.process(foundEllipses, clustersPruned);
    FastQueue<Grid> grids = grider.getGrids();
    if (verbose)
        System.out.println("  Found " + grids.size() + " grids");
    pruneIncorrectShape(grids, numRows, numCols);
    if (verbose)
        System.out.println("  Remaining grids after pruning by shape " + grids.size());
    validGrids.clear();
    for (int i = 0; i < grids.size(); i++) {
        Grid g = grids.get(i);
        putGridIntoCanonical(g);
        validGrids.add(g);
    }
    if (verbose)
        System.out.println("EXIT DetectCircleGrid.process()");
}
Also used : EllipseRotated_F64(georegression.struct.curve.EllipseRotated_F64) Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid) ArrayList(java.util.ArrayList)

Example 4 with Grid

use of boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid in project BoofCV by lessthanoptimal.

the class TestDetectCircleGrid method rotateGridCCW.

@Test
public void rotateGridCCW() {
    Grid g = createGrid(3, 3);
    List<EllipseRotated_F64> original = new ArrayList<>();
    original.addAll(g.ellipses);
    DetectCircleGrid<?> alg = new HelperAlg(3, 3);
    alg.rotateGridCCW(g);
    assertEquals(9, g.ellipses.size());
    assertTrue(original.get(6) == g.get(0, 0));
    assertTrue(original.get(0) == g.get(0, 2));
    assertTrue(original.get(2) == g.get(2, 2));
    assertTrue(original.get(8) == g.get(2, 0));
}
Also used : EllipseRotated_F64(georegression.struct.curve.EllipseRotated_F64) Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid) TestDetectCircleHexagonalGrid.createGrid(boofcv.alg.fiducial.calib.circle.TestDetectCircleHexagonalGrid.createGrid) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 5 with Grid

use of boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid in project BoofCV by lessthanoptimal.

the class TestDetectCircleGrid method flipVertical.

static Grid flipVertical(Grid g) {
    Grid out = new Grid();
    for (int i = 0; i < g.rows; i++) {
        for (int j = 0; j < g.columns; j++) {
            out.ellipses.add(g.get(g.rows - i - 1, j));
        }
    }
    out.columns = g.columns;
    out.rows = g.rows;
    return out;
}
Also used : Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid) TestDetectCircleHexagonalGrid.createGrid(boofcv.alg.fiducial.calib.circle.TestDetectCircleHexagonalGrid.createGrid)

Aggregations

Grid (boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid)33 EllipseRotated_F64 (georegression.struct.curve.EllipseRotated_F64)18 ArrayList (java.util.ArrayList)12 Test (org.junit.Test)7 Point2D_F64 (georegression.struct.point.Point2D_F64)6 TestDetectCircleHexagonalGrid.createGrid (boofcv.alg.fiducial.calib.circle.TestDetectCircleHexagonalGrid.createGrid)4 List (java.util.List)4 SquareGrid (boofcv.alg.fiducial.calib.squares.SquareGrid)3 CalibrationDetectorCircleHexagonalGrid (boofcv.abst.fiducial.calib.CalibrationDetectorCircleHexagonalGrid)2 ConfigCircleHexagonalGrid (boofcv.abst.fiducial.calib.ConfigCircleHexagonalGrid)2 Tangents (boofcv.alg.fiducial.calib.circle.KeyPointsCircleRegularGrid.Tangents)2 CalibrationObservation (boofcv.alg.geo.calibration.CalibrationObservation)2 GrayU8 (boofcv.struct.image.GrayU8)2 CalibrationDetectorCircleRegularGrid (boofcv.abst.fiducial.calib.CalibrationDetectorCircleRegularGrid)1 ConfigCircleRegularGrid (boofcv.abst.fiducial.calib.ConfigCircleRegularGrid)1 DetectCircleHexagonalGrid (boofcv.alg.fiducial.calib.circle.DetectCircleHexagonalGrid)1 DetectCircleRegularGrid (boofcv.alg.fiducial.calib.circle.DetectCircleRegularGrid)1 NodeInfo (boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.NodeInfo)1 Node (boofcv.alg.fiducial.calib.circle.EllipsesIntoClusters.Node)1 KeyPointsCircleHexagonalGrid (boofcv.alg.fiducial.calib.circle.KeyPointsCircleHexagonalGrid)1