find_caltabfind_caltabFindCaltabFindCaltab (Operator)

Name

find_caltabfind_caltabFindCaltabFindCaltab — Segmentieren der Region einer Standard-Kalibrierplatte mit rechteckiger Markenanordnung im Bild.

Signatur

find_caltab(Image : CalPlate : CalPlateDescr, SizeGauss, MarkThresh, MinDiamMarks : )

Herror find_caltab(const Hobject Image, Hobject* CalPlate, const char* CalPlateDescr, const Hlong SizeGauss, const Hlong MarkThresh, const Hlong MinDiamMarks)

Herror T_find_caltab(const Hobject Image, Hobject* CalPlate, const Htuple CalPlateDescr, const Htuple SizeGauss, const Htuple MarkThresh, const Htuple MinDiamMarks)

void FindCaltab(const HObject& Image, HObject* CalPlate, const HTuple& CalPlateDescr, const HTuple& SizeGauss, const HTuple& MarkThresh, const HTuple& MinDiamMarks)

HRegion HImage::FindCaltab(const HString& CalPlateDescr, const HTuple& SizeGauss, const HTuple& MarkThresh, Hlong MinDiamMarks) const

HRegion HImage::FindCaltab(const HString& CalPlateDescr, Hlong SizeGauss, Hlong MarkThresh, Hlong MinDiamMarks) const

HRegion HImage::FindCaltab(const char* CalPlateDescr, Hlong SizeGauss, Hlong MarkThresh, Hlong MinDiamMarks) const

HRegion HImage::FindCaltab(const wchar_t* CalPlateDescr, Hlong SizeGauss, Hlong MarkThresh, Hlong MinDiamMarks) const   (Nur Windows)

static void HOperatorSet.FindCaltab(HObject image, out HObject calPlate, HTuple calPlateDescr, HTuple sizeGauss, HTuple markThresh, HTuple minDiamMarks)

HRegion HImage.FindCaltab(string calPlateDescr, HTuple sizeGauss, HTuple markThresh, int minDiamMarks)

HRegion HImage.FindCaltab(string calPlateDescr, int sizeGauss, int markThresh, int minDiamMarks)

Beschreibung

find_caltabfind_caltabFindCaltabFindCaltabFindCaltab bestimmt die Region einer Standard-Kalibrierplatte mit runden Marken im übergebenen Bild ImageImageImageImageimage. Die gesuchte Region muss einer Standard-Kalibrierplatte mit rechteckiger Markenanordnung entsprechen, welche in der Datei CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr spezifiziert ist. Die segmentierte Region wird in CalPlateCalPlateCalPlateCalPlatecalPlate zurückgeliefert. Der Operator bietet zwei Algorithmen an. Wenn man jeweils einen passenden Integerwert im Parameter SizeGaussSizeGaussSizeGaussSizeGausssizeGauss, MarkThreshMarkThreshMarkThreshMarkThreshmarkThresh und MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks übergibt, wird der Standardalgorithmus aufgerufen. Wenn man eine Liste mit Parameternamen und -werten in SizeGaussSizeGaussSizeGaussSizeGausssizeGauss bzw. MarkThreshMarkThreshMarkThreshMarkThreshmarkThresh übergibt (oder auch nur zwei leere Tupel) wird der erweiterte Algorithmus aufgerufen. In diesem Fall wird der Parameter MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks ignoriert.

Standardalgorithmus

Zunächst wird das Bild geglättet (vgl. gauss_imagegauss_imageGaussImageGaussImageGaussImage). Die Größe der verwendeten Filtermaske wird dabei durch SizeGaussSizeGaussSizeGaussSizeGausssizeGauss eingestellt. Anschließend wird ein Schwellwertoperator (vgl. thresholdthresholdThresholdThresholdThreshold) mit minimalem Grauwert MarkThreshMarkThreshMarkThreshMarkThreshmarkThresh 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 MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks zuvor eliminiert. Die Anzahl der Kalibrierkörpermarken wird der Beschreibungsdatei CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr des Kalibrierkörpers entnommen. Die komplette Erklärung dieser Datei ist bei der Beschreibung von gen_caltabgen_caltabGenCaltabGenCaltabGenCaltab zu finden.

Erweiterter Algorithmus

Zunächst wird eine Bildpyramide von ImageImageImageImageimage 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 CalPlateCalPlateCalPlateCalPlatecalPlate 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 SizeGaussSizeGaussSizeGaussSizeGausssizeGauss und ihre Werte in MarkThreshMarkThreshMarkThreshMarkThreshmarkThresh gesetzt werden. Derzeit ist der folgende Parameter verfügbar:

'gap_tolerance'"gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance":

