Source code for fluidimage.works.image2image

"""Image to image processing

Provides

.. autofunction:: init_im2im_function

.. autofunction:: complete_im2im_params_with_default

.. autofunction:: get_im2im_function_from_params

.. autoclass:: WorkImage2Image
   :members:
   :private-members:

"""

import types

from fluiddyn.util import import_class
from fluidimage.data_objects.display_pre import DisplayPreProc
from fluidimage.works import BaseWorkFromImage


[docs]def complete_im2im_params_with_default(params): """Complete params for image-to-image processing.""" params._set_attribs({"im2im": None, "args_init": tuple()}) params._set_doc( """ - im2im : str {None} Function or class to be used to process the images. - args_init : object {None} An argument given to the init function of the class used to process the images. """ )
[docs]def init_im2im_function(im2im=None, args_init=()): """Initialize the filter function.""" if isinstance(im2im, str): str_package, str_obj = im2im.rsplit(".", 1) im2im = import_class(str_package, str_obj) if isinstance(im2im, types.FunctionType): obj = im2im im2im_func = im2im elif isinstance(im2im, type): print("in init_im2im", args_init) obj = im2im(*args_init) im2im_func = obj.calcul return obj, im2im_func
[docs]def get_im2im_function_from_params(params_im2im): """Helper for other topologies""" _, im2im_func = init_im2im_function( im2im=params_im2im.im2im, args_init=params_im2im.args_init ) return im2im_func
[docs]class WorkImage2Image(BaseWorkFromImage): """Work for image to image processing"""
[docs] @classmethod def _complete_params_with_default(cls, params): super()._complete_params_with_default(params) complete_im2im_params_with_default(params)
def __init__(self, params): super().__init__(params) self._init_serie() self.im2im_obj, self.im2im_func = init_im2im_function( im2im=params.im2im, args_init=params.args_init )
[docs] def calcul(self, tuple_image_name): return self.im2im_func(tuple_image_name)
[docs] def display(self, ind=0, hist=False): """Display figures to study the preprocessing""" tuple_image_name0 = self.get_tuple_image_name(ind) tuple_image_name1 = self.get_tuple_image_name(ind + 1) arr_input0, _ = tuple_image_name0 arr_input1, _ = tuple_image_name1 arr_output0 = self.calcul(tuple_image_name0[::-1]) arr_output1 = self.calcul(tuple_image_name1[::-1]) return DisplayPreProc( arr_input0, arr_input1, arr_output0, arr_output1, hist=hist )
Work = WorkImage2Image