Difference between revisions of "Example Calibrate Planar Mono"
From BoofCV
Jump to navigationJump to searchm |
m |
||
Line 7: | Line 7: | ||
This example demonstrates how to use a high level calibration class that automatically detects calibration targets as viewed from a single (monocular) camera in a set of images. After processing the images the intrinsic camera parameters and lens distortion are saved to an XML file. Both the square grid and chessboard patterns are supported by this example. For a full description of the calibration process and instruction on how to do it yourself see the tutorial linked to below. | This example demonstrates how to use a high level calibration class that automatically detects calibration targets as viewed from a single (monocular) camera in a set of images. After processing the images the intrinsic camera parameters and lens distortion are saved to an XML file. Both the square grid and chessboard patterns are supported by this example. For a full description of the calibration process and instruction on how to do it yourself see the tutorial linked to below. | ||
Example File: [https://github.com/lessthanoptimal/BoofCV/blob/v0. | Example File: [https://github.com/lessthanoptimal/BoofCV/blob/v0.25/examples/src/boofcv/examples/calibration/ExampleCalibrateMonocular.java ExampleCalibrateMonocular.java] | ||
Calibration Tutorial: [[Tutorial_Camera_Calibration|Wikipage]] | Calibration Tutorial: [[Tutorial_Camera_Calibration|Wikipage]] | ||
Line 15: | Line 15: | ||
* Lens distortion | * Lens distortion | ||
* Intrinsic parameters | * Intrinsic parameters | ||
Related Examples: | Related Examples: | ||
* [[Example_Calibrate_Given_Points| Calibrate Given Points]] | |||
* [[Example_Calibrate_Planar_Stereo| Stereo Camera Calibration]] | * [[Example_Calibrate_Planar_Stereo| Stereo Camera Calibration]] | ||
* [[Example_Remove_Lens_Distortion| Removing Lens Distortion]] | * [[Example_Remove_Lens_Distortion| Removing Lens Distortion]] | ||
Line 45: | Line 42: | ||
*/ | */ | ||
public class ExampleCalibrateMonocular { | public class ExampleCalibrateMonocular { | ||
public static void main( String args[] ) { | |||
DetectorFiducialCalibration detector; | |||
List<String> images; | |||
// Asymmetric Circle Example | |||
// detector = FactoryFiducialCalibration.circleAsymmGrid(new ConfigCircleAsymmetricGrid(5, 8, 1, 6)); | |||
// images = BoofMiscOps.directoryList(UtilIO.pathExample("calibration/mono/Sony_DSC-HX5V_CircleAsym"),"image"); | |||
// | // Square Grid example | ||
// detector = FactoryFiducialCalibration.squareGrid(new ConfigSquareGrid(4, 3, 30, 30)); | |||
// images = BoofMiscOps.directoryList(UtilIO.pathExample("calibration/stereo/Bumblebee2_Square"),"left"); | |||
// Chessboard Example | |||
detector = FactoryFiducialCalibration.chessboard(new ConfigChessboard(7, 5, 30)); | |||
images = BoofMiscOps.directoryList(UtilIO.pathExample("calibration/stereo/Bumblebee2_Chess"),"left"); | |||
// | |||
detector = | |||
// Declare and setup the calibration algorithm | // Declare and setup the calibration algorithm | ||
Line 96: | Line 73: | ||
} | } | ||
// process and compute intrinsic parameters | // process and compute intrinsic parameters | ||
CameraPinholeRadial intrinsic = calibrationAlg.process(); | |||
// save results to a file and print out | // save results to a file and print out | ||
CalibrationIO.save(intrinsic, "intrinsic.yaml"); | |||
calibrationAlg.printStatistics(); | calibrationAlg.printStatistics(); | ||
Line 106: | Line 83: | ||
System.out.println(); | System.out.println(); | ||
intrinsic.print(); | intrinsic.print(); | ||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 13:34, 1 December 2016
This example demonstrates how to use a high level calibration class that automatically detects calibration targets as viewed from a single (monocular) camera in a set of images. After processing the images the intrinsic camera parameters and lens distortion are saved to an XML file. Both the square grid and chessboard patterns are supported by this example. For a full description of the calibration process and instruction on how to do it yourself see the tutorial linked to below.
Example File: ExampleCalibrateMonocular.java
Calibration Tutorial: Wikipage
Concepts:
- Camera calibration
- Lens distortion
- Intrinsic parameters
Related Examples:
Example Code
/**
* Example of how to calibrate a single (monocular) camera using a high level interface that processes images of planar
* calibration targets. The entire calibration target must be observable in the image and for best results images
* should be in focus and not blurred. For a lower level example of camera calibration which processes a set of
* observed calibration points see {@link ExampleCalibrateMonocular}.
*
* After processing both intrinsic camera parameters and lens distortion are estimated. Square grid and chessboard
* targets are demonstrated by this example. See calibration tutorial for a discussion of different target types
* and how to collect good calibration images.
*
* All the image processing and calibration is taken care of inside of {@link CalibrateMonoPlanar}. The code below
* loads calibration images as inputs, calibrates, and saves results to an XML file. See in code comments for tuning
* and implementation issues.
*
* @see CalibrateMonoPlanar
*
* @author Peter Abeles
*/
public class ExampleCalibrateMonocular {
public static void main( String args[] ) {
DetectorFiducialCalibration detector;
List<String> images;
// Asymmetric Circle Example
// detector = FactoryFiducialCalibration.circleAsymmGrid(new ConfigCircleAsymmetricGrid(5, 8, 1, 6));
// images = BoofMiscOps.directoryList(UtilIO.pathExample("calibration/mono/Sony_DSC-HX5V_CircleAsym"),"image");
// Square Grid example
// detector = FactoryFiducialCalibration.squareGrid(new ConfigSquareGrid(4, 3, 30, 30));
// images = BoofMiscOps.directoryList(UtilIO.pathExample("calibration/stereo/Bumblebee2_Square"),"left");
// Chessboard Example
detector = FactoryFiducialCalibration.chessboard(new ConfigChessboard(7, 5, 30));
images = BoofMiscOps.directoryList(UtilIO.pathExample("calibration/stereo/Bumblebee2_Chess"),"left");
// Declare and setup the calibration algorithm
CalibrateMonoPlanar calibrationAlg = new CalibrateMonoPlanar(detector);
// tell it type type of target and which parameters to estimate
calibrationAlg.configure( true, 2, false);
for( String n : images ) {
BufferedImage input = UtilImageIO.loadImage(n);
if( n != null ) {
GrayF32 image = ConvertBufferedImage.convertFrom(input,(GrayF32)null);
if( !calibrationAlg.addImage(image) )
System.err.println("Failed to detect target in "+n);
}
}
// process and compute intrinsic parameters
CameraPinholeRadial intrinsic = calibrationAlg.process();
// save results to a file and print out
CalibrationIO.save(intrinsic, "intrinsic.yaml");
calibrationAlg.printStatistics();
System.out.println();
System.out.println("--- Intrinsic Parameters ---");
System.out.println();
intrinsic.print();
}
}