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 transformation is not (yet) made available, althought the source code has been fully ported. For technical details, please refer to http://bigwww.epfl.ch/thevenaz/turboreg/.
Installation
The package is available on PyPi. Install it using:
pip install pystackreg
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)
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 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 each frame to the previous (already registered) one
out_previous = sr.register_transform_stack(img0, reference='previous')
# 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)
License
Below is the license of TurboReg/StackReg:
/*==================================================================== | Additional help available at http://bigwww.epfl.ch/thevenaz/turboreg/ | | You'll be free to use this software for research purposes, but you | should not redistribute it without our consent. In addition, we expect | you to include a citation or acknowledgment whenever you present or | publish results that are based on it. \===================================================================*/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pystackreg-0.1.0-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09a170dc35d9c78c1587887d5758b1d52b7e042468efa3e71bfd04b13b0e206c |
|
MD5 | 7371408aebe80485bb25f262268d2765 |
|
BLAKE2b-256 | c6accc78b761958ec0987d6f0bacd71ce784c470edafdce2f6308fd781d2a6ff |
Hashes for pystackreg-0.1.0-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85bfaee18852d14498005e7840caaaa3da4f099ef0b94803eb1e37c3e0f2bbf4 |
|
MD5 | 5ebb1cb19c50dc9ed5d3c3a885605e7f |
|
BLAKE2b-256 | ee1fb58195c9b53d230fe8637c8aa2d7ae9d3a52879f727396f897d7794021ba |
Hashes for pystackreg-0.1.0-cp27-cp27m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 38b67d162049882daca06dc4484c5c5673efb91720853e373d1ad45dbb7407ae |
|
MD5 | bd180ea435e01d76aa81547a2be42560 |
|
BLAKE2b-256 | f5454bba000f6e6ba7a81acc9f2d089dbf30c208044de4857aee928a4d7e40d8 |
Hashes for pystackreg-0.1.0-cp27-cp27m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c8d1d64573693618a4132fc2d20a9bc8cb2e44e712b1f2fa5e8ad9b4a5bd21a |
|
MD5 | ab22d7a209f55e91d19e55cb7aac1179 |
|
BLAKE2b-256 | 90985e0af34e28674387707aeedd351a68d1ca6fc1a6d58105e10bd182eab152 |