split_skeleton_linesT_split_skeleton_linesSplitSkeletonLinesSplitSkeletonLinessplit_skeleton_lines (Operator)
Name
split_skeleton_linesT_split_skeleton_linesSplitSkeletonLinesSplitSkeletonLinessplit_skeleton_lines
— Split lines represented by one pixel wide, non-branching lines.
Signature
def split_skeleton_lines(skeleton_region: HObject, max_distance: int) -> Tuple[Sequence[int], Sequence[int], Sequence[int], Sequence[int]]
Description
split_skeleton_linessplit_skeleton_linesSplitSkeletonLinesSplitSkeletonLinesSplitSkeletonLinessplit_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 MaxDistanceMaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance
(split & merge algorithm). The start
and end points of the approximating line segments are returned in
BeginRowBeginRowBeginRowBeginRowbeginRowbegin_row
, BeginColBeginColBeginColBeginColbeginColbegin_col
, EndRowEndRowEndRowEndRowendRowend_row
, and
EndColEndColEndColEndColendColend_col
.
Attention
The input regions must represent non-branching lines, that is single
branches of the skeleton.
Execution Information
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Automatically parallelized on tuple level.
Parameters
SkeletonRegionSkeletonRegionSkeletonRegionSkeletonRegionskeletonRegionskeleton_region
(input_object) region-array →
objectHRegionHObjectHRegionHobject
Input lines (represented by 1 pixel wide, non-branching
regions).
MaxDistanceMaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance
(input_control) integer →
HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
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
MaxDistance
MaxDistance
MaxDistance
maxDistance
max_distance
≤
500
(lin)
Minimum increment: 1
Recommended increment: 1
BeginRowBeginRowBeginRowBeginRowbeginRowbegin_row
(output_control) line.begin.y-array →
HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Row coordinates of the start points of the
output lines.
BeginColBeginColBeginColBeginColbeginColbegin_col
(output_control) line.begin.x-array →
HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Column coordinates of the start points of the
output lines.
EndRowEndRowEndRowEndRowendRowend_row
(output_control) line.end.y-array →
HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Row coordinates of the end points of the
output lines.
EndColEndColEndColEndColendColend_col
(output_control) line.end.x-array →
HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Column coordinates of the end points of the
output lines.
Example (HDevelop)
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)
Example (C)
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);
Example (HDevelop)
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)
Example (HDevelop)
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)
Example (HDevelop)
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)
Result
split_skeleton_linessplit_skeleton_linesSplitSkeletonLinesSplitSkeletonLinesSplitSkeletonLinessplit_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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)
,
the behavior in case of an empty input region via
set_system('empty_region_result',<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>)
,
and the behavior in case of an empty result region via
set_system('store_empty_region',<'true'/'false'>)set_system("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)set_system("store_empty_region",<"true"/"false">)
.
If necessary, an exception is raised.
Possible Predecessors
connectionconnectionConnectionConnectionConnectionconnection
,
select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape
,
skeletonskeletonSkeletonSkeletonSkeletonskeleton
,
junctions_skeletonjunctions_skeletonJunctionsSkeletonJunctionsSkeletonJunctionsSkeletonjunctions_skeleton
,
differencedifferenceDifferenceDifferenceDifferencedifference
Possible Successors
select_linesselect_linesSelectLinesSelectLinesSelectLinesselect_lines
,
partition_linespartition_linesPartitionLinesPartitionLinesPartitionLinespartition_lines
,
disp_linedisp_lineDispLineDispLineDispLinedisp_line
See also
split_skeleton_regionsplit_skeleton_regionSplitSkeletonRegionSplitSkeletonRegionSplitSkeletonRegionsplit_skeleton_region
,
detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments
Module
Foundation