Name
approx_chainT_approx_chainApproxChainapprox_chainApproxChainApproxChain — Approximate a contour by arcs and lines.
Warning
approx_chainapprox_chainApproxChainapprox_chainApproxChainApproxChain is obsolete and is only provided for
reasons of backward compatibility.
approx_chain( : : Row, Column, MinWidthCoord, MaxWidthCoord, ThreshStart, ThreshEnd, ThreshStep, MinWidthSmooth, MaxWidthSmooth, MinWidthCurve, MaxWidthCurve, Weight1, Weight2, Weight3 : ArcCenterRow, ArcCenterCol, ArcAngle, ArcBeginRow, ArcBeginCol, LineBeginRow, LineBeginCol, LineEndRow, LineEndCol, Order)
Herror T_approx_chain(const Htuple Row, const Htuple Column, const Htuple MinWidthCoord, const Htuple MaxWidthCoord, const Htuple ThreshStart, const Htuple ThreshEnd, const Htuple ThreshStep, const Htuple MinWidthSmooth, const Htuple MaxWidthSmooth, const Htuple MinWidthCurve, const Htuple MaxWidthCurve, const Htuple Weight1, const Htuple Weight2, const Htuple Weight3, Htuple* ArcCenterRow, Htuple* ArcCenterCol, Htuple* ArcAngle, Htuple* ArcBeginRow, Htuple* ArcBeginCol, Htuple* LineBeginRow, Htuple* LineBeginCol, Htuple* LineEndRow, Htuple* LineEndCol, Htuple* Order)
Herror approx_chain(const HTuple& Row, const HTuple& Column, const HTuple& MinWidthCoord, const HTuple& MaxWidthCoord, const HTuple& ThreshStart, const HTuple& ThreshEnd, const HTuple& ThreshStep, const HTuple& MinWidthSmooth, const HTuple& MaxWidthSmooth, const HTuple& MinWidthCurve, const HTuple& MaxWidthCurve, const HTuple& Weight1, const HTuple& Weight2, const HTuple& Weight3, HTuple* ArcCenterRow, HTuple* ArcCenterCol, HTuple* ArcAngle, HTuple* ArcBeginRow, HTuple* ArcBeginCol, HTuple* LineBeginRow, HTuple* LineBeginCol, HTuple* LineEndRow, HTuple* LineEndCol, HTuple* Order)
void ApproxChain(const HTuple& Row, const HTuple& Column, const HTuple& MinWidthCoord, const HTuple& MaxWidthCoord, const HTuple& ThreshStart, const HTuple& ThreshEnd, const HTuple& ThreshStep, const HTuple& MinWidthSmooth, const HTuple& MaxWidthSmooth, const HTuple& MinWidthCurve, const HTuple& MaxWidthCurve, const HTuple& Weight1, const HTuple& Weight2, const HTuple& Weight3, HTuple* ArcCenterRow, HTuple* ArcCenterCol, HTuple* ArcAngle, HTuple* ArcBeginRow, HTuple* ArcBeginCol, HTuple* LineBeginRow, HTuple* LineBeginCol, HTuple* LineEndRow, HTuple* LineEndCol, HTuple* Order)
static void HMisc::ApproxChain(const HTuple& Row, const HTuple& Column, double MinWidthCoord, double MaxWidthCoord, double ThreshStart, double ThreshEnd, double ThreshStep, double MinWidthSmooth, double MaxWidthSmooth, Hlong MinWidthCurve, Hlong MaxWidthCurve, double Weight1, double Weight2, double Weight3, HTuple* ArcCenterRow, HTuple* ArcCenterCol, HTuple* ArcAngle, HTuple* ArcBeginRow, HTuple* ArcBeginCol, HTuple* LineBeginRow, HTuple* LineBeginCol, HTuple* LineEndRow, HTuple* LineEndCol, HTuple* Order)
void HOperatorSetX.ApproxChain(
[in] VARIANT Row, [in] VARIANT Column, [in] VARIANT MinWidthCoord, [in] VARIANT MaxWidthCoord, [in] VARIANT ThreshStart, [in] VARIANT ThreshEnd, [in] VARIANT ThreshStep, [in] VARIANT MinWidthSmooth, [in] VARIANT MaxWidthSmooth, [in] VARIANT MinWidthCurve, [in] VARIANT MaxWidthCurve, [in] VARIANT Weight1, [in] VARIANT Weight2, [in] VARIANT Weight3, [out] VARIANT* ArcCenterRow, [out] VARIANT* ArcCenterCol, [out] VARIANT* ArcAngle, [out] VARIANT* ArcBeginRow, [out] VARIANT* ArcBeginCol, [out] VARIANT* LineBeginRow, [out] VARIANT* LineBeginCol, [out] VARIANT* LineEndRow, [out] VARIANT* LineEndCol, [out] VARIANT* Order)
VARIANT HMiscX.ApproxChain(
[in] VARIANT Row, [in] VARIANT Column, [in] double MinWidthCoord, [in] double MaxWidthCoord, [in] double ThreshStart, [in] double ThreshEnd, [in] double ThreshStep, [in] double MinWidthSmooth, [in] double MaxWidthSmooth, [in] Hlong MinWidthCurve, [in] Hlong MaxWidthCurve, [in] double Weight1, [in] double Weight2, [in] double Weight3, [out] VARIANT* ArcCenterCol, [out] VARIANT* ArcAngle, [out] VARIANT* ArcBeginRow, [out] VARIANT* ArcBeginCol, [out] VARIANT* LineBeginRow, [out] VARIANT* LineBeginCol, [out] VARIANT* LineEndRow, [out] VARIANT* LineEndCol, [out] VARIANT* Order)
static void HOperatorSet.ApproxChain(HTuple row, HTuple column, HTuple minWidthCoord, HTuple maxWidthCoord, HTuple threshStart, HTuple threshEnd, HTuple threshStep, HTuple minWidthSmooth, HTuple maxWidthSmooth, HTuple minWidthCurve, HTuple maxWidthCurve, HTuple weight1, HTuple weight2, HTuple weight3, out HTuple arcCenterRow, out HTuple arcCenterCol, out HTuple arcAngle, out HTuple arcBeginRow, out HTuple arcBeginCol, out HTuple lineBeginRow, out HTuple lineBeginCol, out HTuple lineEndRow, out HTuple lineEndCol, out HTuple order)
static void HMisc.ApproxChain(HTuple row, HTuple column, double minWidthCoord, double maxWidthCoord, double threshStart, double threshEnd, double threshStep, double minWidthSmooth, double maxWidthSmooth, int minWidthCurve, int maxWidthCurve, double weight1, double weight2, double weight3, out HTuple arcCenterRow, out HTuple arcCenterCol, out HTuple arcAngle, out HTuple arcBeginRow, out HTuple arcBeginCol, out HTuple lineBeginRow, out HTuple lineBeginCol, out HTuple lineEndRow, out HTuple lineEndCol, out HTuple order)
The coordinates of a curve are approximated by a row of lines
and arcs. The procedure tries values from a user-definable range
for certain parameters. The limits of these ranges are explicitly
stated in the parameter list of the function
(MinWidthCoord ... MaxWidthCoord, ThreshStart ... ThreshEnd,
MinWidthSmooth ... MaxWidthSmooth, MinWidthCurve ... MaxWidthCurve).
Additionally, the step width for the parameter area of the threshold
value for pointed corners has to be indicated (ThreshStep). By
narrowing the covered areas the runtime of the calculation can be
shortened, but the result may deteriorate.
The parameters Weight1, Weight2 and Weight3 indicate whether the
desired weighting is placed more on precision of the approximation,
obtaining as much large segments as possible or as few small
segments as possible. Thus, for (Weight1,Weight2,Weight3) (1,0,0)
creates a very precise approximation and (0,1,1) an approximation
with as few large segments as possible.
The result of the procedure is returned separately as arcs and
lines. If one is interested in the sequence of the segments the
individual resulting elements can be read successively from the
resulting tuples; the sequence can be taken from the return
parameter order (0: next element is next line segment, 1: next
element is next arc segment).
Contours which can possibly consist of only one segment should also
be examined with a threshold maximum (ThreshEnd) > 1.0, because
otherwise at least one “corner point” is determined in any case.
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Processed without parallelization.
Row of the contour.
Default value: 32
Column of the contour.
Default value: 32
Minimum width of Gauss operator for coordinate
smoothing (> 0.4).
Default value: 0.5
Suggested values: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7
Typical range of values: 0.4
≤
MinWidthCoord
MinWidthCoord
MinWidthCoord
MinWidthCoord
MinWidthCoord
minWidthCoord
≤
3.0 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Maximum width of Gauss operator for coordinate
smoothing (> 0.4).
Default value: 2.4
Suggested values: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7
Typical range of values: 0.4
≤
MaxWidthCoord
MaxWidthCoord
MaxWidthCoord
MaxWidthCoord
MaxWidthCoord
maxWidthCoord
≤
3.0 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Minimum threshold value of the curvature for accepting
a corner (relative to the largest curvature present).
Default value: 0.3
Suggested values: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8
Typical range of values: 0.1
≤
ThreshStart
ThreshStart
ThreshStart
ThreshStart
ThreshStart
threshStart
≤
0.9 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Maximum threshold value of the curvature for accepting
a corner (relative to the largest curvature present).
Default value: 0.9
Suggested values: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8
Typical range of values: 0.1
≤
ThreshEnd
ThreshEnd
ThreshEnd
ThreshEnd
ThreshEnd
threshEnd
≤
0.9 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Step width for threshold increase.
Default value: 0.2
Suggested values: 0.3, 0.4, 0.5
Typical range of values: 0.1
≤
ThreshStep
ThreshStep
ThreshStep
ThreshStep
ThreshStep
threshStep
≤
0.9 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Minimum width of Gauss operator for smoothing
the curvature function (> 0.4).
Default value: 0.5
Suggested values: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7
Typical range of values: 0.4
≤
MinWidthSmooth
MinWidthSmooth
MinWidthSmooth
MinWidthSmooth
MinWidthSmooth
minWidthSmooth
≤
3.0 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Maximum width of Gauss operator for smoothing
the curvature function.
Default value: 2.4
Suggested values: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7
Typical range of values: 0.4
≤
MaxWidthSmooth
MaxWidthSmooth
MaxWidthSmooth
MaxWidthSmooth
MaxWidthSmooth
maxWidthSmooth
≤
3.0 (lin)
Minimum increment: 0.01
Recommended increment: 0.1
Minimum width of curve area for curvature
determination (> 0.4).
Default value: 2
Suggested values: 2, 5, 7
Typical range of values: 1
≤
MinWidthCurve
MinWidthCurve
MinWidthCurve
MinWidthCurve
MinWidthCurve
minWidthCurve
≤
12 (lin)
Minimum increment: 1
Recommended increment: 2
Maximum width of curve area for curvature
determination.
Default value: 12
Suggested values: 2, 5, 7
Typical range of values: 1
≤
MaxWidthCurve
MaxWidthCurve
MaxWidthCurve
MaxWidthCurve
MaxWidthCurve
maxWidthCurve
≤
20 (lin)
Minimum increment: 1
Recommended increment: 2
Weighting factor for approximation precision.
Default value: 1.0
Suggested values: 0.0, 0.5, 1.0
Typical range of values: 0.0
≤
Weight1
Weight1
Weight1
Weight1
Weight1
weight1
≤
1.0 (lin)
Minimum increment: 0.1
Recommended increment: 0.5
Weighting factor for large segments.
Default value: 1.0
Suggested values: 0.0, 0.5, 1.0
Typical range of values: 0.0
≤
Weight2
Weight2
Weight2
Weight2
Weight2
weight2
≤
1.0 (lin)
Minimum increment: 0.1
Recommended increment: 0.5
Weighting factor for small segments.
Default value: 1.0
Suggested values: 0.0, 0.5, 1.0
Typical range of values: 0.0
≤
Weight3
Weight3
Weight3
Weight3
Weight3
weight3
≤
1.0 (lin)
Minimum increment: 0.1
Recommended increment: 0.5
Row of the center of an arc.
Column of the center of an arc.
Row of the starting point of an arc.
Column of the starting point of an arc.
Row of the starting point of a line segment.
Column of the starting point of a line segment.
Row of the ending point of a line segment.
Column of the ending point of a line segment.
Sequence of line (value 0) and arc segments (value 1).
/* read edge image */
read_image(&Image,"fig1_kan");
/* construct edge region */
hysteresis_threshold(Image,&RK1,64,255,40,1);
connection(RK1,&Rand);
/* fetch chain code */
T_get_region_contour(Rand,&Rows,&Columns);
firstline = get_i(Tline,0);
firstcol = get_i(Tcol,0);
/* approximation with lines and circular arcs */
set_d(t1,0.4,0);
set_d(t2,2.4,0);
set_d(t3,0.3,0);
set_d(t4,0.9,0);
set_d(t5,0.2,0);
set_d(t6,0.4,0);
set_d(t7,2.4,0);
set_i(t8,2,0);
set_i(t9,12,0);
set_d(t10,1.0,0);
set_d(t11,1.0,0);
set_d(t12,1.0,0);
T_approx_chain(Rows,Columns,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,
&Bzl,&Bzc,&Br,&Bwl,&Bwc,&Ll0,&Lc0,&Ll1,&Lc1,&order);
nob = length_tuple(Bzl);
nol = length_tuple(Ll0);
/* draw lines and arcs */
set_i(WindowHandleTuple,WindowHandle,0) ;
set_line_width(WindowHandle,4);
if (nob>0) T_disp_arc(Bzl,Bzc,Br,Bwl,Bwc);
set_line_width(WindowHandle,1);
if (nol>0) T_disp_line(WindowHandleTuple,Ll0,Lc0,Ll1,Lc1);
The operator approx_chainapprox_chainApproxChainapprox_chainApproxChainApproxChain returns the value 2 (H_MSG_TRUE) if the
parameters are correct. Otherwise an exception is raised.
sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp,
edges_imageedges_imageEdgesImageedges_imageEdgesImageEdgesImage,
get_region_contourget_region_contourGetRegionContourget_region_contourGetRegionContourGetRegionContour,
thresholdthresholdThresholdthresholdThresholdThreshold,
hysteresis_thresholdhysteresis_thresholdHysteresisThresholdhysteresis_thresholdHysteresisThresholdHysteresisThreshold
set_line_widthset_line_widthSetLineWidthset_line_widthSetLineWidthSetLineWidth,
disp_arcdisp_arcDispArcdisp_arcDispArcDispArc,
disp_linedisp_lineDispLinedisp_lineDispLineDispLine
get_region_polygonget_region_polygonGetRegionPolygonget_region_polygonGetRegionPolygonGetRegionPolygon,
approx_chain_simpleapprox_chain_simpleApproxChainSimpleapprox_chain_simpleApproxChainSimpleApproxChainSimple
get_region_chainget_region_chainGetRegionChainget_region_chainGetRegionChainGetRegionChain,
smallest_circlesmallest_circleSmallestCirclesmallest_circleSmallestCircleSmallestCircle,
disp_circledisp_circleDispCircledisp_circleDispCircleDispCircle,
disp_linedisp_lineDispLinedisp_lineDispLineDispLine
Foundation