topostats.filters#

Module for filtering 2D Numpy arrays.

Attributes#

Classes#

Filters

Class for filtering scans.

Module Contents#

topostats.filters.LOGGER#
class topostats.filters.Filters(image: numpy.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.

filename#
pixel_to_nm_scaling#
gaussian_size#
gaussian_mode#
row_alignment_quantile#
threshold_method#
otsu_threshold_multiplier#
threshold_std_dev#
threshold_absolute#
remove_scars_config#
images#
thresholds = None#
medians#
results#
median_flatten(image: numpy.ndarray, mask: numpy.ndarray = None, row_alignment_quantile: float = 0.5) numpy.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.

Parameters:
  • image (np.ndarray) – 2-D image of the data to align the rows of.

  • mask (np.ndarray) – Boolean array of points to mask out (ignore).

  • row_alignment_quantile (float) – Quantile (0.0 to 1.0) used for defining the average background.

Returns:

Returns a copy of the input image with rows aligned

Return type:

np.ndarray

remove_tilt(image: numpy.ndarray, mask: numpy.ndarray = None)#

Remove planar tilt from an image (linear in 2D space).

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.

Parameters:
  • image (np.ndarray) – 2-D image of the data to remove the planar tilt from.

  • mask (np.ndarray) – Boolean array of points to mask out (ignore).

  • img_name (str) – Name of the image (to be able to print information in the console).

Returns:

Returns a copy of the input image with the planar tilt removed

Return type:

np.ndarray

remove_nonlinear_polynomial(image: numpy.ndarray, mask: numpy.ndarray | None = None) numpy.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.

Parameters:
  • image (np.ndarray) – 2D numpy heightmap array of floats with a polynomial trend to remove.

  • mask (np.ndarray) – 2D numpy boolean array used to mask out any points in the image that are deemed not to be part of the heightmap’s background data. This argument is optional.

Returns:

Copy of the supplied image with the polynomial trend subtracted.

Return type:

np.ndarray

remove_quadratic(image: numpy.ndarray, mask: numpy.ndarray = None) numpy.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.

Parameters:
  • image (np.ndarray) – 2-D image of the data to remove the quadratic from.

  • mask (np.ndarray) – Boolean array of points to mask out (ignore).

Returns:

Returns a copy of the input image with the quadratic bowing removed

Return type:

np.ndarray

static calc_diff(array: numpy.ndarray) numpy.ndarray#

Calculate the difference of an array.

calc_gradient(array: numpy.ndarray, shape: int) numpy.ndarray#

Calculate the gradient of an array.

average_background(image: numpy.ndarray, mask: numpy.ndarray = None) numpy.ndarray#

Zero the background by subtracting the non-masked mean from all pixels.

Parameters:
  • image (np.array) – Numpy array representing image.

  • mask (np.array) – Mask of the array, should have the same dimensions as image.

Returns:

Numpy array of image zero averaged.

Return type:

np.ndarray

gaussian_filter(image: numpy.ndarray, **kwargs) numpy.array#

Apply Gaussian filter to an image.

Parameters:

image (np.array) – Numpy array representing image.

Returns:

Numpy array of gaussian blurred image.

Return type:

np.array

filter_image() None#

Process a single image, filtering, finding grains and calculating their statistics.

Example

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()