Skip to content

IVISO/camcalib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

camcalib

Camera calibration made easy

Check out our latest camcalib release here.

Upgrade to a Personal, or Pro version of camcalib.

This guide will help you construct your very own calibration pattern.

14 days of free camcalib Pro with our demo: on windows, simply install the latest release and lanuch camcalib. You will be given the option to start a trial. On linux simply open the AppImage and choose the option to create a demo key.

Find our latest articles and news at camcalib.io.

Try our our live calibration feature with your IDS cameras by first installing the UEye SDK & Drivers.

Bugs and features

If you encounter any problems or have a feature request, hit up our issues page.

System requirements

Ubuntu 18.04, 20.04 and 22.04 or Windows 10.

Depending on the size of your calibration data, an adequate amount of RAM (minimum 8GB) is necessary.

Documentation

Make sure to read the documentation below, but keep in mind that we are constantly updating and expanding articles and guides on our blog. There are a bunch of guides and articles there to get you started with your application fast.

Coming soon: camcalib tutorials and hands-on guides on youtube. Stay tuned!

Calibration Data

If calibration data is loaded from disk, there are currently two ways. Either the data must be provided as indexed ROS bag or structured in folders as images or videos. Currently, PNG and JPG/JPEG images or MOV, AVI and MP4 are supported.

For the folder method, if you provide images, it is necessary that the images are structured in subfolders. If you have videos, just place them inside the folder. The names of the subfolders or videos are taken as unique camera ids.

For the extrinsic calibration it is necessary that the images are recognised as synchronised. Therefore, images, that are taken at the exact same time, must have the same filename. If timestamps are used for the image filename, use "_" as decimal seperator. Video files have internal timestamps, depending on their FPS, starting from 0.0s. For example:

dataset
├── cam0.mov
├── cam1
│   ├── 0_03.png
│   ├── 0_25.png
│   ├──     ...
│   └── 9_76.png
├── cam2
│   ├── 0_03.png
│   ├── 0_25.png
│   ├──     ...
│   └── 9_76.png
│   ...

Calibration board

Currently, AprilTag and ChArUco boards are supported. This will change in the future.
If you have troubles to get one of these, don't hesitate to contact us.

Imu

Please ensure that:

  • accelerometer values are in .
  • gyroscope values are in .

Camera Model

Supported camera models are

  • Pinhole (fx, fy, cx, cy):
    • fx, fy: focal length, cx, cy: image center
    • for cameras without distortion
  • PinholeRadTan (fx, fy, cx, cy, k1, k2, p1, p2): (details)
    • fx, fy: focal length; cx, cy: image center; k1, k2: radial distortion; p1, p2: tangential distortion
    • common model compatible with openCV, matlab, etc.
  • KannalaBrandt (fx, fy, cx, cy, k1, k2, k3, k4): (details)
    • fx, fy: focal length; cx, cy: image center; k1, k2, k3, k4: equidistant distortion
    • common model for wide FOV cameras compatible with openCV, matlab, etc.
  • DoubleSphere (fx, fy, cx, cy, xi, alpha): (details)
    • fx, fy: focal length; cx, cy: image center; xi: sphere shift; alpha: image plane shift
    • works with all kind of lens distortion even with fisheye
    • few distortion parameters (xi, alpha) makes optimization more robust

Calibration Result

Calibration results can be exported as YAML file. The parameters can then be found in the "sensors" section. Depending on the type of calibration, each camera identifier has intrinsic and possibly extrinsic parameters.

The intrinsics section has the keys "type" that specifies the chosen camera model and "parameters" that holds the calibrated parameters corresponding to the camera model.

The extrinsics of a sensor is an SE(3) Pose represented as axis-angle and translation. transforms from frame to frame where is the reference frame and is the frame of sensor .
Thus the transformation from Sensor to is given by

equation

Note:

Most of the time, the reference frame coincides with the frame of a sensor e.g. (called primary). Then the extrinsics of this sensor is the identity and the transformation of any other sensor frame to is simply the extrinsics given for .

equation

An example results file could look like the following:

sensors:
  'cam0':
    extrinsics:
      axis_angle:
      - 0.0
      - 0.0
      - 0.0
      translation:
      - 0.0
      - 0.0
      - 0.0
    intrinsics:
      parameters:
        alpha: 0.30000000000000004
        cx: 640.0
        cy: 510.0
        fx: 2300.0
        fy: 2300.0
        image_size:
        - 1280
        - 1024
        xi: -0.001
      type: DoubleSphereInit
  'cam1':
    extrinsics:
      axis_angle:
      - 0.3000000000000015
      - 0.20000000000000084
      - 0.01999999999999994
      translation:
      - -0.2
      - 0.30000000000000004
      - 0.30000000000000004
    intrinsics:
      parameters:
        alpha: 0.30000000000000004
        cx: 640.0
        cy: 510.0
        fx: 2300.0
        fy: 2300.0
        image_size:
        - 1280
        - 1024
        xi: -0.002
      type: DoubleSphereInit

About

Camera calibration made easy

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages