local_threshold — Segment an image using local thresholding.
local_threshold segments a single-channel image
using the thresholding method given in
Method and returns the
segmented region in
Region. Currently the operator offers only the
Method 'adapted_std_deviation'. This algorithm is a text
binarization technique and provides good results for document images.
Method = 'adapted_std_deviation', a
locally adaptive thresholding based on local mean and standard
deviation according to Sauvola (see the paper in References) is
invoked. The algorithm is able to segment document images even if
they are degraded, e.g., due to inhomogeneous illumination or noise.
It enables text binarization on an inhomogeneous background by taking
into account the local contrast.
For a segmentation of the dark foreground (see parameter
LightDark), for a pixel at position
(r,c), a local threshold
T(r,c) is calculated within a window of size
'mask_size' x 'mask_size' (see the generic
parameter 'mask_size') as follows:
where is the local mean value
within the window and denotes
the corresponding standard deviation. The parameter
R (see 'range') is the assumed maximum
value of the standard deviation (
R = 128 for
byte images) and
k (see 'scale') a
parameter that controls how much the threshold value
T(r,c) differs from the mean value
. If there is high contrast in the
neighborhood of a point
(r,c) the standard
deviation has a value close to
R which yields a threshold value
T(r,c) close to the local mean
. If the contrast is low, the local
threshold is below the local mean value. For dark text on light
background containing also darker regions, this lower threshold
enables the segmentation of the text even in darker areas.
LightDark controls, whether light or dark
structures are segmented.
LightDark = 'dark',
dark structures on a light background are segmented. Every
p(r,c) whose gray value is smaller
than the calculated local threshold
T(r,c) is selected.
GenParamName to one of the following values, additional
parameters specific for the 'adapted_std_deviation' method can be set
specifies the mask size, i.e., the size of the neighborhood in which the local threshold is calculated. The smaller the window size the thinner the segmented strokes. 'mask_size' must be set to a value that is larger than the stroke width of the characters or structures to be segmented. If 'mask_size' is even, the next larger odd value is used.
Suggested values: 15, 21, 31.
sets the parameter
k (), that controls how much the threshold
value differs from the local mean value. Use smaller values for
'scale' to also segment structures with a lower
contrast to their background. Use larger values to suppress
Suggested values: 0.2, 0.3, 0.5.
sets the maximum assumed value of standard deviation
R . This parameter should be adapted based
on the expected gray value range. As a rule of thumb, the
value for 'range' can be set to , where MinGray and MaxGray are
the minimum and maximum gray values in the image, which can be
Suggested values: 128, 32767.5.
Default: 128 (for
Note that filter operators may return unexpected results if an image with a reduced domain is used as input. Please refer to the chapter Filters.
→object (byte / uint2)
Segmented output region.
Default value: 'adapted_std_deviation'
List of values: 'adapted_std_deviation'
Extract foreground or background?
Default value: 'dark'
List of values: 'dark', 'light'
List of generic parameter names.
Default value: 
List of values: 'mask_size', 'range', 'scale'
→(integer / real)
List of generic parameter values.
Default value: 
Suggested values: 0.2, 15, 30, 128.0
J. Sauvola, M. Pietikäinen, “Adaptive document image binarization", Pattern Recognition, 33, 225-236 (2000)