"""
Module implementing the parameter classes for a validator.
Author: Fabian A. Preiss
"""
from enum import Enum
from typing import Dict, Optional
import numpy as np
from imgreg.models.validator.enums import ValidatorParams
from imgreg.util.methods import ImageMethods
from imgreg.util.params import ImageParameter, Parameter
# Root Parameters
[docs]class ImageParam(ImageParameter):
"""
Image.
Attributes
----------
value : numpy.ndarray
"""
def __init__(self, image: Optional[np.ndarray] = None):
super().__init__(ValidatorParams.IMG, np.ndarray)
if image is not None:
self.value = image
self.title = "Image"
[docs]class RefImageParam(ImageParameter):
"""
Reference image.
Attributes
----------
value : numpy.ndarray
"""
def __init__(self, image: Optional[np.ndarray] = None):
super().__init__(ValidatorParams.REF_IMG, np.ndarray)
if image is not None:
self.value = image
self.title = "Reference Image"
# derived properties
[docs]class NormRelL2Param(Parameter):
"""
Relative L2 Norm similarity measurement for the images.
Attributes
----------
value : float
"""
def __init__(self, parent_parameters):
super().__init__(
ValidatorParams.NORM_REL_L2,
NormRelL2Param._value_function_handle,
parent_parameters=parent_parameters,
)
self.title = "norm(ref_image-image)/norm(ref_image)"
@staticmethod
def _value_function_handle(params: Dict[Enum, Parameter]) -> float:
return ImageMethods.norm_rel_l2(
params[ValidatorParams.IMG].value,
params[ValidatorParams.REF_IMG].value,
)
[docs]class AbsoluteDifferenceParam(ImageParameter):
"""
Absolute value of the difference between the images.
Attributes
----------
value : numpy.ndarray
"""
def __init__(self, parent_parameters):
super().__init__(
ValidatorParams.ABSOLUTE_DIFFERENCE_IMG,
AbsoluteDifferenceParam._value_function_handle,
parent_parameters=parent_parameters,
)
self.title = "abs(ref_image-image)"
@staticmethod
def _value_function_handle(params: Dict[Enum, Parameter]) -> np.ndarray:
return ImageMethods.abs_diff(
params[ValidatorParams.IMG].value,
params[ValidatorParams.REF_IMG].value,
)
[docs]class SquaredDifferenceParam(ImageParameter):
"""
Squared difference between the images.
Attributes
----------
value : numpy.ndarray
"""
def __init__(self, parent_parameters):
super().__init__(
ValidatorParams.SQUARED_DIFFERENCE_IMG,
SquaredDifferenceParam._value_function_handle,
parent_parameters=parent_parameters,
)
self.title = "(ref_image-image)^2"
@staticmethod
def _value_function_handle(params: Dict[Enum, Parameter]) -> np.ndarray:
return ImageMethods.sqr_diff(
params[ValidatorParams.IMG].value,
params[ValidatorParams.REF_IMG].value,
)