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 -> Hobject: HRegionArray |
| Input lines (represented by 1 pixel wide, non-branching regions). | |
|
MaxDistance (input_control) |
integer -> HTuple.long |
| 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 -> HTuple.long * |
| Row coordinates of the start points of the output lines. | |
|
BeginCol (output_control) |
line.begin.x-array -> HTuple.long * |
| Column coordinates of the start points of the output lines. | |
|
EndRow (output_control) |
line.end.y-array -> HTuple.long * |
| Row coordinates of the end points of the output lines. | |
|
EndCol (output_control) |
line.end.x-array -> HTuple.long * |
| 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 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.
::connection, ::select_shape, ::skeleton, ::junctions_skeleton, ::difference
::select_lines, ::partition_lines, ::disp_line
::split_skeleton_region, ::detect_edge_segments
Region processing