Skip to content

split_skeleton_linesSplitSkeletonLinesSplitSkeletonLinessplit_skeleton_linesT_split_skeleton_lines🔗

Short description🔗

split_skeleton_linesSplitSkeletonLinesSplitSkeletonLinessplit_skeleton_linesT_split_skeleton_lines — Split lines represented by one pixel wide, non-branching lines.

Signature🔗

split_skeleton_lines( region SkeletonRegion, integer MaxDistance, out line.begin.y BeginRow, out line.begin.x BeginCol, out line.end.y EndRow, out line.end.x EndCol )void SplitSkeletonLines( const HObject& SkeletonRegion, const HTuple& MaxDistance, HTuple* BeginRow, HTuple* BeginCol, HTuple* EndRow, HTuple* EndCol )static void HOperatorSet.SplitSkeletonLines( HObject skeletonRegion, HTuple maxDistance, out HTuple beginRow, out HTuple beginCol, out HTuple endRow, out HTuple endCol )def split_skeleton_lines( skeleton_region: HObject, max_distance: int ) -> Tuple[Sequence[int], Sequence[int], Sequence[int], Sequence[int]]

Herror T_split_skeleton_lines( const Hobject SkeletonRegion, const Htuple MaxDistance, Htuple* BeginRow, Htuple* BeginCol, Htuple* EndRow, Htuple* EndCol )

void HRegion::SplitSkeletonLines( Hlong MaxDistance, HTuple* BeginRow, HTuple* BeginCol, HTuple* EndRow, HTuple* EndCol ) const

void HRegion.SplitSkeletonLines( int maxDistance, out HTuple beginRow, out HTuple beginCol, out HTuple endRow, out HTuple endCol )

Description🔗

split_skeleton_linesSplitSkeletonLines 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 MaxDistancemaxDistancemax_distance (split & merge algorithm). The start and end points of the approximating line segments are returned in BeginRowbeginRowbegin_row, BeginColbeginColbegin_col, EndRowendRowend_row, and EndColendColend_col.

Attention🔗

The input regions must represent non-branching lines, that is single branches of the skeleton.

Execution information🔗

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🔗

SkeletonRegionskeletonRegionskeleton_region (input_object) region-array → objectHObjectHRegionHObjectHobject

Input lines (represented by 1 pixel wide, non-branching regions).

MaxDistancemaxDistancemax_distance (input_control) integer → (integer)HTuple (Hlong)HTuple (int / long)intHtuple (Hlong)

Maximum distance of the line points to the line segment connecting both end points.

Default: 33
Suggested values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 101, 2, 3, 4, 5, 6, 7, 8, 9, 10
Value range: 1 ≤ MaxDistance ≤ 500 (lin)
Minimum increment: 1
Recommended increment: 1

BeginRowbeginRowbegin_row (output_control) line.begin.y-array → (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (Hlong)

Row coordinates of the start points of the output lines.

BeginColbeginColbegin_col (output_control) line.begin.x-array → (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (Hlong)

Column coordinates of the start points of the output lines.

EndRowendRowend_row (output_control) line.end.y-array → (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (Hlong)

Row coordinates of the end points of the output lines.

EndColendColend_col (output_control) line.end.x-array → (integer)HTuple (Hlong)HTuple (int / long)Sequence[int]Htuple (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)
(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)\;

Result🔗

split_skeleton_linesSplitSkeletonLines 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 is raised.

Combinations with other operators🔗

Combinations

Possible predecessors

connectionConnection, select_shapeSelectShape, skeletonSkeleton, junctions_skeletonJunctionsSkeleton, differenceDifference

Possible successors

select_linesSelectLines, partition_linesPartitionLines, disp_lineDispLine

See also

split_skeleton_regionSplitSkeletonRegion, detect_edge_segmentsDetectEdgeSegments

Module🔗

Foundation