Source code for fluidimage.topologies.image2image

"""Topology for image2image preprocessing
=========================================

.. autoclass:: TopologyImage2Image
   :members:
   :private-members:

"""

import sys
from pathlib import Path

from fluiddyn.io.image import imsave
from fluidimage import ParamContainer
from fluidimage.topologies import prepare_path_dir_result
from fluidimage.topologies.splitters import SplitterFromImages
from fluidimage.util import imread
from fluidimage.works.image2image import WorkImage2Image

from .base import TopologyBaseFromImages


[docs]class TopologyImage2Image(TopologyBaseFromImages): """Topology for images processing with a user-defined function The most useful methods for the user (in particular :func:`compute`) are defined in the base class :class:`fluidimage.topologies.base.TopologyBase`. Parameters ---------- params : None A ParamContainer (created with the class method :func:`create_default_params`) containing the parameters for the computation. logging_level : str, {'warning', 'info', 'debug', ...} Logging level. nb_max_workers : None, int Maximum numbers of "workers". If None, a number is computed from the number of cores detected. If there are memory errors, you can try to decrease the number of workers. """ _short_name = "im2im" Splitter = SplitterFromImages
[docs] @classmethod def create_default_params(cls): """Class method returning the default parameters. Typical usage:: params = TopologyImage2Image.create_default_params() # modify parameters here ... topo = TopologyImage2Image(params) """ params = ParamContainer(tag="params") super()._add_default_params_saving(params) WorkImage2Image._complete_params_with_default(params) return params
def __init__(self, params, logging_level="info", nb_max_workers=None): self.params = params if params.im2im is None: raise ValueError("params.im2im has to be set.") self.work = WorkImage2Image(params) self.serie = self.work.serie im2im_func = self.work.im2im_func path_dir = self.serie.path_dir path_dir_result, self.how_saving = prepare_path_dir_result( path_dir, params.saving.path, params.saving.postfix, params.saving.how ) self.path_dir_result = path_dir_result self.path_dir_src = Path(path_dir) super().__init__( path_dir_result=path_dir_result, logging_level=logging_level, nb_max_workers=nb_max_workers, ) self.queue_paths = self.add_queue("paths") self.queue_arrays = self.add_queue("arrays") self.queue_results = self.add_queue("results") self.add_work( "fill_path", self.fill_queue_paths, output_queue=self.queue_paths, kind="one shot", ) self.add_work( "read_array", imread, input_queue=self.queue_paths, output_queue=self.queue_arrays, kind="io", ) self.add_work( "im2im", im2im_func, input_queue=self.queue_arrays, output_queue=self.queue_results, kind="eat key value", ) self.add_work( "save", self.save_image, input_queue=self.queue_results, kind=("io", "eat key value"), ) self.results = []
[docs] def save_image(self, tuple_path_image): """Save an image""" path, image = tuple_path_image name_file = Path(path).name path_out = self.path_dir_result / name_file imsave(path_out, image) self.results.append(name_file)
Topology = TopologyImage2Image if "sphinx" in sys.modules: _params = TopologyImage2Image.create_default_params() __doc__ += _params._get_formatted_docs()