Source code for fluidimage.works.bos

"""Background-oriented schlieren

Provides

.. autoclass:: WorkBOS
   :members:
   :private-members:

"""

from pathlib import Path

from fluidimage.data_objects.piv import ArrayCoupleBOS
from fluidimage.util import imread
from fluidimage.works import BaseWorkFromImage
from fluidimage.works.piv import WorkPIV


[docs]class WorkBOS(BaseWorkFromImage): """Work for BOS computation. See https://en.wikipedia.org/wiki/Background-oriented_schlieren_technique """ path_dir_src: Path
[docs] @classmethod def _complete_params_with_default(cls, params): super()._complete_params_with_default(params) WorkPIV._complete_params_with_default_piv(params) params._set_attrib("reference", 0) params._set_doc( """ - reference : str or int, {0} Reference file (from which the displacements will be computed). Can be an absolute file path, a file name or the index in the list of files found from the parameters in ``params.images``. """ )
def __init__(self, params): super().__init__(params) self.init_from_input() self.work_piv = WorkPIV(params) def init_from_input(self): self._init_serie() path_reference = self._init_path_reference(self.params) self.name_reference = path_reference.name self.path_reference = path_reference self.image_reference = imread(path_reference) def _init_path_reference(self, params): reference = params.reference self.path_dir_src = Path(self.serie.path_dir).absolute() if isinstance(reference, int): names = self.serie.get_name_arrays() names = sorted(names) path_reference = self.path_dir_src / names[reference] else: reference = Path(reference).expanduser() if reference.is_file(): path_reference = reference else: path_reference = self.path_dir_src / reference if not path_reference.is_file(): raise ValueError( "Bad value of params.reference:" + path_reference ) return path_reference
[docs] def calcul(self, tuple_image_name): """Calcul BOS from one image""" image, name = tuple_image_name path = self.path_dir_src / name array_couple = ArrayCoupleBOS( names=(self.name_reference, name), arrays=(self.image_reference, image), params_mask=self.params.mask, serie=self.serie, paths=[self.path_reference, path], ) return self.work_piv.calcul(array_couple)