topostats.filters ================= .. py:module:: topostats.filters .. autoapi-nested-parse:: Module for filtering 2D Numpy arrays. .. !! processed by numpydoc !! Attributes ---------- .. autoapisummary:: topostats.filters.LOGGER Classes ------- .. autoapisummary:: topostats.filters.Filters Module Contents --------------- .. py:data:: LOGGER .. py:class:: Filters(image: numpy.typing.NDArray, filename: str, pixel_to_nm_scaling: float, row_alignment_quantile: float = 0.5, threshold_method: str = 'otsu', otsu_threshold_multiplier: float = 1.7, threshold_std_dev: dict = None, threshold_absolute: dict = None, gaussian_size: float = None, gaussian_mode: str = 'nearest', remove_scars: dict = None) Class for filtering scans. :param image: The raw image from the Atomic Force Microscopy machine. :type image: npt.NDArray :param filename: The filename (used in logging only). :type filename: str :param pixel_to_nm_scaling: Value for converting pixels to nanometers. :type pixel_to_nm_scaling: float :param row_alignment_quantile: Quantile (0.0 to 1.0) to be used to determine the average background for the image below values may improve flattening of large features. :type row_alignment_quantile: float :param threshold_method: Method for thresholding, default 'otsu', valid options 'otsu', 'std_dev' and 'absolute'. :type threshold_method: str :param otsu_threshold_multiplier: Value for scaling the derived Otsu threshold. :type otsu_threshold_multiplier: float :param threshold_std_dev: If using the 'std_dev' threshold method. Dictionary that contains above and below threshold values for the number of standard deviations from the mean to threshold. :type threshold_std_dev: dict :param threshold_absolute: If using the 'absolute' threshold method. Dictionary that contains above and below absolute threshold values for flattening. :type threshold_absolute: dict :param gaussian_size: If using the 'absolute' threshold method. Dictionary that contains above and below absolute threshold values for flattening. :type gaussian_size: float :param gaussian_mode: Method passed to 'skimage.filters.gaussian(mode = gaussian_mode)'. :type gaussian_mode: str :param remove_scars: Dictionary containing configuration parameters for the scar removal function. :type remove_scars: dict .. !! processed by numpydoc !! .. py:attribute:: filename .. py:attribute:: pixel_to_nm_scaling .. py:attribute:: gaussian_size .. py:attribute:: gaussian_mode .. py:attribute:: row_alignment_quantile .. py:attribute:: threshold_method .. py:attribute:: otsu_threshold_multiplier .. py:attribute:: threshold_std_dev .. py:attribute:: threshold_absolute .. py:attribute:: remove_scars_config .. py:attribute:: images .. py:attribute:: thresholds :value: None .. py:attribute:: medians .. py:attribute:: results .. py:method:: median_flatten(image: numpy.typing.NDArray, mask: numpy.typing.NDArray = None, row_alignment_quantile: float = 0.5) -> numpy.typing.NDArray Flatten images using median differences. Flatten the rows of an image, aligning the rows and centering the median around zero. When used with a mask, this has the effect of centering the background data on zero. Note this function does not handle scars. :param image: 2-D image of the data to align the rows of. :type image: npt.NDArray :param mask: Boolean array of points to mask (ignore). :type mask: npt.NDArray :param row_alignment_quantile: Quantile (in the range 0.0 to 1.0) used for defining the average background. :type row_alignment_quantile: float :returns: Copy of the input image with rows aligned. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: remove_tilt(image: numpy.typing.NDArray, mask: numpy.typing.NDArray = None) -> numpy.typing.NDArray Remove the planar tilt from an image (linear in 2D spaces). Uses a linear fit of the medians of the rows and columns to determine the linear slants in x and y directions and then subtracts the fit from the columns. :param image: 2-D image of the data to remove the planar tilt from. :type image: npt.NDArray :param mask: Boolean array of points to mask (ignore). :type mask: npt.NDArray :returns: Numpy array of image with tilt removed. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: remove_nonlinear_polynomial(image: numpy.typing.NDArray, mask: numpy.typing.NDArray | None = None) -> numpy.typing.NDArray Fit and remove a "saddle" shaped nonlinear polynomial from the image. "Saddles" with the form a + b * x * y - c * x - d * y from the supplied image. AFM images sometimes contain a "saddle" shape trend to their background, and so to remove them we fit a nonlinear polynomial of x and y and then subtract the fit from the image. If these trends are not removed, then the image will not flatten properly and will leave opposite diagonal corners raised or lowered. :param image: 2-D numpy height-map array of floats with a polynomial trend to remove. :type image: npt.NDArray :param mask: 2-D Numpy boolean array used to mask any points in the image that are deemed not to be part of the height-map's background data. :type mask: npt.NDArray, optional :returns: Image with the polynomial trend subtracted. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: remove_quadratic(image: numpy.typing.NDArray, mask: numpy.typing.NDArray = None) -> numpy.typing.NDArray Remove the quadratic bowing that can be seen in some large-scale AFM images. Use a simple quadratic fit on the medians of the columns of the image and then subtracts the calculated quadratic from the columns. :param image: 2-D image of the data to remove the quadratic from. :type image: npt.NDArray :param mask: Boolean array of points to mask (ignore). :type mask: npt.NDArray :returns: Image with the quadratic bowing removed. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: calc_diff(array: numpy.typing.NDArray) -> numpy.typing.NDArray :staticmethod: Calculate the difference between the last and first rows of a 2-D array. :param array: A Numpy array. :type array: npt.NDArray :returns: An array of the difference between the last and first rows of an array. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: calc_gradient(array: numpy.typing.NDArray, shape: int) -> numpy.typing.NDArray Calculate the gradient of an array. :param array: Array for gradient to be calculated. :type array: npt.NDArray :param shape: Shape of the array. :type shape: int :returns: Gradient across the array. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: average_background(image: numpy.typing.NDArray, mask: numpy.typing.NDArray = None) -> numpy.typing.NDArray Zero the background by subtracting the non-masked mean from all pixels. :param image: Numpy array representing the image. :type image: npt.NDArray :param mask: Mask of the array, should have the same dimensions as image. :type mask: npt.NDArray :returns: Numpy array of image zero averaged. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: gaussian_filter(image: numpy.typing.NDArray, **kwargs) -> numpy.typing.NDArray Apply Gaussian filter to an image. :param image: Numpy array representing the image. :type image: npt.NDArray :param \*\*kwargs: Keyword arguments passed on to the skimage.filters.gaussian() function. :returns: Numpy array that represent the image after Gaussian filtering. :rtype: npt.NDArray .. !! processed by numpydoc !! .. py:method:: filter_image() -> None Process a single image, filtering, finding grains and calculating their statistics. :returns: Does not return anything. :rtype: None .. rubric:: Examples from topostats.io import LoadScan from topostats.topotracing import Filter, process_scan filter = Filter(image=load_scan.image, ... pixel_to_nm_scaling=load_scan.pixel_to_nm_scaling, ... filename=load_scan.filename, ... threshold_method='otsu') filter.filter_image() .. !! processed by numpydoc !!