Skip to main content

Discorpy

(Dis)tortion (Cor)rection (Py)thon-package

Camera calibration and distortion correction software for lens-based detector systems

GitHub Workflow Status Downloads former_vounwarp_downloads Anaconda-Server Badge Documentation Status Anaconda-Server Badge GitHub code size in bytes Anaconda-Server Badge Coverage

Discorpy is an open-source Python package implementing methods for calibrating and correcting distortion in lens-based imaging systems (1, 2). Unlike existing approaches that require multiple calibration images or iterative optimization, Discorpy and its algorithms can independently characterize both radial and perspective distortion with high accuracy across a wide range of distortion strengths - using only a single calibration image and direct computation. This makes the software a practical tool for a wide range of imaging applications.

Author and maintainer: Nghia Vo, NSLS-II, Brookhaven National Laboratory, US; Diamond Light Source, UK.

Features

  • 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:

Installation

Documentation

Usage

Demonstrations

  • 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:

    I12_before_after1

    I12_before_after2

  • Apply to an X-ray dot-target collected at Beamline I13, Diamond Light Source, UK:

    I13_before_after1

    I13_before_after2

  • Improvement of tomographic reconstructed images after distortion correction:

    • For a detector with strong radial distortion:

      tomo_strong

    • For a detector with small radial distortion:

      tomo_small

  • Calibrate a commercial camera with capabilities of correcting radial distortion and perspective distortion independently.

    show_case

  • Calibrate a laptop webcam using a checkboard image.

    webcam_before

    webcam_after

  • Calibrate a fisheye camera (GoPro Hero-8).

    GoPro_Hero8

  • 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.

    Percy_cam1

    Percy_cam2

  • Correct perspective distortion:

    perspective_correction

Metadata

Release files for discorpy 1.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for discorpy 1.7.0
File Size Uploaded
discorpy-1.7.0.tar.gz 57.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for discorpy 1.7.0
File Interpreter ABI Platform
discorpy-1.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 105.8 kB

Release files / discorpy-1.7.0.tar.gz

Download URL discorpy-1.7.0.tar.gz
Size 57.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ff2016f9527bb844e95a64b2ff0b61c9346cdac20490fa63c69fa59c625e2360
BLAKE2b-256 checksum
How to use checksums
cf3f1b7d98c9128d541dff4b9bc03102393526d3fc597909be0ee95fc29e640a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.13

Release files / discorpy-1.7.0-py3-none-any.whl

Download URL discorpy-1.7.0-py3-none-any.whl
Size 48.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
399a357ae39b5cc364690cc0b0bb6c793d3f47966ff3672060383fca8d114847
BLAKE2b-256 checksum
How to use checksums
cadec04138a95d55c1f656ff48827c31f64daf491851f6763024cd0d28f76c2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.13

Release history Release notifications | RSS feed

This release

1.7.0 This release

2 release files

1.6.0

2 release files

1.5

2 release files

1.4

3 release files

1.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page