lines_facet — 使用小面模型检测线。
算子 lines_facet can be used to extract lines
(curvilinear structures) from the image Image. The
extracted lines are returned in Lines as subpixel
precise XLD-contours. The parameter LightDark
determines, whether bright or dark lines are extracted.
The extraction is done by using the facet model, i.e., a least
squares fit, to determine the parameters of a quadratic polynomial
in x and y for each point of the image. The parameter
MaskSize determines the size of the window used for the
least squares fit. Larger values of MaskSize lead to a
larger smoothing of the image, but can lead to worse localization of
the line. The parameters of the polynomial are used to calculate
the line direction for each pixel. Pixels which exhibit a local
maximum in the second directional derivative perpendicular to the
line direction are marked as line points. The line points found in
this manner are then linked to contours. This is done by
immediately accepting line points that have a second derivative
larger than High. Points that have a second derivative
smaller than Low are rejected. All other line points are
accepted if they are connected to accepted points by a connected
path. This is similar to a hysteresis threshold operation with
infinite path length (see hysteresis_threshold).
However, this function is not used internally since it does not
allow the extraction of subpixel precise contours.
The gist of how to select the thresholds in the description of
lines_gauss also holds for this operator. A value of
Sigma = 1.5 there roughly corresponds to a MaskSize of 5
here.
The extracted lines are returned in a topologically sound data
structure in Lines. This means that lines are correctly
split at junction points.
lines_facet defines the following attributes for each
line point:
The angle of the direction perpendicular to the line
The magnitude of the second derivative
Use get_contour_attrib_xld to obtain attribute values.
See the operator reference of get_contour_attrib_xld for further
information about contour attributes.
The smaller the filter size MaskSize is chosen, the more
short, fragmented lines will be extracted. This can lead to
considerably longer execution times.
请注意,若使用域缩减后的图像作为输入,滤波器算子可能会返回意外结果。请参阅 滤波器 一章
Image (输入对象) singlechannelimage → object (byte / int1 / int2 / uint2 / int4 / real)
输入图像。
Lines (输出对象) xld_cont-array → object
Extracted lines.
MaskSize (输入控制) integer → (integer)
Size of the facet model mask.
默认值: 5
值列表: 3, 5, 7, 9, 11
Low (输入控制) number → (real / integer)
Lower threshold for the hysteresis threshold operation.
默认值: 3
建议值: 0, 0.5, 1, 2, 3, 4, 5, 8, 10
值范围:
0
≤
Low
建议增量: 0.5
High (输入控制) number → (real / integer)
Upper threshold for the hysteresis threshold operation.
默认值: 8
建议值: 0, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 18, 20, 25
值范围:
0
≤
High
建议增量: 0.5
限制:
High >= Low
LightDark (输入控制) string → (string)
Extract bright or dark lines.
默认值: 'light'
值列表: 'dark', 'light'
* Detection of lines in an aerial image read_image(Image,'mreut4_3') lines_facet(Image,Lines,5,3,8,'light') dev_display(Lines)
Let A be the number of pixels in the domain of Image.
Then the runtime complexity is O(A*MaskSize).
The amount of temporary memory required is dependent on the height H
of the domain of Image and the width W of Image.
Let S = W*H, then lines_facet requires at least 55*S
bytes of temporary memory during execution.
lines_facet 在所有参数正确且执行过程中未发生错误时返回 2 ( H_MSG_TRUE )。如果输入为空则可设置行为通过 set_system(::'no_object_result',<Result>:)。如有必要,则抛出异常。
bandpass_image,
dyn_threshold,
topographic_sketch
A. Busch: “Fast Recognition of Lines in Digital Images Without User-Supplied Parameters”. In H. Ebner, C. Heipke, K.Eder, eds., “Spatial Information from Digital Photogrammetry and Computer Vision”, International Archives of Photogrammetry and Remote Sensing, Vol. 30, Part 3/1, pp. 91-97, 1994.
二维计量