var_threshold — 通过局部均值和标准差分析对图像进行阈值处理。
var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
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 negative
StdDevScale)
and
are locally bright or dark, according to LightDark。
Thus, it is possible to segment regions on inhomogeneous, noisy, or unevenly illuminated backgrounds.
MaskWidth, MaskHeight
The size of the filter mask defined by MaskWidth and
MaskHeight 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) |
MaskWidth := 12, MaskHeight := 12,
StdDevScale := 0.1, all vertical lines are segmented
correctly. (3) If the mask size is chosen too low (3), the desired
regions are not selected properly. (4) If the mask size is too high
(40), objects that are very close might be merged.
If MaskWidth or MaskHeight is even, the next larger odd
value is used. Altogether, a value of 3 can be considered the
minimum sensible value.
StdDevScaleThe 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) |
StdDevScale is too high (1.3), the operator is
'picky'; only pixels that are very similar to their surrounding are
selected. (2) If StdDevScale is too low (-0.3), too many
pixels that are somewhat similar to their surrounding are incorrectly
selected.
AbsThresholdIn 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 of
StdDevScale, 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.
| ( 1) | ( 2) |
StdDevScale :=
0.6, MaskWidth := 15, MaskHeight :=
15, AbsThreshold := 10). The following
images visualize exemplary how the result along the blue arrow came to be.
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.
StdDevScale.
AbsThreshold.
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.
请注意,若使用域缩减后的图像作为输入,滤波器算子可能会返回意外结果。请参阅 滤波器 一章
Image (输入对象) singlechannelimage(-array) → object (byte / int2 / int4 / uint2 / real)
输入图像。
Region (输出对象) region(-array) → object
Segmented regions.
MaskWidth (输入控制) extent.x → (integer)
Mask width for mean and deviation calculation.
默认值: 15
建议值: 9, 11, 13, 15
限制:
MaskWidth >= 1
MaskHeight (输入控制) extent.y → (integer)
Mask height for mean and deviation calculation.
默认值: 15
建议值: 9, 11, 13, 15
限制:
MaskHeight >= 1
StdDevScale (输入控制) number → (real / integer)
Factor for the standard deviation of the gray values.
默认值: 0.2
建议值: -0.2, -0.1, 0.1, 0.2
AbsThreshold (输入控制) number → (real / integer)
Minimum gray value difference from the mean.
默认值: 2
建议值: -2, -1, 0, 1, 2
LightDark (输入控制) string → (string)
Threshold type.
默认值: 'dark'
值列表: 'dark', 'equal', 'light', 'not_equal'
Let A be the area of the input region, then the runtime is O(A).
var_threshold 在所有参数正确时返回 2 ( H_MSG_TRUE )。
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。如有必要,则抛出异常。
W.Niblack, ”An Introduction to Digital Image Processing”, Page 115-116, Englewood Cliffs, N.J., Prentice Hall, 1986
基础