Toleranzfaktor für den Abstand zwischen einzelnen Marken. Falls die Marken dichter aneinander erscheinen als erwartet, kann man 'gap_tolerance'"gap_tolerance""gap_tolerance""gap_tolerance""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'"gap_tolerance""gap_tolerance""gap_tolerance""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

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2)

Eingabebild.

CalPlateCalPlateCalPlateCalPlatecalPlate (output_object)  region objectHRegionHRegionHobject *

Ausgaberegion.

CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr (input_control)  filename.read HTupleHTupleHtuple (string) (string) (HString) (char*)

Dateiname der Kalibrierkörperbeschreibungsdatei.

Defaultwert: 'caltab_100.descr' "caltab_100.descr" "caltab_100.descr" "caltab_100.descr" "caltab_100.descr"

Werteliste: 'caltab_100mm.descr'"caltab_100mm.descr""caltab_100mm.descr""caltab_100mm.descr""caltab_100mm.descr", 'caltab_10mm.descr'"caltab_10mm.descr""caltab_10mm.descr""caltab_10mm.descr""caltab_10mm.descr", 'caltab_200mm.descr'"caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr", 'caltab_2500um.descr'"caltab_2500um.descr""caltab_2500um.descr""caltab_2500um.descr""caltab_2500um.descr", 'caltab_30mm.descr'"caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr", 'caltab_650um.descr'"caltab_650um.descr""caltab_650um.descr""caltab_650um.descr""caltab_650um.descr", 'caltab_6mm.descr'"caltab_6mm.descr""caltab_6mm.descr""caltab_6mm.descr""caltab_6mm.descr", 'caltab_800mm.descr'"caltab_800mm.descr""caltab_800mm.descr""caltab_800mm.descr""caltab_800mm.descr", 'caltab_big.descr'"caltab_big.descr""caltab_big.descr""caltab_big.descr""caltab_big.descr", 'caltab_small.descr'"caltab_small.descr""caltab_small.descr""caltab_small.descr""caltab_small.descr"

Dateiendung: .descr

SizeGaussSizeGaussSizeGaussSizeGausssizeGauss (input_control)  integer(-array) HTupleHTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Filtergröße.

Defaultwert: 3

Werteliste: 0, 3, 5, 7, 9, 11, 'gap_tolerance'"gap_tolerance""gap_tolerance""gap_tolerance""gap_tolerance"

MarkThreshMarkThreshMarkThreshMarkThreshmarkThresh (input_control)  integer(-array) HTupleHTupleHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)

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

MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Erwarteter Mindestdurchmesser der Kalibrierkörpermarken.

Defaultwert: 5

Wertevorschläge: 3, 5, 9, 15, 30, 50, 70

Beispiel (HDevelop)

* Read calibration image.
read_image(Image, 'calib/calib_distorted_01')
* Find calibration pattern.
find_caltab(Image, CalPlate, 'caltab_100mm.descr', 3, 112, 5)

Beispiel (HDevelop)

* Read calibration image.
read_image(Image, 'calib/calib_distorted_01')
* Find calibration pattern.
find_caltab(Image, CalPlate, 'caltab_100mm.descr', 3, 112, 5)

Beispiel (HDevelop)

* Read calibration image.
read_image(Image, 'calib/calib_distorted_01')
* Find calibration pattern.
find_caltab(Image, CalPlate, 'caltab_100mm.descr', 3, 112, 5)

Beispiel (HDevelop)

* Read calibration image.
read_image(Image, 'calib/calib_distorted_01')
* Find calibration pattern.
find_caltab(Image, CalPlate, 'caltab_100mm.descr', 3, 112, 5)

Beispiel (HDevelop)

* Read calibration image.
read_image(Image, 'calib/calib_distorted_01')
* Find calibration pattern.
find_caltab(Image, CalPlate, 'caltab_100mm.descr', 3, 112, 5)

Ergebnis

Sind die Parameterwerte korrekt und findet find_caltabfind_caltabFindCaltabFindCaltabFindCaltab eine passende Bildregion, dann liefert find_caltabfind_caltabFindCaltabFindCaltabFindCaltab den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (kein Eingabebild vorhanden) lässt sich mittels set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) und das bei leerer Ergebnisregion mit 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">)SetSystem("store_empty_region",<"true"/"false">) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_imageread_imageReadImageReadImageReadImage

Nachfolger

find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose

Siehe auch

find_marks_and_posefind_marks_and_poseFindMarksAndPoseFindMarksAndPoseFindMarksAndPose, camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibration, disp_caltabdisp_caltabDispCaltabDispCaltabDispCaltab, sim_caltabsim_caltabSimCaltabSimCaltabSimCaltab, caltab_pointscaltab_pointsCaltabPointsCaltabPointsCaltabPoints, gen_caltabgen_caltabGenCaltabGenCaltabGenCaltab

Modul

Foundation