{"id":954,"date":"2026-04-23T07:04:56","date_gmt":"2026-04-23T05:04:56","guid":{"rendered":"https:\/\/thurow.de\/?p=954"},"modified":"2026-04-23T08:28:11","modified_gmt":"2026-04-23T06:28:11","slug":"kalibrierungsbeispiel-teil-2-kalibrierungstool","status":"publish","type":"post","link":"https:\/\/thurow.de\/?p=954","title":{"rendered":"Kalibrierungsbeispiel Teil 2 \u2013 Kalibrierungstool"},"content":{"rendered":"\n<p><a href=\"https:\/\/thurow.de\/?p=922\" target=\"_blank\" rel=\"noreferrer noopener\">Teil 1<\/a> dieser Serie widmete sich einer robusten Bildauswertung mit wenig Rechenkraft auf Basis vorher bestimmter Kalibrierungswerte. Dieser Teil widmet sich deren Bestimmung. Wie bereits angef\u00fchrt, ist die Kalibrierung wesentlich aufwendiger und rechenintensiver. Daher wurde sie in diesem Projekt ausgelagert auf einen Desktop-Rechner. Der Komplexit\u00e4t geschuldet widmen sich diesem Part mehrere Teile. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"2121\" height=\"1590\" src=\"https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi.png\" alt=\"\" class=\"wp-image-899\" srcset=\"https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi.png 2121w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-300x225.png 300w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-768x576.png 768w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-1536x1151.png 1536w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-2048x1535.png 2048w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-1000x750.png 1000w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-230x172.png 230w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-350x262.png 350w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/Kalibrierungstool_Maszi-480x360.png 480w\" sizes=\"(max-width: 2121px) 100vw, 2121px\" \/><figcaption class=\"wp-element-caption\">Abbildung 1: Ausschnitt UI Kalibrierungstool<\/figcaption><\/figure>\n\n\n\n<p>Im ersten Teil wurde die Umsetzung der Lock-in-Phasendetektion mit positionsabh\u00e4ngiger Referenzfrequenz gezeigt. Die lokale Periode <math data-latex=\"P(x)\"><semantics><mrow><mi>P<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">P(x)<\/annotation><\/semantics><\/math> (Pixel pro mm) ist dabei ortsabh\u00e4ngig und wird berechnet als:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>P<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><msub><mi>P<\/mi><mn>0<\/mn><\/msub><mo>+<\/mo><mfrac><mrow><mi>d<\/mi><mi>P<\/mi><\/mrow><mrow><mi>d<\/mi><mi>x<\/mi><\/mrow><\/mfrac><mspace width=\"0.1667em\"><\/mspace><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo>\u2212<\/mo><msub><mi>x<\/mi><mn>0<\/mn><\/msub><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>+<\/mo><mfrac><mrow><msup><mi>d<\/mi><mn>2<\/mn><\/msup><mi>P<\/mi><\/mrow><mrow><mi>d<\/mi><msup><mi>x<\/mi><mn>2<\/mn><\/msup><\/mrow><\/mfrac><mspace width=\"0.1667em\"><\/mspace><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo>\u2212<\/mo><msub><mi>x<\/mi><mn>0<\/mn><\/msub><msup><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mn>2<\/mn><\/msup><mspace width=\"2em\"><\/mspace><mrow><mo fence=\"true\" form=\"prefix\">[<\/mo><mfrac><mtext>px<\/mtext><mtext>mm<\/mtext><\/mfrac><mo fence=\"true\" form=\"postfix\">]<\/mo><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">P(x) = P_0 + \\frac{dP}{dx}\\,(x &#8211; x_0)\n             + \\frac{d^2P}{dx^2}\\,(x &#8211; x_0)^2\n  \\qquad \\left[\\frac{\\text{px}}{\\text{mm}}\\right]<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Daraus ergeben sich die Kalibrierungs-Parameter<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><math data-latex=\"x_0\"><semantics><msub><mi>x<\/mi><mn>0<\/mn><\/msub><annotation encoding=\"application\/x-tex\">x_0<\/annotation><\/semantics><\/math> als Referenzposition<\/li>\n\n\n\n<li><math data-latex=\"P_0\"><semantics><msub><mi>P<\/mi><mn>0<\/mn><\/msub><annotation encoding=\"application\/x-tex\">P_0<\/annotation><\/semantics><\/math> als Basisperiode bei <math data-latex=\"x_0\"><semantics><msub><mi>x<\/mi><mn>0<\/mn><\/msub><annotation encoding=\"application\/x-tex\">x_0<\/annotation><\/semantics><\/math><\/li>\n\n\n\n<li><math data-latex=\"dP\/dx\"><semantics><mrow><mi>d<\/mi><mi>P<\/mi><mi>\/<\/mi><mi>d<\/mi><mi>x<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">dP\/dx<\/annotation><\/semantics><\/math> als linearer Koeffizient<\/li>\n\n\n\n<li><math data-latex=\"d^2P\/dx^2\"><semantics><mrow><msup><mi>d<\/mi><mn>2<\/mn><\/msup><mi>P<\/mi><mi>\/<\/mi><mi>d<\/mi><msup><mi>x<\/mi><mn>2<\/mn><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">d^2P\/dx^2<\/annotation><\/semantics><\/math> als quadratischer Koeffizient<\/li>\n<\/ul>\n\n\n\n<p>Triviale Schritte wie die Festlegung des ROIs werden bewusst ausgelassen.<\/p>\n\n\n\n<p>Ist der ROI festgelegt, ergibt sich das bekannte Messbild:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"140\" src=\"https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik.png\" alt=\"\" class=\"wp-image-924\" srcset=\"https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik.png 1600w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-300x26.png 300w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-768x67.png 768w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-1536x134.png 1536w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-1000x88.png 1000w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-230x20.png 230w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-350x31.png 350w, https:\/\/thurow.de\/wp-content\/uploads\/2026\/04\/grafik-480x42.png 480w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/figure>\n\n\n\n<p>Analog der Auswertung im Vermessungsger\u00e4t wird zun\u00e4chst ein 1D-Helligkeitsprofil generiert. Warum dieser Weg, der bereits Bildinformation verliert? Die Antwort ist: da praktische Tests gezeigt haben, auf diesem Weg wird die angestrebte Zielgenauigkeit bereits deutlich \u00fcbertroffen. Die Striche sind hinreichend senkrecht, so dass hier der Informationsverlust durch Mittelung unbedeutend gegen\u00fcber der Relevanz der folgenden Verfahren ausf\u00e4llt.<br><br>Das Bild wird in einem horizontalen ROI-Streifen der H\u00f6he <math data-latex=\"h\"><semantics><mi>h<\/mi><annotation encoding=\"application\/x-tex\">h<\/annotation><\/semantics><\/math> ab Zeile <math data-latex=\"y_0\"><semantics><msub><mi>y<\/mi><mn>0<\/mn><\/msub><annotation encoding=\"application\/x-tex\">y_0<\/annotation><\/semantics><\/math> vertikal gemittelt. F\u00fcr jede Spalte <math data-latex=\"x\"><semantics><mi>x<\/mi><annotation encoding=\"application\/x-tex\">x<\/annotation><\/semantics><\/math> ergibt sich:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>I<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mfrac><mn>1<\/mn><mi>h<\/mi><\/mfrac><mrow><munderover><mo movablelimits=\"false\">\u2211<\/mo><mrow><mi>y<\/mi><mo>=<\/mo><msub><mi>y<\/mi><mn>0<\/mn><\/msub><\/mrow><mrow><msub><mi>y<\/mi><mn>0<\/mn><\/msub><mo>+<\/mo><mi>h<\/mi><mo>\u2212<\/mo><mn>1<\/mn><\/mrow><\/munderover><\/mrow><mtext>image<\/mtext><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo separator=\"true\">,<\/mo><mi>y<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">I(x) = \\frac{1}{h} \\sum_{y=y_0}^{y_0+h-1} \\text{image}(x, y)<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Das Helligkeitsprofil wird nun mit einem symmetrischen Box-Filter leicht gegl\u00e4ttet:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mover><mi>I<\/mi><mo stretchy=\"false\" style=\"math-style:normal;math-depth:0;\">~<\/mo><\/mover><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mfrac><mn>1<\/mn><mrow><mi>|<\/mi><mi>N<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><\/mfrac><mrow><munder><mo movablelimits=\"false\">\u2211<\/mo><mrow><mi>k<\/mi><mo>\u2208<\/mo><mi>N<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\" lspace=\"0em\" rspace=\"0em\">)<\/mo><\/mrow><\/munder><\/mrow><mi>I<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>k<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">\\tilde{I}(x) = \\frac{1}{|N(x)|} \\sum_{k \\in N(x)} I(k)<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>mit <math data-latex=\"N(x) = [\\max(0, x-r),\\; \\min(W-1, x+r)]\"><semantics><mrow><mi>N<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">[<\/mo><mrow><mi>max<\/mi><mo>\u2061<\/mo><\/mrow><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo separator=\"true\">,<\/mo><mi>x<\/mi><mo>\u2212<\/mo><mi>r<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo separator=\"true\">,<\/mo><mspace width=\"0.2778em\"><\/mspace><mrow><mspace width=\"0.1667em\"><\/mspace><mi>min<\/mi><mo>\u2061<\/mo><\/mrow><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>W<\/mi><mo>\u2212<\/mo><mn>1<\/mn><mo separator=\"true\">,<\/mo><mi>x<\/mi><mo>+<\/mo><mi>r<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo form=\"postfix\" stretchy=\"false\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">N(x) = [\\max(0, x-r),\\; \\min(W-1, x+r)]<\/annotation><\/semantics><\/math> und <math data-latex=\"|N(x)|\"><semantics><mrow><mi>|<\/mi><mi>N<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">|N(x)|<\/annotation><\/semantics><\/math> als Anzahl der Summanden (Randbehandlung durch Clamping).<\/p>\n\n\n\n<p>Auf dieser Signalbasis erfolgt die Detektion der Linien. Und hier f\u00e4llt die Entscheidung klar auf den Ansatz, die Kanten der Linien zu detektieren und nicht die Linie direkt z.B. als Helligkeitsminimum. Das hat mehrere Gr\u00fcnde:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Information steckt in der Flanke, nicht im Plateau<\/strong><br>Ein Strich erscheint im gemittelten 1D-Helligkeitsprofil als Mulde mit einem flachen, rauschdominierten Boden, der tiefste Punkt ist statistisch schlecht lokalisiert. <br>Die \u00dcberg\u00e4nge hell \u2192 dunkel und dunkel \u2192 hell hingegen sind die Stellen mit dem gr\u00f6\u00dften Gradienten <math data-latex=\"|dI\/dx|\"><semantics><mrow><mi>|<\/mi><mi>d<\/mi><mi>I<\/mi><mi>\/<\/mi><mi>d<\/mi><mi>x<\/mi><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">|dI\/dx|<\/annotation><\/semantics><\/math> und damit dem h\u00f6chsten Signal-zu-Rausch-Verh\u00e4ltnis f\u00fcr eine Ortsbestimmung. <br>Die Flanke gibt die Position auf Bruchteile eines Pixels preis, das Plateau nicht.<\/li>\n\n\n\n<li><strong>Unempfindlich gegen Helligkeits- und Kontrastverl\u00e4ufe<\/strong><br>Die Beleuchtung \u00fcber die Bildbreite ist nicht homogen, die Abbildung f\u00e4llt zu den R\u00e4ndern hin ab, und die Striche selbst haben nicht \u00fcberall denselben Schwarzwert. <br>Ein Verfahren, das auf absoluten Helligkeitswerten operiert (Schwelle, Minimum), reagiert auf jede dieser St\u00f6rungen. <br>Der Gradient ist dagegen invariant gegen additive Offsets und nahezu invariant gegen langsame multiplikative Verl\u00e4ufe, genau die Fehlerklassen, die in der Praxis auftreten.<\/li>\n\n\n\n<li><strong>Trennung von linker und rechter Kante als Plausibilit\u00e4tsanker<\/strong><br>Da der vorzeichenbehaftete Gradient links und rechts eines Strichs entgegengesetzte Extrema hat, lassen sich die beiden Kanten getrennt detektieren und anschlie\u00dfend zu Paaren zusammenf\u00fchren. <br>Das liefert als Nebenprodukt die Strichbreite, und damit ein hartes Plausibilit\u00e4tskriterium: <br>Paare au\u00dferhalb des erwarteten Breitenfensters werden verworfen, bevor sie das Periodenmodell verf\u00e4lschen. <br>Ein Minimum-basiertes Verfahren kann diesen Selbsttest nicht leisten, da es nur einen Punkt pro Strich sieht.<\/li>\n<\/ul>\n\n\n\n<p>F\u00fcr die Detektion der Kanten wird aus dem gegl\u00e4tteten Helligkeitsprofil ein 1D Profil <math data-latex=\"g\"><semantics><mi>g<\/mi><annotation encoding=\"application\/x-tex\">g<\/annotation><\/semantics><\/math> der signierten Gradienten \u00fcber diesem mittels zentraler Differenzen gebildet:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mtable displaystyle=\"true\" columnalign=\"right left\" class=\"tml-jot\"><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mfrac><mn>1<\/mn><mn>2<\/mn><\/mfrac><mo fence=\"true\" symmetric=\"true\" minsize=\"1.2em\" maxsize=\"1.2em\">(<\/mo><mover><mi>I<\/mi><mo stretchy=\"false\" style=\"math-style:normal;math-depth:0;\">~<\/mo><\/mover><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo>+<\/mo><mn>1<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><mover><mi>I<\/mi><mo stretchy=\"false\" style=\"math-style:normal;math-depth:0;\">~<\/mo><\/mover><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo>\u2212<\/mo><mn>1<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo fence=\"true\" symmetric=\"true\" minsize=\"1.2em\" maxsize=\"1.2em\">)<\/mo><mspace width=\"2em\"><\/mspace><mtext>f\u00fcr&nbsp;<\/mtext><mi>x<\/mi><mo>\u2208<\/mo><mo form=\"prefix\" stretchy=\"false\">[<\/mo><mn>1<\/mn><mo separator=\"true\">,<\/mo><mi>W<\/mi><mo>\u2212<\/mo><mn>2<\/mn><mo form=\"postfix\" stretchy=\"false\">]<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mn>0<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>W<\/mi><mo>\u2212<\/mo><mn>1<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mn>0<\/mn><\/mrow><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">\\begin{aligned}\ng(x) &amp;= \\frac{1}{2} \\bigl(\\tilde{I}(x+1) &#8211; \\tilde{I}(x-1)\\bigr) \\qquad \\text{f\u00fcr } x \\in [1, W-2] \\\\\ng(0) &amp;= 0\\\\\ng(W-1) &amp;= 0\n\\end{aligned}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Bei einer linken Strichkante f\u00e4llt die Intensit\u00e4t (hell \u2192 dunkel), daher ist <math data-latex=\"g(x) &lt; 0\"><semantics><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>&lt;<\/mo><mn>0<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">g(x) &lt; 0<\/annotation><\/semantics><\/math>, an einer rechten Strichkante steigt die Intensit\u00e4t wieder (dunkel \u2192 hell), hier ist <math data-latex=\"g(x) &gt; 0\"><semantics><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>&gt;<\/mo><mn>0<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">g(x) &gt; 0<\/annotation><\/semantics><\/math>.<\/p>\n\n\n\n<p>Das Gradientenprofil ist jedoch rauschbehaftet. F\u00fcr die Detektierung der Kanten werden in dem Profil Segmente <math data-latex=\"[a, b]\"><semantics><mrow><mo form=\"prefix\" stretchy=\"false\">[<\/mo><mi>a<\/mi><mo separator=\"true\">,<\/mo><mi>b<\/mi><mo form=\"postfix\" stretchy=\"false\">]<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">[a, b]<\/annotation><\/semantics><\/math> gesucht, in denen zusammenh\u00e4ngend der Gradient <math data-latex=\"g(x) \\geq \\theta\"><semantics><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2265<\/mo><mi>\u03b8<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">g(x) \\geq \\theta<\/annotation><\/semantics><\/math> (Kandidat f\u00fcr eine rechte Kante, positives Segment) oder <math data-latex=\"g(x) \\leq -\\theta\"><semantics><mrow><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>x<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2264<\/mo><mo form=\"prefix\" stretchy=\"false\">\u2212<\/mo><mi>\u03b8<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">g(x) \\leq -\\theta<\/annotation><\/semantics><\/math> (Kandidat f\u00fcr eine linke Kanten, negatives Segment) ausf\u00e4llt. <math data-latex=\"\\theta\"><semantics><mi>\u03b8<\/mi><annotation encoding=\"application\/x-tex\">\\theta<\/annotation><\/semantics><\/math> dient also als Schwellwert. Die Kandidaten der linken und rechten Seite werden nach weiteren Kriterien gefiltert, wie minimaler und maximaler L\u00e4nge, maximalen Peak etc.<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mtable displaystyle=\"true\" columnalign=\"right left right\" class=\"tml-jot\"><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><msub><mi>w<\/mi><mi>i<\/mi><\/msub><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>i<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><mi>\u03b8<\/mi><mspace width=\"2em\"><\/mspace><\/mrow><\/mtd><mtd class=\"tml-right\" style=\"padding-left:1em;padding-right:0em;\"><mrow><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mtext>rechte&nbsp;Seite<\/mtext><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><msub><mi>w<\/mi><mi>i<\/mi><\/msub><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mo form=\"prefix\" stretchy=\"false\">\u2212<\/mo><mi>g<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>i<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>\u2212<\/mo><mi>\u03b8<\/mi><mspace width=\"2em\"><\/mspace><\/mrow><\/mtd><mtd class=\"tml-right\" style=\"padding-left:1em;padding-right:0em;\"><mrow><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mtext>linke&nbsp;Seite<\/mtext><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mi>x<\/mi><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mfrac><mrow><msubsup><mo movablelimits=\"false\">\u2211<\/mo><mrow><mi>i<\/mi><mo>=<\/mo><mi>a<\/mi><\/mrow><mi>b<\/mi><\/msubsup><msub><mi>w<\/mi><mi>i<\/mi><\/msub><mo>\u22c5<\/mo><mi>i<\/mi><\/mrow><mrow><msubsup><mo movablelimits=\"false\">\u2211<\/mo><mrow><mi>i<\/mi><mo>=<\/mo><mi>a<\/mi><\/mrow><mi>b<\/mi><\/msubsup><msub><mi>w<\/mi><mi>i<\/mi><\/msub><\/mrow><\/mfrac><\/mrow><\/mtd><mtd class=\"tml-right\" style=\"padding-left:1em;padding-right:0em;\"><mtext>(Subpixel-Position)<\/mtext><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mi>s<\/mi><\/mtd><mtd class=\"tml-left\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mo>=<\/mo><mrow><munderover><mo movablelimits=\"false\">\u2211<\/mo><mrow><mi>i<\/mi><mo>=<\/mo><mi>a<\/mi><\/mrow><mi>b<\/mi><\/munderover><\/mrow><msub><mi>w<\/mi><mi>i<\/mi><\/msub><mspace width=\"2em\"><\/mspace><\/mrow><\/mtd><mtd class=\"tml-right\" style=\"padding-left:1em;padding-right:0em;\"><mtext>(Peakst\u00e4rke)<\/mtext><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">\\begin{aligned}\nw_i &amp;= g(i) &#8211; \\theta \\qquad &amp; (\\text{rechte Seite}) \\\\\nw_i &amp;= -g(i) &#8211; \\theta \\qquad &amp; (\\text{linke Seite}) \\\\\nx &amp;= \\frac{\\sum_{i=a}^{b} w_i \\cdot i} {\\sum_{i=a}^{b} w_i} &amp;\\text{(Subpixel-Position)}\\\\\ns &amp;= \\sum_{i=a}^{b} w_i \\qquad &amp;\\text{(Peakst\u00e4rke)}\n\\end{aligned}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p>Der n\u00e4chste Teil beleuchtet die Filterung der Kandidaten.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Teil 1 dieser Serie widmete sich einer robusten Bildauswertung mit wenig Rechenkraft auf Basis vorher bestimmter Kalibrierungswerte. Dieser Teil widmet sich deren [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,15,22],"tags":[42,12],"class_list":["post-954","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-embedded-vision","category-optik","tag-numerik","tag-programmierung"],"_links":{"self":[{"href":"https:\/\/thurow.de\/index.php?rest_route=\/wp\/v2\/posts\/954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thurow.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thurow.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thurow.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thurow.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=954"}],"version-history":[{"count":14,"href":"https:\/\/thurow.de\/index.php?rest_route=\/wp\/v2\/posts\/954\/revisions"}],"predecessor-version":[{"id":977,"href":"https:\/\/thurow.de\/index.php?rest_route=\/wp\/v2\/posts\/954\/revisions\/977"}],"wp:attachment":[{"href":"https:\/\/thurow.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thurow.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thurow.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}