Search in sources :

Example 26 with Grid

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

the class TestEllipseClustersIntoHexagonalGrid method process_multiple_grids.

/**
 * Multiple grids in view at the same time
 */
@Test
public void process_multiple_grids() {
    // create two grids
    int rows = 4;
    int cols = 3;
    Tuple2<List<Node>, List<EllipseRotated_F64>> grid0 = createHexagonalGrid(rows, cols, 0.5, 1);
    Tuple2<List<Node>, List<EllipseRotated_F64>> grid1 = createHexagonalGrid(rows, cols, 0.5, 1);
    List<List<Node>> nodes = new ArrayList<>();
    List<EllipseRotated_F64> ellipses = new ArrayList<>();
    nodes.add(grid0.data0);
    nodes.add(grid1.data0);
    ellipses.addAll(grid0.data1);
    ellipses.addAll(grid1.data1);
    // adjust indexing for second grid
    for (Node n : grid1.data0) {
        n.cluster = 1;
        n.which += grid0.data1.size();
        for (int i = 0; i < n.connections.size(); i++) {
            n.connections.data[i] += grid0.data1.size();
        }
    }
    EllipseClustersIntoHexagonalGrid alg = new EllipseClustersIntoHexagonalGrid();
    alg.process(ellipses, nodes);
    FastQueue<Grid> found = alg.getGrids();
    assertEquals(2, found.size());
    checkShape(rows, cols, found.get(0));
    checkShape(rows, cols, found.get(1));
}
Also used : EllipseRotated_F64(georegression.struct.curve.EllipseRotated_F64) Node(boofcv.alg.fiducial.calib.circle.EllipsesIntoClusters.Node) Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test)

Example 27 with Grid

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

the class TestEllipseClustersIntoRegularGrid method createRegularGrid.

@Test
public void createRegularGrid() {
    // create a grid in the expected format
    int rows = 4;
    int cols = 3;
    Tuple2<List<Node>, List<EllipseRotated_F64>> grid = TestEllipseClustersIntoGrid.createRegularGrid(rows, cols);
    EllipseClustersIntoRegularGrid alg = new EllipseClustersIntoRegularGrid();
    alg.computeNodeInfo(grid.data1, grid.data0);
    // split into the two grids
    List<List<NodeInfo>> input = convertIntoGridOfLists(0, rows, cols, alg);
    Grid g = new Grid();
    alg.createRegularGrid(input, g);
    assertEquals(rows, g.rows);
    assertEquals(cols, g.columns);
    for (int row = 0; row < rows; row++) {
        for (int col = 0; col < cols; col++) {
            assertTrue(input.get(row).get(col).ellipse == g.get(row, col));
        }
    }
}
Also used : Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid) List(java.util.List) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 28 with Grid

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

the class TestKeyPointsCircleHexagonalGrid method all.

public void all(int numRows, int numCols) {
    KeyPointsCircleHexagonalGrid alg = new KeyPointsCircleHexagonalGrid();
    double r = 0.5;
    double s = 2.0;
    Grid grid = createGrid(numRows, numCols, s, r);
    alg.process(grid);
    int idx = 0;
    for (int row = 0; row < numRows; row++) {
        for (int col = 0; col < numCols; col++) {
            if (row % 2 == 0 && col % 2 == 1)
                continue;
            if (row % 2 == 1 && col % 2 == 0)
                continue;
            Point2D_F64 p = alg.getKeyPoints().get(idx++);
            assertEquals(col * s, p.x, GrlConstants.TEST_F64);
            assertEquals(row * s, p.y, GrlConstants.TEST_F64);
        }
    }
}
Also used : Point2D_F64(georegression.struct.point.Point2D_F64) Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid)

Example 29 with Grid

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

the class TestKeyPointsCircleHexagonalGrid method horizontal.

private void horizontal(int numRows, int numCols) {
    KeyPointsCircleHexagonalGrid alg = new KeyPointsCircleHexagonalGrid();
    double r = 0.5;
    double s = 2.0;
    Grid grid = createGrid(numRows, numCols, s, r);
    alg.init(grid);
    alg.horizontal(grid);
    for (int row = 0; row < grid.rows; row++) {
        for (int col = 0; col < grid.columns; col++) {
            int index = grid.getIndexOfHexEllipse(row, col);
            if (row % 2 == 0 && col % 2 == 0) {
                if (col == 0 || col == grid.columns - 1 - (1 - grid.columns % 2))
                    assertEquals(2, alg.tangents.get(index).size);
                else
                    assertEquals(row + " " + col, 4, alg.tangents.get(index).size);
            } else if (row % 2 == 1 && col % 2 == 1) {
                if (col == 1 || col == grid.columns - 1 - (grid.columns % 2))
                    assertEquals(2, alg.tangents.get(index).size);
                else
                    assertEquals(4, alg.tangents.get(index).size);
            }
        }
    }
}
Also used : Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid)

Example 30 with Grid

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

the class TestKeyPointsCircleHexagonalGrid method vertical.

private void vertical(int numRows, int numCols) {
    KeyPointsCircleHexagonalGrid alg = new KeyPointsCircleHexagonalGrid();
    double r = 0.5;
    double s = 2.0;
    Grid grid = createGrid(numRows, numCols, s, r);
    alg.init(grid);
    alg.vertical(grid);
    for (int row = 0; row < grid.rows; row++) {
        for (int col = 0; col < grid.columns; col++) {
            int index = grid.getIndexOfHexEllipse(row, col);
            if (row % 2 == 0 && col % 2 == 0) {
                if (row == 0 || row == grid.rows - 1 - (1 - grid.rows % 2))
                    assertEquals(2, alg.tangents.get(index).size);
                else
                    assertEquals(4, alg.tangents.get(index).size);
            } else if (row % 2 == 1 && col % 2 == 1) {
                if (row == 1 || row == grid.rows - 1 - (grid.rows % 2))
                    assertEquals(2, alg.tangents.get(index).size);
                else
                    assertEquals(4, alg.tangents.get(index).size);
            }
        }
    }
}
Also used : Grid(boofcv.alg.fiducial.calib.circle.EllipseClustersIntoGrid.Grid)

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