approx_chainT_approx_chainApproxChainApproxChainapprox_chain (Operator)

Name

approx_chainT_approx_chainApproxChainApproxChainapprox_chain — Approximation einer Kontur durch Bögen und Linien.

Warnung

approx_chainapprox_chainApproxChainApproxChainApproxChainapprox_chain ist veraltet und wird nur aus Gründen der Rückwärtskompatibilität zur Verfügung gestellt.

Signatur

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)

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)

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)

def approx_chain(row: Sequence[int], column: Sequence[int], min_width_coord: float, max_width_coord: float, thresh_start: float, thresh_end: float, thresh_step: float, min_width_smooth: float, max_width_smooth: float, min_width_curve: int, max_width_curve: int, weight_1: float, weight_2: float, weight_3: float) -> Tuple[Sequence[int], Sequence[int], Sequence[float], Sequence[int], Sequence[int], Sequence[int], Sequence[int], Sequence[int], Sequence[int], Sequence[int]]

Beschreibung

Die Koordinaten einer Kurve werden durch eine Folge von Linien und Kreisbögen approximiert. Das Verfahren durchläuft dabei für bestimmte Parameter Wertebereiche. In der Parameterliste der Funktion werden die Grenzen dieser Bereiche explizit angegeben (MinWidthCoord ... MaxWidthCoord, ThreshStart ... ThreshEnd, MinWidthSmooth ... MaxWidthSmooth, MinWidthCurve ... MaxWidthCurve). Zusätzlich muss für den Parameterbereich des Schwellenwertes für spitze Ecken auch die Schrittweite angegeben werden (ThreshStep). Durch Einengung der durchlaufenen Bereiche kann die Laufzeit der Berechnung verkürzt, das Ergebnis aber eventuell verschlechtert werden.

Durch die Parameter Weight1, Weight2 und Weight3 kann angegeben werden, ob die gewünschte Gewichtung mehr auf Genauigkeit der Approximation oder Erhalt möglichst vieler großer oder möglichst weniger kleiner Segmente liegt. Für (Weight1,Weight2,Weight3) erzeugt also (1,0,0) eine sehr genaue Approximation (0,1,1) eine Approximation mit möglichst wenigen und großen Segmenten.

Das Ergebnis des Verfahren wird getrennt nach Bögen und Linien zurückgegeben. Ist man an der Reihenfolge der Segmente interessiert, so können die einzelnen Ergebniselemente sukzessive aus den Ergebnistupeln ausgelesen werden, wobei dem Rückgabeparameter Order die Reihenfolge entnommen werden kann (0: nächstes Element ist nächstes Liniensegment, 1: nächstes Element ist nächstes Bogensegment).

Achtung

Konturen, die eventuell nur aus einem Segment bestehen können, sollten auch mit einem Schwellenwertmaximum (ThreshEnd) > 1.0 untersucht werden, da ansonsten auf jeden Fall mindestens ein „Eckpunkt“ bestimmt wird.

Ausführungsinformationen

Parameter

RowRowRowRowrowrow (input_control)  point.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Zeilenwert der Kontur.

Defaultwert: 32

ColumnColumnColumnColumncolumncolumn (input_control)  point.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Spaltenwert der Kontur.

Defaultwert: 32

