RadonSolver

class imgreg.models.radon.solver.RadonSolver(ref_img: Optional[numpy.ndarray] = None, mod_img: Optional[numpy.ndarray] = None)[source]

Implements an image registration model based on the radon transform.

The model tries to reconstruct the difference of rotation and translation between two images.

Parameters
ref_imgnumpy.ndarray

The original input image (one color channel only).

mod_imgnumpy.ndarray

The modified input image (one color channel only).

Notes

The model implements the following dependency graph to construct it’s Parameters.

// dependencies digraph { RECOVERED_ROT_IMG [shape=box] RECOVERED_ROTATION [shape=oval] REF_IMG [shape=box] THETA [shape=oval] RECOVERED_TRANSLATION [shape=oval] ANGULAR_PRECISION [shape=oval] ANGLE_SELECT [shape=oval] REF_ROTATION [shape=oval] ROTATION_CANDIDATE [shape=oval] MOD_IMG [shape=box] UPSAMPLING [shape=oval] RECOVERED_ROT_TR_IMG [shape=box] MOD_ROTATION [shape=oval] EXPONENTIAL_FILTER_SIGNAL_NOISE [shape=oval] ANGLE_SELECT -> RECOVERED_ROT_IMG ROTATION_CANDIDATE -> RECOVERED_ROTATION ANGLE_SELECT -> RECOVERED_ROTATION ANGLE_SELECT -> RECOVERED_TRANSLATION MOD_IMG -> ANGLE_SELECT UPSAMPLING -> ANGLE_SELECT ROTATION_CANDIDATE -> ANGLE_SELECT REF_IMG -> ANGLE_SELECT EXPONENTIAL_FILTER_SIGNAL_NOISE -> REF_ROTATION THETA -> REF_ROTATION ANGULAR_PRECISION -> REF_ROTATION REF_IMG -> REF_ROTATION REF_ROTATION -> ROTATION_CANDIDATE MOD_ROTATION -> ROTATION_CANDIDATE ANGLE_SELECT -> RECOVERED_ROT_TR_IMG MOD_IMG -> MOD_ROTATION THETA -> MOD_ROTATION ANGULAR_PRECISION -> MOD_ROTATION EXPONENTIAL_FILTER_SIGNAL_NOISE -> MOD_ROTATION }

The Parameters are documented in params.

Examples

We can visualize the internal ImageParameters of the model as follows:

import numpy as np
import imgreg.data as data
from imgreg.models.radon import RadonSolver

ref_img = np.array(data.ref_img())
mod_img = np.array(data.mod_img())

# Create the model:
ras = RadonSolver(ref_img, mod_img)

# The ImageParameters of the model have matplotlib support via the display function:
ras.display([ras.REF_IMG, ras.MOD_IMG])
ras.display([ras.RECOVERED_ROT_IMG, ras.REF_IMG])
ras.display([ras.RECOVERED_ROT_TR_IMG, ras.REF_IMG])

(Source code)

If we simply want to create a model and access the recovered values we first setup a model:

>>> import numpy as np
>>> import imgreg.data as data
>>> from imgreg.models.radon import RadonSolver
>>> ref_img = np.array(data.ref_img())
>>> mod_img = np.array(data.mod_img())
>>> ras = RadonSolver(ref_img, mod_img)

Now the parameters of the model can now be accessed as follows:

>>> ras.RECOVERED_ROTATION.value
array([-11.35802469,   0.28284271])
>>> ras.RECOVERED_TRANSLATION.value
array([-11.80822224,  25.77936941,   0.30466765])

Methods

__init__([ref_img, mod_img])

Initialize self.

display(param_list[, title])

Fancy plot functionality for registered ImageParameters.

dot_graph([node_args_func])

Return a dot graph representation of the solver model.