Search in sources :

Example 11 with ConfigChessboard

use of boofcv.abst.fiducial.calib.ConfigChessboard in project BoofCV by lessthanoptimal.

the class CalibrateFisheyePlanarGuiApp method main.

public static void main(String[] args) {
    DetectorFiducialCalibration detector = // FactoryFiducialCalibration.squareGrid(new ConfigSquareGrid(4,3,30,30));
    FactoryFiducialCalibration.chessboard(new ConfigChessboard(7, 5, 30));
    // FactoryFiducialCalibration.circleHexagonalGrid(new ConfigCircleHexagonalGrid(5, 8, 1, 6));
    List<String> images;
    images = UtilIO.listAll(UtilIO.pathExample("calibration/fisheye/chessboard"));
    // images = UtilIO.listAll(UtilIO.pathExample("calibration/fisheye/square_grid"));
    CalibrateFisheyePlanarGuiApp app = new CalibrateFisheyePlanarGuiApp();
    app.configure(detector, images).configureUniversalOmni(true, 2, false);
    JFrame frame = new JFrame("Fisheye Calibration with Planar Targets");
    frame.add(app, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    app.process("intrinsic.yaml");
}
Also used : DetectorFiducialCalibration(boofcv.abst.geo.calibration.DetectorFiducialCalibration) ConfigChessboard(boofcv.abst.fiducial.calib.ConfigChessboard)

Example 12 with ConfigChessboard

use of boofcv.abst.fiducial.calib.ConfigChessboard in project BoofCV by lessthanoptimal.

the class CameraCalibrationGui method calibrationParametersChanged.

@Override
public void calibrationParametersChanged(CalibrationTargetPanel.TargetType type, Object _config) {
    final RenderCalibrationTargetsGraphics2D renderer = new RenderCalibrationTargetsGraphics2D(20, 1);
    if (type == CalibrationTargetPanel.TargetType.CHESSBOARD) {
        ConfigChessboard chess = (ConfigChessboard) _config;
        renderer.chessboard(chess.numRows, chess.numCols, 20);
    } else if (type == CalibrationTargetPanel.TargetType.SQUARE_GRID) {
        ConfigSquareGrid config = (ConfigSquareGrid) _config;
        double space = 20 * config.spaceWidth / config.squareWidth;
        renderer.squareGrid(config.numRows, config.numCols, 20, space);
    } else if (type == CalibrationTargetPanel.TargetType.CIRCLE_GRID) {
        ConfigCircleRegularGrid config = (ConfigCircleRegularGrid) _config;
        double space = 10 * config.centerDistance / config.circleDiameter;
        renderer.circleRegular(config.numRows, config.numCols, 10, space);
    } else if (type == CalibrationTargetPanel.TargetType.CIRCLE_HEX) {
        ConfigCircleHexagonalGrid config = (ConfigCircleHexagonalGrid) _config;
        double space = 10 * config.centerDistance / config.circleDiameter;
        renderer.circleHex(config.numRows, config.numCols, 10, space);
    }
    renderingPanel.setImageUI(renderer.getBufferred());
}
Also used : ConfigSquareGrid(boofcv.abst.fiducial.calib.ConfigSquareGrid) RenderCalibrationTargetsGraphics2D(boofcv.gui.RenderCalibrationTargetsGraphics2D) ConfigCircleHexagonalGrid(boofcv.abst.fiducial.calib.ConfigCircleHexagonalGrid) ConfigChessboard(boofcv.abst.fiducial.calib.ConfigChessboard) ConfigCircleRegularGrid(boofcv.abst.fiducial.calib.ConfigCircleRegularGrid)

Example 13 with ConfigChessboard

use of boofcv.abst.fiducial.calib.ConfigChessboard in project BoofCV by lessthanoptimal.

the class CreateCalibrationTargetGui method saveFile.

private void saveFile(boolean sendToPrinter) {
    // grab the focus and force what the user is editing to be saved
    File f;
    // see where the document is to be sent
    if (sendToPrinter) {
        // dummy to make the code below happy and less complex
        f = new File("");
    } else {
        f = FileSystemView.getFileSystemView().getHomeDirectory();
        f = new File(f, "calibration_target.pdf");
        f = BoofSwingUtil.fileChooser(this, false, f.getPath());
        if (f == null) {
            return;
        }
        if (f.isDirectory()) {
            JOptionPane.showMessageDialog(this, "Can't save to a directory!");
            return;
        }
    }
    // Make sure the file has the correct extension
    String outputFile = f.getAbsolutePath();
    String ext = FilenameUtils.getExtension(outputFile);
    if (ext.compareToIgnoreCase("pdf") != 0) {
        outputFile = FilenameUtils.removeExtension(outputFile);
        outputFile += "." + "pdf";
    }
    try {
        switch(selectedType) {
            case CHESSBOARD:
                {
                    ConfigChessboard config = (ConfigChessboard) selectedCalib;
                    CreateCalibrationTargetGenerator generator = new CreateCalibrationTargetGenerator(outputFile, paper, config.numRows, config.numCols, units);
                    generator.sendToPrinter = sendToPrinter;
                    generator.chessboard((float) config.squareWidth);
                }
                break;
            case SQUARE_GRID:
                {
                    ConfigSquareGrid config = (ConfigSquareGrid) selectedCalib;
                    CreateCalibrationTargetGenerator generator = new CreateCalibrationTargetGenerator(outputFile, paper, config.numRows, config.numCols, units);
                    generator.sendToPrinter = sendToPrinter;
                    generator.squareGrid((float) config.squareWidth, (float) config.spaceWidth);
                }
                break;
            case CIRCLE_GRID:
                {
                    ConfigCircleRegularGrid config = (ConfigCircleRegularGrid) selectedCalib;
                    CreateCalibrationTargetGenerator generator = new CreateCalibrationTargetGenerator(outputFile, paper, config.numRows, config.numCols, units);
                    generator.sendToPrinter = sendToPrinter;
                    generator.circleGrid((float) config.circleDiameter, (float) config.centerDistance);
                }
                break;
            case CIRCLE_HEX:
                {
                    ConfigCircleHexagonalGrid config = (ConfigCircleHexagonalGrid) selectedCalib;
                    CreateCalibrationTargetGenerator generator = new CreateCalibrationTargetGenerator(outputFile, paper, config.numRows, config.numCols, units);
                    generator.sendToPrinter = sendToPrinter;
                    generator.circleHexagonal((float) config.circleDiameter, (float) config.centerDistance);
                }
                break;
            default:
                throw new RuntimeException("Unknown type " + selectedType);
        }
    } catch (IOException e) {
        BoofSwingUtil.warningDialog(this, e);
    }
}
Also used : ConfigSquareGrid(boofcv.abst.fiducial.calib.ConfigSquareGrid) ConfigCircleHexagonalGrid(boofcv.abst.fiducial.calib.ConfigCircleHexagonalGrid) ConfigChessboard(boofcv.abst.fiducial.calib.ConfigChessboard) IOException(java.io.IOException) ConfigCircleRegularGrid(boofcv.abst.fiducial.calib.ConfigCircleRegularGrid) File(java.io.File)

Example 14 with ConfigChessboard

use of boofcv.abst.fiducial.calib.ConfigChessboard in project BoofCV by lessthanoptimal.

the class ExamplePoseOfCalibrationTarget method main.

public static void main(String[] args) {
    // Load camera calibration
    CameraPinholeRadial intrinsic = CalibrationIO.load(UtilIO.pathExample("calibration/mono/Sony_DSC-HX5V_Chess/intrinsic.yaml"));
    LensDistortionNarrowFOV lensDistortion = new LensDistortionRadialTangential(intrinsic);
    // load the video file
    String fileName = UtilIO.pathExample("tracking/chessboard_SonyDSC_01.mjpeg");
    SimpleImageSequence<GrayF32> video = DefaultMediaManager.INSTANCE.openVideo(fileName, ImageType.single(GrayF32.class));
    // DefaultMediaManager.INSTANCE.openCamera(null, 640, 480, ImageType.single(GrayF32.class));
    // Let's use the FiducialDetector interface since it is much easier than coding up
    // the entire thing ourselves.  Look at FiducialDetector's code if you want to understand how it works.
    CalibrationFiducialDetector<GrayF32> detector = FactoryFiducial.calibChessboard(new ConfigChessboard(4, 5, 0.03), GrayF32.class);
    detector.setLensDistortion(lensDistortion, intrinsic.width, intrinsic.height);
    // Get the 2D coordinate of calibration points for visualization purposes
    List<Point2D_F64> calibPts = detector.getCalibrationPoints();
    // Set up visualization
    PointCloudViewer viewer = new PointCloudViewer(intrinsic, 0.01);
    // make the view more interest.  From the side.
    DMatrixRMaj rotY = ConvertRotation3D_F64.rotY(-Math.PI / 2.0, null);
    viewer.setWorldToCamera(new Se3_F64(rotY, new Vector3D_F64(0.75, 0, 1.25)));
    ImagePanel imagePanel = new ImagePanel(intrinsic.width, intrinsic.height);
    viewer.setPreferredSize(new Dimension(intrinsic.width, intrinsic.height));
    PanelGridPanel gui = new PanelGridPanel(1, imagePanel, viewer);
    gui.setMaximumSize(gui.getPreferredSize());
    ShowImages.showWindow(gui, "Calibration Target Pose", true);
    // Allows the user to click on the image and pause
    MousePauseHelper pauseHelper = new MousePauseHelper(gui);
    // saves the target's center location
    List<Point3D_F64> path = new ArrayList<>();
    // Process each frame in the video sequence
    Se3_F64 targetToCamera = new Se3_F64();
    while (video.hasNext()) {
        // detect calibration points
        detector.detect(video.next());
        if (detector.totalFound() == 1) {
            detector.getFiducialToCamera(0, targetToCamera);
            // Visualization.  Show a path with green points and the calibration points in black
            viewer.reset();
            Point3D_F64 center = new Point3D_F64();
            SePointOps_F64.transform(targetToCamera, center, center);
            path.add(center);
            for (Point3D_F64 p : path) {
                viewer.addPoint(p.x, p.y, p.z, 0x00FF00);
            }
            for (int j = 0; j < calibPts.size(); j++) {
                Point2D_F64 p = calibPts.get(j);
                Point3D_F64 p3 = new Point3D_F64(p.x, p.y, 0);
                SePointOps_F64.transform(targetToCamera, p3, p3);
                viewer.addPoint(p3.x, p3.y, p3.z, 0);
            }
        }
        imagePanel.setImage((BufferedImage) video.getGuiImage());
        viewer.repaint();
        imagePanel.repaint();
        BoofMiscOps.pause(30);
        while (pauseHelper.isPaused()) {
            BoofMiscOps.pause(30);
        }
    }
}
Also used : Point3D_F64(georegression.struct.point.Point3D_F64) LensDistortionNarrowFOV(boofcv.alg.distort.LensDistortionNarrowFOV) DMatrixRMaj(org.ejml.data.DMatrixRMaj) ArrayList(java.util.ArrayList) LensDistortionRadialTangential(boofcv.alg.distort.radtan.LensDistortionRadialTangential) Vector3D_F64(georegression.struct.point.Vector3D_F64) PanelGridPanel(boofcv.gui.PanelGridPanel) GrayF32(boofcv.struct.image.GrayF32) CameraPinholeRadial(boofcv.struct.calib.CameraPinholeRadial) Point2D_F64(georegression.struct.point.Point2D_F64) PointCloudViewer(boofcv.gui.d3.PointCloudViewer) ConfigChessboard(boofcv.abst.fiducial.calib.ConfigChessboard) Se3_F64(georegression.struct.se.Se3_F64) ImagePanel(boofcv.gui.image.ImagePanel) MousePauseHelper(boofcv.gui.MousePauseHelper)

Aggregations

ConfigChessboard (boofcv.abst.fiducial.calib.ConfigChessboard)14 DetectorFiducialCalibration (boofcv.abst.geo.calibration.DetectorFiducialCalibration)6 GrayF32 (boofcv.struct.image.GrayF32)5 ConfigSquareGrid (boofcv.abst.fiducial.calib.ConfigSquareGrid)4 ConfigCircleHexagonalGrid (boofcv.abst.fiducial.calib.ConfigCircleHexagonalGrid)3 ConfigCircleRegularGrid (boofcv.abst.fiducial.calib.ConfigCircleRegularGrid)3 ConvertBufferedImage (boofcv.io.image.ConvertBufferedImage)3 BufferedImage (java.awt.image.BufferedImage)3 CalibrateMonoPlanar (boofcv.abst.geo.calibration.CalibrateMonoPlanar)2 RenderCalibrationTargetsGraphics2D (boofcv.gui.RenderCalibrationTargetsGraphics2D)2 CameraPinholeRadial (boofcv.struct.calib.CameraPinholeRadial)2 Point2D_F64 (georegression.struct.point.Point2D_F64)2 File (java.io.File)2 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 LensDistortionNarrowFOV (boofcv.alg.distort.LensDistortionNarrowFOV)1 LensDistortionRadialTangential (boofcv.alg.distort.radtan.LensDistortionRadialTangential)1 CalibrationObservation (boofcv.alg.geo.calibration.CalibrationObservation)1 MousePauseHelper (boofcv.gui.MousePauseHelper)1 PanelGridPanel (boofcv.gui.PanelGridPanel)1