Skip to main content

Python implementation of the ImageJ/FIJI Plugin TurboReg/StackReg

Project description

Summary

Python/C++ port of the ImageJ extension TurboReg/StackReg written by Philippe Thevenaz/EPFL.

A python extension for the automatic alignment of a source image or a stack (movie) to a target image/reference frame.

Description

pyStackReg is used to align (register) one or more images to a common reference image, as is required usually in time-resolved fluorescence or wide-field microscopy. It is directly ported from the source code of the ImageJ plugin TurboReg and provides additionally the functionality of the ImageJ plugin StackReg, both of which were written by Philippe Thevenaz/EPFL (available at http://bigwww.epfl.ch/thevenaz/turboreg/).

pyStackReg provides the following four types of distortion:

  • translation

  • rigid body (translation + rotation)

  • scaled rotation (translation + rotation + scaling)

  • affine (translation + rotation + scaling + shearing)

  • bilinear (non-linear transformation; does not preserve straight lines)

pyStackReg supports the full functionality of StackReg plus some additional options, e.g., using different reference images and having access to the actual transformation matrices (please see the examples below).

Please note: The bilinear transformation cannot be propagated, as a combination of bilinear transformations does not generally result in a bilinear transformation. Therefore, stack registration/transform functions won’t work with bilinear transformation when using “previous” image as reference image. You can either use another reference (“first” or “mean” for first or mean image, respectively), or try to register/transform each image of the stack separately to its respective previous image (and use the already transformed previous image as reference for the next image).

Installation

The package is available on PyPi. Install it using:

pip install pystackreg

Documentation

The documentation can be found on readthedocs:

https://pystackreg.readthedocs.io/

Usage

The following example opens two different files and registers them using all different possible transformations

from pystackreg import StackReg
from skimage import io

#load reference and "moved" image
ref = io.imread('some_original_image.tif')
mov = io.imread('some_changed_image.tif')

#Translational transformation
sr = StackReg(StackReg.TRANSLATION)
out_tra = sr.register_transform(ref, mov)

#Rigid Body transformation
sr = StackReg(StackReg.RIGID_BODY)
out_rot = sr.register_transform(ref, mov)

#Scaled Rotation transformation
sr = StackReg(StackReg.SCALED_ROTATION)
out_sca = sr.register_transform(ref, mov)

#Affine transformation
sr = StackReg(StackReg.AFFINE)
out_aff = sr.register_transform(ref, mov)

#Bilinear transformation
sr = StackReg(StackReg.BILINEAR)
out_bil = sr.register_transform(ref, mov)

The next example shows how to separate registration from transformation (e.g., to register in one color channel and then use that information to transform another color channel):

from pystackreg import StackReg
from skimage import io

img0 = io.imread('some_multiframe_image.tif')
img1 = io.imread('another_multiframe_image.tif')
# img0.shape: frames x width x height (3D)

sr = StackReg(StackReg.RIGID_BODY)

# register 2nd image to 1st
sr.register(img0[0, :, :], img0[1,:,:])

# use the transformation from the above registration to register another frame
out = sr.transform(img1[1,:,:])

The next examples shows how to register and transform a whole stack:

from pystackreg import StackReg
from skimage import io

img0 = io.imread('some_multiframe_image.tif') # 3 dimensions : frames x width x height

sr = StackReg(StackReg.RIGID_BODY)

# register each frame to the previous (already registered) one
# this is what the original StackReg ImageJ plugin uses
out_previous = sr.register_transform_stack(img0, reference='previous')

# register to first image
out_first = sr.register_transform_stack(img0, reference='first')

# register to mean image
out_mean = sr.register_transform_stack(img0, reference='mean')

# register to mean of first 10 images
out_first10 = sr.register_transform_stack(img0, reference='first', n_frames=10)

# calculate a moving average of 10 images, then register the moving average to the mean of
# the first 10 images and transform the original image (not the moving average)
out_moving10 = sr.register_transform_stack(img0, reference='first', n_frames=10, moving_average = 10)

The next example shows how to separate registration from transformation for a stack (e.g., to register in one color channel and then use that information to transform another color channel):

from pystackreg import StackReg
from skimage import io

img0 = io.imread('some_multiframe_image.tif') # 3 dimensions : frames x width x height
img1 = io.imread('another_multiframe_image.tif') # same shape as img0

# both stacks must have the same shape
assert img0.shape == img1.shape

sr = StackReg(StackReg.RIGID_BODY)

# register each frame to the previous (already registered) one
# this is what the original StackReg ImageJ plugin uses
tmats = sr.register_stack(img0, reference='previous')
out = sr.transform_stack(img1)

# tmats contains the transformation matrices -> they can be saved
# and loaded at another time
import numpy as np
np.save('transformation_matrices.npy', tmats)

tmats_loaded = np.load('transformation_matrices.npy')

# make sure you use the correct transformation here!
sr = StackReg(StackReg.RIGID_BODY)

# transform stack using the tmats loaded from file
sr.transform_stack(img1, tmats=tmats_loaded)

# with the transformation matrices at hand you can also
# use the transformation algorithms from other packages:
from skimage import transform as tf

out = np.zeros(img0.shape).astype(np.float)

for i in range(tmats.shape[0]):
    tform = tf.AffineTransform(matrix=tmats[i, :, :])
    out[i, :, :] = tf.warp(img1[i, :, :], tform)

Author information

This is a port of the original Java code by Philippe Thevenaz to C++ with a Python wrapper around it. All credit goes to the original author:

/*====================================================================
| Philippe Thevenaz
| EPFL/STI/IMT/LIB/BM.4.137
| Station 17
| CH-1015 Lausanne VD
| Switzerland
|
| phone (CET): +41(21)693.51.61
| fax: +41(21)693.37.01
| RFC-822: philippe.thevenaz@epfl.ch
| X-400: /C=ch/A=400net/P=switch/O=epfl/S=thevenaz/G=philippe/
| URL: http://bigwww.epfl.ch/
\===================================================================*/

/*====================================================================
| This work is based on the following paper:
|
| P. Thevenaz, U.E. Ruttimann, M. Unser
| A Pyramid Approach to Subpixel Registration Based on Intensity
| IEEE Transactions on Image Processing
| vol. 7, no. 1, pp. 27-41, January 1998.
|
| This paper is available on-line at
| http://bigwww.epfl.ch/publications/thevenaz9801.html
|
| Other relevant on-line publications are available at
| http://bigwww.epfl.ch/publications/
\===================================================================*/

License

You are free to use this software for commercial and non-commercial
purposes. However, we expect you to include a citation or acknowledgement
whenever you present or publish research results that are based
on this software. You are free to modify this software or derive
works from it, but you are only allowed to distribute it under the
same terms as this license specifies. Additionally, you must include
a reference to the research paper above in all software and works
derived from this software.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pystackreg-0.2.2.tar.gz (33.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pystackreg-0.2.2-cp39-cp39-win_amd64.whl (62.1 kB view details)

Uploaded CPython 3.9Windows x86-64

pystackreg-0.2.2-cp39-cp39-win32.whl (53.6 kB view details)

Uploaded CPython 3.9Windows x86

pystackreg-0.2.2-cp38-cp38-win_amd64.whl (62.1 kB view details)

Uploaded CPython 3.8Windows x86-64

pystackreg-0.2.2-cp38-cp38-win32.whl (53.6 kB view details)

Uploaded CPython 3.8Windows x86

pystackreg-0.2.2-cp37-cp37m-win_amd64.whl (72.1 kB view details)

Uploaded CPython 3.7mWindows x86-64

pystackreg-0.2.2-cp37-cp37m-win32.whl (61.1 kB view details)

Uploaded CPython 3.7mWindows x86

pystackreg-0.2.2-cp36-cp36m-win_amd64.whl (72.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

pystackreg-0.2.2-cp36-cp36m-win32.whl (61.1 kB view details)

Uploaded CPython 3.6mWindows x86

pystackreg-0.2.2-cp35-cp35m-win_amd64.whl (61.9 kB view details)

Uploaded CPython 3.5mWindows x86-64

pystackreg-0.2.2-cp35-cp35m-win32.whl (53.4 kB view details)

Uploaded CPython 3.5mWindows x86

pystackreg-0.2.2-cp27-cp27m-win_amd64.whl (73.4 kB view details)

Uploaded CPython 2.7mWindows x86-64

pystackreg-0.2.2-cp27-cp27m-win32.whl (61.8 kB view details)

Uploaded CPython 2.7mWindows x86

File details

Details for the file pystackreg-0.2.2.tar.gz.

File metadata

  • Download URL: pystackreg-0.2.2.tar.gz
  • Upload date:
  • Size: 33.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2.tar.gz
Algorithm Hash digest
SHA256 2bc8bdac892bb827cd2725b8ee45bbcdb8835f2fb1d41863f6d50c77f7e36ccc
MD5 5e8890fcd6170399993852f40ceaed8f
BLAKE2b-256 9ac3d2a84134739dbff00aab3079d6d1371a76713d9f9f29a4315a29b45364d4

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 62.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.0

File hashes

Hashes for pystackreg-0.2.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3731429a913a13473cdcd2da11fd862f4026e4cea05b4f0d5833cb0c937cae90
MD5 38dd37056d6560b08fdd127cb21b5ad4
BLAKE2b-256 f1bb0d461afb77c028a25cf225f1da0cde3a64ea771fe3203c2815e06e10ed6d

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp39-cp39-win32.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp39-cp39-win32.whl
  • Upload date:
  • Size: 53.6 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.0

File hashes

Hashes for pystackreg-0.2.2-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 42163fd7a3ca007cd0d599658f85c2a5e1caa4a8c6120dfbf7b27c2d299e4baa
MD5 7500fee891ce16a5f53684dd231aac3e
BLAKE2b-256 adfac676b244722b1c9df76f391a92881c4ceea45754b2bbc83f604f6dbd0231

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 62.1 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for pystackreg-0.2.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 4a3120f847a07c11eaf6f1c1a976f086603f69efd6cf12517381e34bd424a4c1
MD5 8f2ada4669d25832c72491265170a3bb
BLAKE2b-256 f8c38db608d6c65b788946ab91458a148ec2287d44f3ded138b7fe6703a11835

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp38-cp38-win32.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp38-cp38-win32.whl
  • Upload date:
  • Size: 53.6 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.0.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6

File hashes

Hashes for pystackreg-0.2.2-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 f3b5af8ada39a81cd722f04b3f26df1918a66d88ae0c8ebc2e912f23835e2a0f
MD5 6ec1e6310ff4d910bebf1a8bd1495bf9
BLAKE2b-256 b0a95a6af9dfda0cf9f939e7411bbac914b4e32909ea398341aef97e96506e38

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 72.1 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 5ab2b29543b20ef095c5ec5d4d33f7f7593f1bee95fd29cf652543d08accd391
MD5 2c561ccf66922ca9e4cf629a091e280a
BLAKE2b-256 9e2758f0cfedcbb7bb78100bfbf1d3c035373bfeab6c29063d7ea8fd71a498bc

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp37-cp37m-win32.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 61.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 717dc5d905623fb765783af3c403fede119b09c8568219c2052afacf3aaaedb2
MD5 f71c38b52b3d529610f0c087f5593eeb
BLAKE2b-256 356349cc32731b5ed1e78fd008c44b919be3c7ed9b039fa26ec58c3d3208bd40

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 72.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 611795a842f96bb3f94cc1dbadefe2aa23d61d5bc9fb18efa7a80afe47af4ffd
MD5 4677bb9b47980c234be4e1197b1711f5
BLAKE2b-256 f2dfec6a9a91e9c64932cdd3a8ed52d6907aa736dab86ec5eed834687ca9d7f0

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp36-cp36m-win32.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 61.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 d2a46e4e076c03680bf44276f6cd7e61cfa3586debb7e4f19da50490156548db
MD5 cd4aca37a977ffe46a172df23210a871
BLAKE2b-256 ff59e4a3fe84a8221b83fb35f4ba30387996389584b61f66d7f4fbc2e77126a4

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 61.9 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.5.4

File hashes

Hashes for pystackreg-0.2.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 ee0c5fa49b98e09ebda4fd1c4449b3fec9eb7f7fe546662bff26e28f2bcba93a
MD5 027e5875592893f90f8813e097c2f148
BLAKE2b-256 69d1473a49dd20bf2e2a5be6652a2b820a834245445bb587d02237c767332bc3

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp35-cp35m-win32.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 53.4 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.6.1 requests/2.25.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.5.4

File hashes

Hashes for pystackreg-0.2.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 baa3076659d3745109c21747766249b8527b98459aab5427e19794937edab92b
MD5 2360284846f2cfaa351969b71a90fcaa
BLAKE2b-256 f6704f190d836ed654b3faffae6e247de49d478727b7d6af794d94c467dd5557

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 73.4 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 672523a7dde3f61ae8cd671f0c4c2c278375788312eb7c53fbb2d4407b181200
MD5 35b08a1627b59207200121ba6b3710cf
BLAKE2b-256 3d7d907ec5422a51d8ac8ddc9dbefdb49ac225c01fd8c879f37fdd12653f9645

See more details on using hashes here.

File details

Details for the file pystackreg-0.2.2-cp27-cp27m-win32.whl.

File metadata

  • Download URL: pystackreg-0.2.2-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 61.8 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for pystackreg-0.2.2-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 7cadb9712e2632486f58e293ca754561837654a8fb317fa55d85e1385bcd5dc6
MD5 49972ead92a6af0b01ff4b17cb3059c1
BLAKE2b-256 9e30b6048773f2e4108e7c5cd90fedebbca0e1ebbbbd502441b03bd9ea2789ce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page