Source code for fluidimage.postproc.piv
"""PIV post-processing (:mod:`fluidimage.postproc.piv`)
=======================================================
.. autofunction:: get_grid_pixel_from_piv_file
.. autofunction:: get_grid_pixel
.. autoclass:: PIV2d
:members:
:private-members:
.. autoclass:: ArrayPIV
:members:
:private-members:
"""
import h5py
from fluiddyn.util.paramcontainer import ParamContainer
from fluidimage.works.piv.multipass import WorkPIV
from .vector_field import ArrayOfVectorFieldsOnGrid, VectorFieldOnGrid
[docs]class PIV2d(VectorFieldOnGrid):
pass
[docs]def get_grid_pixel_from_piv_file(path, index_pass=-1):
"""Recompute 1d arrays containing the approximate positions of the vectors
Useful to compute a grid on which we can interpolate the displacement fields.
Parameters
----------
path: str
Path of a PIV file.
index_pass: int
Index of the pass
Returns
-------
xs1d: np.ndarray
Indices (2nd, direction "x") of the pixel in the image
ys1d: np.ndarray
Indices (1st, direction "y") of the pixel in the image
"""
with h5py.File(path, "r") as file:
params = ParamContainer(hdf5_object=file["params"])
shape_images = file["couple/shape_images"][...]
return get_grid_pixel(params, shape_images, index_pass)
[docs]def get_grid_pixel(params, shape_images, index_pass=-1):
"""Recompute 1d arrays containing the approximate positions of the vectors
Useful to compute a grid on which we can interpolate the displacement fields.
Parameters
----------
params: fluiddyn.util.paramcontainer.ParamContainer
Parameters for the class :class:`fluidimage.works.piv.multipass.WorkPIV`
shape_images: sequence
Shape of the images
index_pass: int
Index of the pass
Returns
-------
xs1d: np.ndarray
Indices (2nd, direction "x") of the pixel in the image
ys1d: np.ndarray
Indices (1st, direction "y") of the pixel in the image
"""
params_default = WorkPIV.create_default_params()
params_default._modif_from_other_params(params)
work_multi = WorkPIV(params_default)
work_multi._prepare_with_image(imshape=shape_images)
work = work_multi.works_piv[index_pass]
xs1d = work.ixvecs
ys1d = work.iyvecs
return xs1d, ys1d
[docs]class ArrayPIV(ArrayOfVectorFieldsOnGrid):
"""Array of PIV fields on a regular grid."""