| Operatoren |
find_caltab — Segmentieren der Region einer Standard-Kalibrierplatte mit rechteckiger Markenanordnung im Bild.
find_caltab(Image : CalPlate : CalPlateDescr, SizeGauss, MarkThresh, MinDiamMarks : )
find_caltab bestimmt die Region einer Standard-Kalibrierplatte mit runden Marken im übergebenen Bild Image. Die gesuchte Region muss einer Standard-Kalibrierplatte mit rechteckiger Markenanordnung entsprechen, welche in der Datei CalPlateDescr spezifiziert ist. Die segmentierte Region wird in CalPlate zurückgeliefert. Der Operator bietet zwei Algorithmen an. Wenn man jeweils einen passenden Integerwert im Parameter SizeGauss, MarkThresh und MinDiamMarks übergibt, wird der Standardalgorithmus aufgerufen. Wenn man eine Liste mit Parameternamen und -werten in SizeGauss bzw. MarkThresh übergibt (oder auch nur zwei leere Tupel) wird der erweiterte Algorithmus aufgerufen. In diesem Fall wird der Parameter MinDiamMarks ignoriert.
Zunächst wird das Bild geglättet (vgl. gauss_image). Die Größe der verwendeten Filtermaske wird dabei durch SizeGauss eingestellt. Anschließend wird ein Schwellwertoperator (vgl. threshold) mit minimalem Grauwert MarkThresh angewandt. Unter den extrahierten zusammenhängenden Regionen wird nun eine möglichst konvexe Region mit annähernd korrekter Anzahl von Löchern (entsprechend den dunklen Marken) gesucht. Um Rauschen zu unterdrücken, werden kleine Löcher mit geringerem Durchmesser als die erwartete Markengröße MinDiamMarks zuvor eliminiert. Die Anzahl der Kalibrierkörpermarken wird der Beschreibungsdatei CalPlateDescr des Kalibrierkörpers entnommen. Die komplette Erklärung dieser Datei ist bei der Beschreibung von gen_caltab zu finden.
Zunächst wird eine Bildpyramide von Image erstellt. Beginnend mit der höchsten Pyramidenebene werden runde Regionen anhand eines dynamischen Schwellwerts segmentiert. Anschließend werden sie abhängig von ihrem gegenseitigen Abstand gruppiert. Falls die Anzahl der Kandidaten für die Kalibrierkörpermarken in einer Gruppe die Soll-Anzahl genau erreicht, wird die Suche unterbrochen. Der umschließende helle Bereich wird segmentiert und als Treffer in CalPlate zurückgegeben.
Durch die Bildpyramide ist die Suche unabhängig von der Bild- und Markengröße. Außerdem ist der Algorithmus durch die Regionensegmentierung mithilfe eines dynamischen Schwellwerts robust gegenüber einer schlechten oder ungleichmäßigen Beleuchtung. Deswegen sind in der Regel, anders als bei dem Standardalgorithmus, keine Parameter nötig. Sind dennoch Anpassungen erwünscht, können ausgewählte Parameter in SizeGauss und ihre Werte in MarkThresh gesetzt werden. Derzeit ist der folgende Parameter verfügbar:
Toleranzfaktor für den Abstand zwischen einzelnen Marken. Falls die Marken dichter aneinander erscheinen als erwartet, kann man 'gap_tolerance' < 1.0 setzen, um zu vermeiden, dass Störungsmuster außerhalb der Kalibrierplatte mit der Kalibrierplatte assoziiert werden. Dies ist z.B. dann sinnvoll, wenn die Platte gekippt aufgenommen wird und der Hintergrund Muster aufweist, die den Kalibriermarken ähneln. Wenn die Abstände zwischen einzelnen Marken sehr stark variieren, z.B., wenn die Platte stark perspektivisch verzerrt im Bild erscheint, kann man 'gap_tolerance' > 1.0 setzen und so auch die Gruppierung über größere Distanzen ermöglichen.
Wertevorschläge: 0.75, 0.9, 1.0 (default), 1.1, 1.2, 1.5
Eingabebild.
Ausgaberegion.
Dateiname der Kalibrierkörperbeschreibungsdatei.
Defaultwert: 'caltab.descr'
Werteliste: 'caltab.descr', 'caltab_100mm.descr', 'caltab_10mm.descr', 'caltab_200mm.descr', 'caltab_30mm.descr'
Dateiendung: .descr
Filtergröße.
Defaultwert: 3
Werteliste: 0, 3, 5, 7, 9, 11, 'gap_tolerance'
Schwellwert zur Markenextraktion.
Defaultwert: 112
Wertevorschläge: 48, 64, 80, 96, 112, 128, 144, 160, 0.5, 0.9, 1.0, 1.1, 1.5
Erwarteter Mindestdurchmesser der Kalibrierkörpermarken.
Defaultwert: 5
Wertevorschläge: 3, 5, 9, 15, 30, 50, 70
* Read calibration image. read_image(Image, 'calib/calib_distorted_01') * Find calibration pattern. find_caltab(Image, CalPlate, 'caltab_100mm.descr', 3, 112, 5)
Sind die Parameterwerte korrekt und findet find_caltab eine passende Bildregion, dann liefert find_caltab den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (kein Eingabebild vorhanden) lässt sich mittels set_system(::'no_object_result',<Result>:) und das bei leerer Ergebnisregion mit set_system(::'store_empty_region',<'true'/'false'>:) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
find_marks_and_pose, camera_calibration, disp_caltab, sim_caltab, caltab_points, gen_caltab
Foundation
| Operatoren |