MinWidthCoordMinWidthCoordMinWidthCoordMinWidthCoordminWidthCoordmin_width_coord (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Minimale Breite des Gaußoperators zur Koordinatenglättung (> 0.4).

Defaultwert: 0.5

Wertevorschläge: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7

Typischer Wertebereich: 0.4 ≤ MinWidthCoord MinWidthCoord MinWidthCoord MinWidthCoord minWidthCoord min_width_coord ≤ 3.0 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

MaxWidthCoordMaxWidthCoordMaxWidthCoordMaxWidthCoordmaxWidthCoordmax_width_coord (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Maximale Breite des Gaußoperators zur Koordinatenglättung.

Defaultwert: 2.4

Wertevorschläge: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7

Typischer Wertebereich: 0.4 ≤ MaxWidthCoord MaxWidthCoord MaxWidthCoord MaxWidthCoord maxWidthCoord max_width_coord ≤ 3.0 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

ThreshStartThreshStartThreshStartThreshStartthreshStartthresh_start (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Minimaler Schwellenwert der Krümmung für die Akzeptanz einer Ecke (relativ zur größten auftretenden Krümmung).

Defaultwert: 0.3

Wertevorschläge: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8

Typischer Wertebereich: 0.1 ≤ ThreshStart ThreshStart ThreshStart ThreshStart threshStart thresh_start ≤ 0.9 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

ThreshEndThreshEndThreshEndThreshEndthreshEndthresh_end (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Maximaler Schwellenwert der Krümmung für die Akzeptanz einer Ecke (relativ zur größten auftretenden Krümmung).

Defaultwert: 0.9

Wertevorschläge: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8

Typischer Wertebereich: 0.1 ≤ ThreshEnd ThreshEnd ThreshEnd ThreshEnd threshEnd thresh_end ≤ 0.9 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

ThreshStepThreshStepThreshStepThreshStepthreshStepthresh_step (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Schrittweite für den Schwellenwertanstieg.

Defaultwert: 0.2

Wertevorschläge: 0.3, 0.4, 0.5

Typischer Wertebereich: 0.1 ≤ ThreshStep ThreshStep ThreshStep ThreshStep threshStep thresh_step ≤ 0.9 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

MinWidthSmoothMinWidthSmoothMinWidthSmoothMinWidthSmoothminWidthSmoothmin_width_smooth (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Minimale Breite des Gaußoperators zur Glättung der Krümmungsfunktion (> 0.4).

Defaultwert: 0.5

Wertevorschläge: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7

Typischer Wertebereich: 0.4 ≤ MinWidthSmooth MinWidthSmooth MinWidthSmooth MinWidthSmooth minWidthSmooth min_width_smooth ≤ 3.0 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

MaxWidthSmoothMaxWidthSmoothMaxWidthSmoothMaxWidthSmoothmaxWidthSmoothmax_width_smooth (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Maximale Breite des Gaußoperators zur Glättung der Krümmungsfunktion.

Defaultwert: 2.4

Wertevorschläge: 0.5, 0.7, 1.0, 1.2, 1.5, 1.7

Typischer Wertebereich: 0.4 ≤ MaxWidthSmooth MaxWidthSmooth MaxWidthSmooth MaxWidthSmooth maxWidthSmooth max_width_smooth ≤ 3.0 (lin)

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.1

MinWidthCurveMinWidthCurveMinWidthCurveMinWidthCurveminWidthCurvemin_width_curve (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimale Breite des Kurvenbereichs zur Krümmungsbestimmung (> 0).

Defaultwert: 2

Wertevorschläge: 2, 5, 7

Typischer Wertebereich: 1 ≤ MinWidthCurve MinWidthCurve MinWidthCurve MinWidthCurve minWidthCurve min_width_curve ≤ 12 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 2

MaxWidthCurveMaxWidthCurveMaxWidthCurveMaxWidthCurvemaxWidthCurvemax_width_curve (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Maximale Breite des Kurvenbereichs zur Krümmungsbestimmung.

Defaultwert: 12

Wertevorschläge: 2, 5, 7

Typischer Wertebereich: 1 ≤ MaxWidthCurve MaxWidthCurve MaxWidthCurve MaxWidthCurve maxWidthCurve max_width_curve ≤ 20 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 2

Weight1Weight1Weight1Weight1weight1weight_1 (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Gewichtungsfaktor für die Approximationsgenauigkeit.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.5, 1.0

Typischer Wertebereich: 0.0 ≤ Weight1 Weight1 Weight1 Weight1 weight1 weight_1 ≤ 1.0 (lin)

Minimale Schrittweite: 0.1

Empfohlene Schrittweite: 0.5

Weight2Weight2Weight2Weight2weight2weight_2 (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Gewichtungsfaktor für große Segmente.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.5, 1.0

Typischer Wertebereich: 0.0 ≤ Weight2 Weight2 Weight2 Weight2 weight2 weight_2 ≤ 1.0 (lin)

Minimale Schrittweite: 0.1

Empfohlene Schrittweite: 0.5

Weight3Weight3Weight3Weight3weight3weight_3 (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Gewichtungsfaktor für kleine Segmente.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.5, 1.0

Typischer Wertebereich: 0.0 ≤ Weight3 Weight3 Weight3 Weight3 weight3 weight_3 ≤ 1.0 (lin)

Minimale Schrittweite: 0.1

Empfohlene Schrittweite: 0.5

ArcCenterRowArcCenterRowArcCenterRowArcCenterRowarcCenterRowarc_center_row (output_control)  arc.center.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Zeile des Mittelpunkts eines Bogens.

ArcCenterColArcCenterColArcCenterColArcCenterColarcCenterColarc_center_col (output_control)  arc.center.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Spalte des Mittelpunkts eines Bogens.

ArcAngleArcAngleArcAngleArcAnglearcAnglearc_angle (output_control)  arc.angle.rad-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Winkel eines Bogens.

ArcBeginRowArcBeginRowArcBeginRowArcBeginRowarcBeginRowarc_begin_row (output_control)  arc.begin.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Zeile des Startpunkts eines Bogens.

ArcBeginColArcBeginColArcBeginColArcBeginColarcBeginColarc_begin_col (output_control)  arc.begin.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Spalte des Startpunkts eines Bogens.

LineBeginRowLineBeginRowLineBeginRowLineBeginRowlineBeginRowline_begin_row (output_control)  line.begin.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Zeile des Startpunkts einer Linie.

LineBeginColLineBeginColLineBeginColLineBeginCollineBeginColline_begin_col (output_control)  line.begin.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Spalte des Startpunkts einer Linie.

LineEndRowLineEndRowLineEndRowLineEndRowlineEndRowline_end_row (output_control)  line.end.y-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Zeile des Endpunkts einer Linie.

LineEndColLineEndColLineEndColLineEndCollineEndColline_end_col (output_control)  line.end.x-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Spalte des Endpunkts einer Linie.

OrderOrderOrderOrderorderorder (output_control)  integer-array HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Reihenfolge von Linien- (Wert 0) und Bogensegmenten (Wert1).

Beispiel (C)

/* 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);

Ergebnis

approx_chainapprox_chainApproxChainApproxChainApproxChainapprox_chain liefert den Wert 2 (H_MSG_TRUE), falls die Parameter korrekt sind. Ansonsten wird eine Fehlerbehandlung durchgeführt.

Vorgänger

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp, edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_image, get_region_contourget_region_contourGetRegionContourGetRegionContourGetRegionContourget_region_contour, thresholdthresholdThresholdThresholdThresholdthreshold, hysteresis_thresholdhysteresis_thresholdHysteresisThresholdHysteresisThresholdHysteresisThresholdhysteresis_threshold

Nachfolger

set_line_widthset_line_widthSetLineWidthSetLineWidthSetLineWidthset_line_width, disp_arcdisp_arcDispArcDispArcDispArcdisp_arc, disp_linedisp_lineDispLineDispLineDispLinedisp_line

Alternativen

get_region_polygonget_region_polygonGetRegionPolygonGetRegionPolygonGetRegionPolygonget_region_polygon, approx_chain_simpleapprox_chain_simpleApproxChainSimpleApproxChainSimpleApproxChainSimpleapprox_chain_simple

Siehe auch

get_region_chainget_region_chainGetRegionChainGetRegionChainGetRegionChainget_region_chain, smallest_circlesmallest_circleSmallestCircleSmallestCircleSmallestCirclesmallest_circle, disp_circledisp_circleDispCircleDispCircleDispCircledisp_circle, disp_linedisp_lineDispLineDispLineDispLinedisp_line

Modul

Foundation