What Enhancement Actually Does#
Enhancers modify the detect_mat accessor — the grayscale representation
that detectors consume. They never touch rgb or gray, preserving the
original image data for visualization and color measurements.
Why Enhance?#
Raw plate images often have properties that confuse detectors:
Noise — random pixel variation that creates false positives
Low contrast — faint colonies barely distinguishable from agar
Uneven illumination — brightness gradients across the plate
Texture — agar surface patterns that mimic colony edges
Enhancement addresses these problems by transforming detect_mat into
a version where colonies stand out more clearly.
Categories of Enhancement#
Smoothing (Noise Reduction)#
Reduce random variation while preserving colony boundaries.
GaussianBlur — isotropic smoothing; fast but blurs edges
MedianFilter — removes salt-and-pepper noise; preserves edges better
BilateralDenoise — smooths within regions; preserves edges explicitly
StableDenoise (BM3D) — state-of-the-art block-matching denoising
Contrast Enhancement#
Increase the separation between colony and background intensities.
CLAHE — local adaptive histogram equalization; handles spatially varying contrast
ContrastStretching — linear remapping to fill the dynamic range
UnsharpMask — sharpens edges by subtracting a blurred version
Illumination Correction#
Remove large-scale brightness gradients.
HomomorphicFilter — frequency-domain separation of illumination and reflectance
SubtractGaussian — subtracts a heavily blurred background estimate
SubtractRollingBall — morphological background estimation
Structural Enhancement#
Enhance specific morphological features.
FrangiVesselness — enhances tubular structures (hyphae, branches)
SobelFilter — highlights edges
PhaseCongruencyEnhancer — illumination-invariant edge detection
Stacking Enhancers#
Enhancers compose linearly — each reads detect_mat, modifies it, and
writes it back. Order matters:
Denoise first — reduce noise before amplifying contrast
Correct illumination — normalize brightness before thresholding
Enhance contrast — maximize colony/background separation last
A typical preprocessing chain: GaussianBlur → HomomorphicFilter → CLAHE.
The Enhancement ↔ Detection Interface#
detect_mat ──[Enhancer 1]──→ detect_mat ──[Enhancer 2]──→ detect_mat
│
[Detector]
│
objmask, objmap
This clean interface means you can swap any enhancer without affecting the detector, and vice versa. The pipeline model makes this experimentation easy.