Split lines represented by one pixel wide, non-branching lines.
split_skeleton_lines splits lines represented by one pixel wide, non-branching regions into shorter lines based on their curvature. A line is split if the maximum distance of a point on the line to the line segment connecting its end points is larger than MaxDistance (split & merge algorithm). The start and end points of the approximating line segments are returned in BeginRow, BeginCol, EndRow, and EndCol.
The input regions must represent non-branching lines, that is single branches of the skeleton.
|
SkeletonRegion (input_object) |
region-array -> object |
| Input lines (represented by 1 pixel wide, non-branching regions). | |
|
MaxDistance (input_control) |
integer -> integer |
| Maximum distance of the line points to the line segment connecting both end points. | |
| Default value: 3 | |
| Suggested values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 | |
| Typical range of values: 1 <= MaxDistance <= 500 (lin) | |
| Minimum increment: 1 | |
|
Recommended increment: 1 | |
|
BeginRow (output_control) |
line.begin.y-array -> integer |
| Row coordinates of the start points of the output lines. | |
|
BeginCol (output_control) |
line.begin.x-array -> integer |
| Column coordinates of the start points of the output lines. | |
|
EndRow (output_control) |
line.end.y-array -> integer |
| Row coordinates of the end points of the output lines. | |
|
EndCol (output_control) |
line.end.x-array -> integer |
| Column coordinates of the end points of the output lines. | |
read_image(Image,'fabrik')
edges_image (Image, ImaAmp, ImaDir, 'lanser2', 0.5, 'nms', 8, 16)
threshold (ImaAmp, RawEdges, 8, 255)
skeleton (RawEdges, Skeleton)
junctions_skeleton (Skeleton, EndPoints, JuncPoints)
difference (Skeleton, JuncPoints, SkelWithoutJunc)
connection (SkelWithoutJunc, SingleBranches)
select_shape (SingleBranches, SelectedBranches, 'area', 'and', 16, 99999)
split_skeleton_lines (SelectedBranches, 3, BeginRow, BeginCol, EndRow,
EndCol).
split_skeleton_lines always returns the value 2 (H_MSG_TRUE). The behavior in case of empty input (no regions given) can be set via set_system('no_object_result',<Result>), the behavior in case of an empty input region via set_system('empty_region_result',<Result>), and the behavior in case of an empty result region via set_system('store_empty_region',<true/false>). If necessary, an exception handling is raised.
split_skeleton_lines is reentrant and automatically parallelized (on tuple level).
connection, select_shape, skeleton, junctions_skeleton, difference
select_lines, partition_lines, disp_line
split_skeleton_region, detect_edge_segments
Foundation