Source code for darsia.corrections.shape.deformation
"""Module containing a local deformation correction.
This is essentially a correction object through wrappping
:mod:`darsia.DiffeomorphicImageRegistration`.
"""
from typing import Optional
import numpy as np
import darsia
[docs]
class DeformationCorrection(darsia.BaseCorrection):
"""Patch-wise defined deformation correction defined through image registration.
Attributes:
base (darsia.Image): reference (baseline) image.
"""
def __init__(self, base: darsia.Image, config: Optional[dict]) -> None:
"""Constructor.
Args:
base (darsia.Image): baseline image
config (dict, optional): contains all tuning parameters.
"""
# Convert config to dictionary.
if config is None:
config = {}
self.active = False
else:
# Check whether correction active
self.active = config.get("active", True)
if self.active:
self.base = base
if config is None:
config = {}
self.image_registration = darsia.ImageRegistration(self.base, **config)
[docs]
def correct_array(self, img: np.ndarray) -> np.ndarray:
"""Main routine for aligning image with baseline image.
Args:
img (np.ndarray): input image, to be aligned.
Returns:
np.ndarray: aligned image array.
"""
if self.active:
metadata = self.base.metadata()
transformed_img: darsia.Image = self.image_registration(
darsia.Image(img, **metadata)
)
return transformed_img.img
else:
return img