lines_facet — Detection of lines using the facet model.
The operator 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
These attributes can be queried via the operator get_contour_attrib_xld.
The smaller the filter size MaskSize is chosen, the more short, fragmented lines will be extracted. This can lead to considerably longer execution times.
Size of the facet model mask.
Default value: 5
List of values: 3, 5, 7, 9, 11
Lower threshold for the hysteresis threshold operation.
Default value: 3
Suggested values: 0, 0.5, 1, 2, 3, 4, 5, 8, 10
Typical range of values: 0 ≤ Low ≤ 20
Recommended increment: 0.5
Restriction: Low >= 0
Upper threshold for the hysteresis threshold operation.
Default value: 8
Suggested values: 0, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 18, 20, 25
Typical range of values: 0 ≤ High ≤ 35
Recommended increment: 0.5
Restriction: High >= 0 && High >= Low
Extract bright or dark lines.
Default value: 'light'
List of values: '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 returns 2 (H_MSG_TRUE) if all parameters are correct and no error occurs during execution. If the input is empty the behaviour can be set via set_system(::'no_object_result',<Result>:). If necessary, an exception is raised.
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.