(Dis)tortion (Cor)rection (Py)thon-package
Camera calibration and distortion correction software for lens-based detector systems
Discorpy is an open-source Python package for camera calibration and distortion correction with sub-pixel accuracy. It calculates parameters of correction models using a grid pattern image. The package mainly implements methods published in Optics Express. It provides methods in a full pipeline of data processing. From version 1.4, perspective distortion correction was added to the package.
Author and maintainer: Nghia Vo, NSLS-II, Brookhaven National Laboratory, US; Diamond Light Source, UK
- 25/02/2021: the package name was changed from Vounwarp to Discorpy. The old-name package is still available at https://github.com/nghia-vo/vounwarp and installable using conda-forge channel: https://anaconda.org/conda-forge/vounwarp
- 21/11/2021: Version 1.4 was released with new features: perspective distortion correction, pre-processing methods for line-pattern images and chessboard images.
- The polynomial model used by the package is versatile enough to calibrate images with varying levels of radial distortion. This practical feature eliminates the need for users to switch between different models based on the degree of distortion in the images.
- Discorpy offers a unique feature where radial distortion, the center of distortion, and perspective distortion can be independently determined and corrected using a single calibration image.
- The software provides a full pipeline of data processing including:
- Pre-processing methods for: extracting reference-points from a dot-pattern image, line-pattern image, and chessboard (checkerboard) image; grouping these points line-by-line.
- Processing methods for calculating the optical center, coefficients of polynomial models for correcting radial distortion, and parameters of a model for correcting perspective distortion.
- Post-processing methods for: unwarping lines of points, images, or slices of a 3D dataset; and evaluating the accuracy of the correction results.
- Some methods may be useful for other applications:
- Correct non-uniform background of an image.
- Select binary objects in a certain range of values.
- Unwarp slices of a 3D dataset.
- Summarized by an AI chatbot: "It is a Python library for camera distortion correction that is designed to be easy to use and accessible to both computer vision experts and novice users. The library provides a simple API for correcting lens distortion in images, and it is based on the popular NumPy library for numerical computing. Discorpy also has good documentation and examples to help users get started with the library".
- To achieve high-accuracy results, the quality of the calibration image is crucial. An ideal calibration image should contain numerous reference points extracted from dot-patterns, line-patterns, or checkerboard images, covering most of the camera's field of view and minimizing perspective distortion.
- https://discorpy.readthedocs.io/en/latest/usage.html
-
Detailed step-by-step demonstrations featuring codes and explanations of how to use Discorpy for various types of calibration images are shown here.
-
Apply to a visible dot-target collected at Beamline I12, Diamond Light Source, UK:
-
Apply to an X-ray dot-target collected at Beamline I13, Diamond Light Source, UK:
-
Improvement of a tomographic reconstructed image after distortion correction.
-
Calibrate a commercial camera with capabilities of correcting radial distortion and perspective distortion independently.
-
Calibrate a laptop webcam using a checkboard image.
-
Apply to a hazard camera of the Mars Perseverance Rover. Details of how to estimate distortion coefficients of that camera without using a calibration target are shown here.
-
Correct perspective distortion: