Difference between revisions of "Example Calibrate Planar Fisheye"
From BoofCV
Jump to navigationJump to search (Created page with "<center> <gallery heights=300 widths=610 > Image:Calib_fisheye_chessboard.jpg|Detected Calibration Target in a Fisheye Camera. </gallery> </center> This example demonstrates...") |
m |
||
Line 1: | Line 1: | ||
<center> | <center> | ||
<gallery heights= | <gallery heights=400 widths=610 > | ||
Image:Calib_fisheye_chessboard.jpg|Detected Calibration Target in a Fisheye Camera. | Image:Calib_fisheye_chessboard.jpg|Detected Calibration Target in a Fisheye Camera. | ||
</gallery> | </gallery> | ||
Line 7: | Line 7: | ||
This example demonstrates how to compute the intrinsic camera parameters for a fisheye camera lens. Fisheye lenses exhibit significantly more distortion than regular lenses with a more narrow field of view. Its not unusual for a fisheye lens to have a FOV of 185 degrees. The calibration process is very similar to regular cameras. A planar calibration target is shown at different angles across the entire field of view. The main difference is the camera model. | This example demonstrates how to compute the intrinsic camera parameters for a fisheye camera lens. Fisheye lenses exhibit significantly more distortion than regular lenses with a more narrow field of view. Its not unusual for a fisheye lens to have a FOV of 185 degrees. The calibration process is very similar to regular cameras. A planar calibration target is shown at different angles across the entire field of view. The main difference is the camera model. | ||
Example File: [https://github.com/lessthanoptimal/BoofCV/blob/v0.28/examples/src/boofcv/examples/calibration/ExampleCalibrateFisheye.java ExampleCalibrateFisheye.java] | Example File: [https://github.com/lessthanoptimal/BoofCV/blob/v0.28/examples/src/main/java/boofcv/examples/calibration/ExampleCalibrateFisheye.java ExampleCalibrateFisheye.java] | ||
Calibration Tutorial: [[Tutorial_Camera_Calibration|Wikipage]] | Calibration Tutorial: [[Tutorial_Camera_Calibration|Wikipage]] | ||
Line 13: | Line 13: | ||
Concepts: | Concepts: | ||
* Camera calibration | * Camera calibration | ||
* Lens distortion | * Fisheye Lens distortion | ||
* Intrinsic parameters | * Intrinsic parameters | ||
Revision as of 21:23, 19 January 2018
This example demonstrates how to compute the intrinsic camera parameters for a fisheye camera lens. Fisheye lenses exhibit significantly more distortion than regular lenses with a more narrow field of view. Its not unusual for a fisheye lens to have a FOV of 185 degrees. The calibration process is very similar to regular cameras. A planar calibration target is shown at different angles across the entire field of view. The main difference is the camera model.
Example File: ExampleCalibrateFisheye.java
Calibration Tutorial: Wikipage
Concepts:
- Camera calibration
- Fisheye Lens distortion
- Intrinsic parameters
Related Examples:
Example Code
/**
* Example of how to calibrate a single (monocular) fisheye camera using a high level interface. This example
* for the most part follows the same routine as {@link ExampleCalibrateMonocular}. Fisheye cameras tend to require
* more images to properly calibrate. Often people will use larger calibration targets too that are easier to
* see at a distance and cover more of the fisheye's camera large FOV.
*
* @see CalibrateMonoPlanar
*
* @author Peter Abeles
*/
public class ExampleCalibrateFisheye {
public static void main( String args[] ) {
DetectorFiducialCalibration detector;
List<String> images;
// Circle based calibration targets not not recommended because the sever lens distortion will change
// the apparent location of tangent points.
// Square Grid example
// detector = FactoryFiducialCalibration.squareGrid(new ConfigSquareGrid(4, 3, 30, 30));
// images = UtilIO.listAll(UtilIO.pathExample("calibration/fisheye/square_grid"));
// Chessboard Example
detector = FactoryFiducialCalibration.chessboard(new ConfigChessboard(7, 5, 30));
images = UtilIO.listAll(UtilIO.pathExample("calibration/fisheye/chessboard"));
// Declare and setup the calibration algorithm
CalibrateMonoPlanar calibrationAlg = new CalibrateMonoPlanar(detector);
// tell it type type of target and which parameters to estimate
calibrationAlg.configureUniversalOmni( true, 2, false);
// it's also possible to fix the mirror offset parameter
// 0 = pinhole camera. 1 = fisheye
// calibrationAlg.configureUniversalOmni( true, 2, false,1.0);
for( String n : images ) {
BufferedImage input = UtilImageIO.loadImage(n);
if( input != 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
CameraUniversalOmni intrinsic = calibrationAlg.process();
// save results to a file and print out
CalibrationIO.save(intrinsic, "fisheye.yaml");
calibrationAlg.printStatistics();
System.out.println();
System.out.println("--- Intrinsic Parameters ---");
System.out.println();
intrinsic.print();
}
}