Operator Reference
var_threshold (Operator)
var_threshold
— Threshold an image by local mean and standard deviation analysis.
Signature
var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
Description
With var_threshold
, it's possible to select the pixels of the input
Image
which
-
have a high local standard deviation (for a positive
StdDevScale
), or a low local standard deviation (for a negativeStdDevScale
)
and
-
are locally bright or dark, according to
LightDark
.
Thus, it is possible to segment regions on inhomogeneous, noisy, or unevenly illuminated backgrounds.
Hints for the input parameters
MaskWidth
,MaskHeight
-
The size of the filter mask defined by
MaskWidth
andMaskHeight
determines the maximum size of the objects to be segmented. However, if the mask is chosen too large, objects that are very close might be merged.( 1) ( 2) ( 3) ( 4) If
MaskWidth
orMaskHeight
is even, the next larger odd value is used. Altogether, a value of 3 can be considered the minimum sensible value. StdDevScale
-
The local standard deviation is used as a measure of noise in the image. It can be scaled by
StdDevScale
to reflect the desired sensitivity. A higher value means that only pixels that are very different from their surrounding are selected.For the parameter
StdDevScale
values between -1.0 and 1.0 are sensible choices, with 0.2 as a suggested value. If the parameter is too high or too low, an empty or full region may be returned.( 1) ( 2) AbsThreshold
-
In homogeneous areas of an image, the standard deviation is low; thus, the influence of single gray values is high. To reduce the sensitivity of the operator in homogeneous areas, it's possible to adjust
AbsThreshold
. Thus, small gray value changes in homogeneous surroundings can be ignored. Note that for negative values ofStdDevScale
,AbsThreshold
should also be chosen negative. LightDark
-
'light' or 'dark' returns all pixels that are lighter or darker than their surrounding, respectively. 'equal' returns all pixels that are not selected by either option, i.e. the pixels that are relatively equal to their surrounding. 'not_equal' returns the combined results of 'light' and 'dark' , i.e., all pixels that differ from their surrounding.
The calculation
( 1) | ( 2) |
var_threshold
selects from the input image
Image
those regions Region
in which the pixels
fulfill a threshold condition. The threshold is calculated from the
mean gray value and the standard deviation in a local mask of size
MaskWidth
x MaskHeight
around each pixel
(x,y).
Let
-
g(x,y) be the gray value at position (x,y) in the input
Image
, -
m(x,y) the corresponding mean gray value, and
-
d(x,y) the corresponding standard deviation in the mask around that pixel.
Then, the variable threshold v(x,y) is defined as
or
Interpretation: For a positive StdDevScale
, each pixel is analyzed.
It is determined whether the user-defined AbsThreshold
or the
scaled standard deviation is greater. The bigger value is chosen as variable
threshold v(x,y). For a negative StdDevScale
, the corresponding
smaller value is chosen.
Which pixels are chosen based on the variable threshold is defined by
the parameter LightDark
:
-
'light' :
Interpretation: If the pixel is brighter by v(x,y) than its surrounding, it is selected.
-
'dark' :
Interpretation: If the pixel is darker by v(x,y) than its surrounding, it is selected.
LightDark
= 'equal' :Interpretation: Select exactly those pixels that are not selected by 'light' and 'dark' , i.e., the pixels that are relatively equal to their surrounding.
-
'not_equal' :
Interpretation: Select all pixels of 'light' and 'dark' , i.e., all pixels that differ by v(x,y) from their surrounding.
Attention
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.
Execution Information
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Automatically parallelized on tuple level.
- Automatically parallelized on domain level.
Parameters
Image
(input_object) singlechannelimage(-array) →
object (byte / int2 / int4 / uint2 / real)
Input image.
Region
(output_object) region(-array) →
object
Segmented regions.
MaskWidth
(input_control) extent.x →
(integer)
Mask width for mean and deviation calculation.
Default: 15
Suggested values: 9, 11, 13, 15
Restriction:
MaskWidth >= 1
MaskHeight
(input_control) extent.y →
(integer)
Mask height for mean and deviation calculation.
Default: 15
Suggested values: 9, 11, 13, 15
Restriction:
MaskHeight >= 1
StdDevScale
(input_control) number →
(real / integer)
Factor for the standard deviation of the gray values.
Default: 0.2
Suggested values: -0.2, -0.1, 0.1, 0.2
AbsThreshold
(input_control) number →
(real / integer)
Minimum gray value difference from the mean.
Default: 2
Suggested values: -2, -1, 0, 1, 2
LightDark
(input_control) string →
(string)
Threshold type.
Default: 'dark'
List of values: 'dark' , 'equal' , 'light' , 'not_equal'
Complexity
Let A be the area of the input region, then the runtime is O(A).
Result
var_threshold
returns 2 (
H_MSG_TRUE)
if all parameters are correct.
The behavior with respect to the input images and output regions can
be determined by setting the values of the flags 'no_object_result' ,
'empty_region_result' , and 'store_empty_region' with
set_system
. If necessary, an exception is raised.
Alternatives
References
W.Niblack, ”An Introduction to Digital Image Processing”, Page 115-116, Englewood Cliffs, N.J., Prentice Hall, 1986
Module
Foundation