A user Filter plugin can be defined by a class or a function in a python package.
A filter plugin defined by a function is a simple python function with four arguments: numpy_image, image_name, JSON_metadata, ImageWidget.
This function returns new_numpy_image or None or tuple (new_numpy_image, filtermetadata_dict) , e.g.
from scipy import ndimage
def rot45(image, imagename, metadata, imagewg): """ rotate image by 45 deg
:param image: numpy array with an image :type image: :class:`numpy.ndarray` :param imagename: image name :type imagename: :obj:`str` :param metadata: JSON dictionary with metadata :type metadata: :obj:`str` :param imagewg: image wigdet :type imagewg: :class:`lavuelib.imageWidget.ImageWidget` :returns: numpy array with an image :rtype: :class:`numpy.ndarray` or `None` """ return ndimage.rotate(image, 45)
A filter plugin defined by a class it should have defined __call__ method with four arguments: numpy_image, image_name, JSON_metadata, ImageWidget.
This __call__ function returns new_numpy_image or None or tuple (new_numpy_image, filtermetadata_dict) .
Moreover, the class constructor has one configuration string argument initialized by an initialization parameter, e.g.
import numpy as np
import json
class HGap(object):
""" Horizontal gap filter"""
def __init__(self, configuration=None): """ converts the configuration string into a list of indexes
:param configuration: JSON list with horizontal gap pixels to add :type configuration: :obj:`str` """ #: (:obj:`list` <:obj: `str`>) list of indexes for gap self.__indexes = [int(idx) for idx in json.loads(configuration)]
def __call__(self, image, imagename, metadata, imagewg): """ inserts rows into the image
:param image: numpy array with an image :type image: :class:`numpy.ndarray` :param imagename: image name :type imagename: :obj:`str` :param metadata: JSON dictionary with metadata :type metadata: :obj:`str` :param imagewg: image wigdet :type imagewg: :class:`lavuelib.imageWidget.ImageWidget` :returns: numpy array with an image :rtype: :class:`numpy.ndarray` or `None` """ return np.insert(image, self.__indexes, 0, axis=1)
.
Moreover, it can have an initialize() or terminate() method to perform an action of switching on or off filters respectively.
More sophisticated examples can be found at lavuefilters :
lavuefilters.memoplugins.HistoryDumpcontains a filter which collects distinct images displayed by lavue in memorylavuefilters.h5pyplugins.H5PYdumpdiffcontains a filter which dumps distict images displayed by lavue to an hdf5 filelavuefilters.h5pyplugins.H5PYdumpcontains a filter which dumps images displayed by lavue to an hdf5 file
To configure filters see Filter plugins settings