Focus Analyzer

This module contains the FocusAnalyzer class for analyzing focus quality in microscopy images.

FocusAnalyzer

class ezstitcher.core.focus_analyzer.FocusAnalyzer

Provides focus metrics and best focus selection.

This class implements various focus measure algorithms and methods to find the best focused image in a Z-stack. All methods are static and do not require an instance.

DEFAULT_WEIGHTS: dict = {'nvar': 0.3, 'lap': 0.3, 'ten': 0.2, 'fft': 0.2}

Default weights for combined focus measure.

static normalized_variance(img)

Normalized variance focus measure. Robust to illumination changes.

Parameters:

img (numpy.ndarray) – Input grayscale image

Returns:

Focus quality score

Return type:

float

static laplacian_energy(img, ksize=3)

Laplacian energy focus measure. Sensitive to edges and high-frequency content.

Parameters:
  • img (numpy.ndarray) – Input grayscale image

  • ksize (int) – Kernel size for Laplacian

Returns:

Focus quality score

Return type:

float

static tenengrad_variance(img, ksize=3, threshold=0)

Tenengrad variance focus measure. Based on gradient magnitude.

Parameters:
  • img (numpy.ndarray) – Input grayscale image

  • ksize (int) – Kernel size for Sobel operator

  • threshold (float) – Threshold for gradient magnitude

Returns:

Focus quality score

Return type:

float

static adaptive_fft_focus(img)

Adaptive FFT focus measure optimized for low-contrast microscopy images. Uses image statistics to set threshold adaptively.

Parameters:

img (numpy.ndarray) – Input grayscale image

Returns:

Focus quality score

Return type:

float

static combined_focus_measure(img, weights=None)

Combined focus measure using multiple metrics. Optimized for microscopy images, especially low-contrast specimens.

Parameters:
  • img (numpy.ndarray) – Input grayscale image

  • weights (dict, optional) – Weights for each metric. If None, uses DEFAULT_WEIGHTS.

Returns:

Combined focus quality score

Return type:

float

static find_best_focus(image_stack, metric='combined')

Find the best focused image in a stack using specified method.

Parameters:
  • image_stack (list) – List of images

  • metric (str or dict) – Focus detection method or weights dictionary. Options: “combined”, “normalized_variance”, “laplacian”, “tenengrad”, “fft” or a dictionary of weights.

Returns:

Tuple of (best_focus_index, focus_scores)

Return type:

tuple

static select_best_focus(image_stack, metric='combined')

Select the best focus plane from a stack of images.

Parameters:
  • image_stack (list) – List of images

  • metric (str or dict) – Focus detection method or weights dictionary. Options: “combined”, “normalized_variance”, “laplacian”, “tenengrad”, “fft” or a dictionary of weights.

Returns:

Tuple of (best_focus_image, best_focus_index, focus_scores)

Return type:

tuple

static compute_focus_metrics(image_stack, metric='combined')

Compute focus metrics for a stack of images.

Parameters:
  • image_stack (list) – List of images

  • metric (str or dict) – Focus detection method or weights dictionary. Options: “combined”, “normalized_variance”, “laplacian”, “tenengrad”, “fft” or a dictionary of weights.

Returns:

List of focus scores for each image

Return type:

list

static _get_focus_function(metric)

Get the appropriate focus measure function based on metric.

Parameters:

metric (str or dict) – Focus detection method or weights dictionary. Options: “combined”, “normalized_variance”, “laplacian”, “tenengrad”, “fft” or a dictionary of weights.

Returns:

The focus measure function

Return type:

callable

Raises:

ValueError: If the method is unknown