imreg icon indicating copy to clipboard operation
imreg copied to clipboard

FFT based image registration

FFT based image registration

Imreg is a Python library that implements an FFT-based technique for translation, rotation and scale-invariant image registration [1].

:Author: Christoph Gohlke <https://www.cgohlke.com>_ :License: BSD 3-Clause :Version: 2024.1.2

Quickstart

Install the imreg package and all dependencies from the Python Package Index <https://pypi.org/project/imreg/>_::

python -m pip install -U imreg

See Examples_ for using the programming interface.

Source code and support are available on GitHub <https://github.com/cgohlke/imreg>_.

Requirements

This revision was tested with the following requirements and dependencies (other versions may work):

  • CPython <https://www.python.org>_ 3.9.13, 3.10.11, 3.11.7, 3.12.1
  • NumPy <https://pypi.org/project/numpy/>_ 1.26.2
  • Scipy <https://pypi.org/project/scipy>_ 1.11.4
  • Matplotlib 3.8.2 <https://pypi.org/project/matplotlib>_ (optional for plotting)

Revisions

2024.1.2

  • Add type hints.
  • Drop support for Python 3.8 and numpy < 1.23 (NEP29).

2022.9.27

  • Fix scipy.ndimage DeprecationWarning.

Notes

Imreg is no longer being actively developed.

This implementation is mainly for educational purposes.

An improved version is being developed at https://github.com/matejak/imreg_dft.

References

  1. An FFT-based technique for translation, rotation and scale-invariant image registration. BS Reddy, BN Chatterji. IEEE Transactions on Image Processing, 5, 1266-1271, 1996
  2. An IDL/ENVI implementation of the FFT-based algorithm for automatic image registration. H Xiea, N Hicksa, GR Kellera, H Huangb, V Kreinovich. Computers & Geosciences, 29, 1045-1055, 2003.
  3. Image Registration Using Adaptive Polar Transform. R Matungka, YF Zheng, RL Ewing. IEEE Transactions on Image Processing, 18(10), 2009.

Examples

im0 = imread('t400') im1 = imread('Tr19s1.3') im2, scale, angle, (t0, t1) = similarity(im0, im1) imshow(im0, im1, im2)

im0 = imread('t350380ori') im1 = imread('t350380shf') t0, t1 = translation(im0, im1) t0, t1 (20, 50)