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. The model is limited such, that due to the symmetry of the method it only considers angles between 0 and 180 degrees. It will fail, if the rotation angle is larger.

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 `ImageParameter`\ s 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.