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

split_skeleton_lines(SkeletonRegion : : MaxDistance : BeginRow, BeginCol, EndRow, EndCol)

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

void SplitSkeletonLines(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

static void HOperatorSet.SplitSkeletonLines(HObject skeletonRegion, HTuple maxDistance, out HTuple beginRow, out HTuple beginCol, out HTuple endRow, out HTuple endCol)

void HRegion.SplitSkeletonLines(int 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]]

Description

split_skeleton_linessplit_skeleton_linesSplitSkeletonLinesSplitSkeletonLinessplit_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 MaxDistanceMaxDistanceMaxDistancemaxDistancemax_distance (split & merge algorithm). The start and end points of the approximating line segments are returned in BeginRowBeginRowBeginRowbeginRowbegin_row, BeginColBeginColBeginColbeginColbegin_col, EndRowEndRowEndRowendRowend_row, and EndColEndColEndColendColend_col.

Attention

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

Execution Information

Parameters

SkeletonRegionSkeletonRegionSkeletonRegionskeletonRegionskeleton_region (input_object)  region-array objectHRegionHObjectHObjectHobject

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

MaxDistanceMaxDistanceMaxDistancemaxDistancemax_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: 3

Suggested values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Value range: 1 ≤ MaxDistance MaxDistance MaxDistance maxDistance max_distance ≤ 500 (lin)

Minimum increment: 1

Recommended increment: 1

BeginRowBeginRowBeginRowbeginRowbegin_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.

BeginColBeginColBeginColbeginColbegin_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.

EndRowEndRowEndRowendRowend_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.

EndColEndColEndColendColend_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)

Result

split_skeleton_linessplit_skeleton_linesSplitSkeletonLinesSplitSkeletonLinessplit_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>)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>)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">)set_system("store_empty_region",<"true"/"false">). If necessary, an exception is raised.

Possible Predecessors

connectionconnectionConnectionConnectionconnection, select_shapeselect_shapeSelectShapeSelectShapeselect_shape, skeletonskeletonSkeletonSkeletonskeleton, junctions_skeletonjunctions_skeletonJunctionsSkeletonJunctionsSkeletonjunctions_skeleton, differencedifferenceDifferenceDifferencedifference

Possible Successors

select_linesselect_linesSelectLinesSelectLinesselect_lines, partition_linespartition_linesPartitionLinesPartitionLinespartition_lines, disp_linedisp_lineDispLineDispLinedisp_line

See also

split_skeleton_regionsplit_skeleton_regionSplitSkeletonRegionSplitSkeletonRegionsplit_skeleton_region, detect_edge_segmentsdetect_edge_segmentsDetectEdgeSegmentsDetectEdgeSegmentsdetect_edge_segments

Module

Foundation