KlassenKlassenKlassenKlassen | | | | Operatoren

find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab (Operator)

Name

find_caltabfind_caltabFindCaltabfind_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)

Herror find_caltab(Hobject Image, Hobject* CalPlate, const HTuple& CalPlateDescr, const HTuple& SizeGauss, const HTuple& MarkThresh, const HTuple& MinDiamMarks)

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

HRegion HImageArray::FindCaltab(const HTuple& CalPlateDescr, const HTuple& SizeGauss, const HTuple& MarkThresh, const HTuple& MinDiamMarks) const

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

void HOperatorSetX.FindCaltab(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*CalPlate, [in] VARIANT CalPlateDescr, [in] VARIANT SizeGauss, [in] VARIANT MarkThresh, [in] VARIANT MinDiamMarks)

IHRegionX* HImageX.FindCaltab(
[in] BSTR CalPlateDescr, [in] VARIANT SizeGauss, [in] VARIANT MarkThresh, [in] Hlong MinDiamMarks)

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_caltabFindCaltabfind_caltabFindCaltabFindCaltab bestimmt die Region einer Standard-Kalibrierplatte mit runden Marken im übergebenen Bild ImageImageImageImageImageimage. Die gesuchte Region muss einer Standard-Kalibrierplatte mit rechteckiger Markenanordnung entsprechen, welche in der Datei CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr spezifiziert ist. Die segmentierte Region wird in CalPlateCalPlateCalPlateCalPlateCalPlatecalPlate zurückgeliefert. Der Operator bietet zwei Algorithmen an. Wenn man jeweils einen passenden Integerwert im Parameter SizeGaussSizeGaussSizeGaussSizeGaussSizeGausssizeGauss, MarkThreshMarkThreshMarkThreshMarkThreshMarkThreshmarkThresh und MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks übergibt, wird der Standardalgorithmus aufgerufen. Wenn man eine Liste mit Parameternamen und -werten in SizeGaussSizeGaussSizeGaussSizeGaussSizeGausssizeGauss bzw. MarkThreshMarkThreshMarkThreshMarkThreshMarkThreshmarkThresh übergibt (oder auch nur zwei leere Tupel) wird der erweiterte Algorithmus aufgerufen. In diesem Fall wird der Parameter MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks ignoriert.

Standardalgorithmus

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

Erweiterter Algorithmus

Zunächst wird eine Bildpyramide von ImageImageImageImageImageimage 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 CalPlateCalPlateCalPlateCalPlateCalPlatecalPlate 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 SizeGaussSizeGaussSizeGaussSizeGaussSizeGausssizeGauss und ihre Werte in MarkThreshMarkThreshMarkThreshMarkThreshMarkThreshmarkThresh gesetzt werden. Derzeit ist der folgende Parameter verfügbar:

'gap_tolerance'"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""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""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

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHImageHImageXHobject (byte / uint2)

Eingabebild.

CalPlateCalPlateCalPlateCalPlateCalPlatecalPlate (output_object)  region objectHRegionHRegionHRegionHRegionXHobject *

Ausgaberegion.

CalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrCalPlateDescrcalPlateDescr (input_control)  filename.read HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Dateiname der Kalibrierkörperbeschreibungsdatei.

Defaultwert: 'caltab.descr' "caltab.descr" "caltab.descr" "caltab.descr" "caltab.descr" "caltab.descr"

Werteliste: 'caltab.descr'"caltab.descr""caltab.descr""caltab.descr""caltab.descr""caltab.descr", 'caltab_100mm.descr'"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_10mm.descr", 'caltab_200mm.descr'"caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr""caltab_200mm.descr", 'caltab_30mm.descr'"caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr""caltab_30mm.descr"

Dateiendung: .descr

SizeGaussSizeGaussSizeGaussSizeGaussSizeGausssizeGauss (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*) (Hlong / BSTR) (Hlong / char*)

Filtergröße.

Defaultwert: 3

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

MarkThreshMarkThreshMarkThreshMarkThreshMarkThreshmarkThresh (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double) (Hlong / double) (Hlong / double)

Schwellwert zur Markenextraktion.

Defaultwert: 112

Werteliste: 48, 64, 80, 96, 112, 128, 144, 160, 0.5, 0.9, 1.0, 1.1, 1.5

MinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksMinDiamMarksminDiamMarks (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Erwarteter Mindestdurchmesser der Kalibrierkörpermarken.

Defaultwert: 5

Werteliste: 3, 5, 9, 15, 30, 50, 70

Beispiel (HDevelop)

* read calibration image
read_image(Image, 'calib-01')
* find calibration pattern
find_caltab(Image, CalPlate, 'caltab.descr', 3, 112, 5)

Beispiel (HDevelop)

* read calibration image
read_image(Image, 'calib-01')
* find calibration pattern
find_caltab(Image, CalPlate, 'caltab.descr', 3, 112, 5)

Beispiel (HDevelop)

* read calibration image
read_image(Image, 'calib-01')
* find calibration pattern
find_caltab(Image, CalPlate, 'caltab.descr', 3, 112, 5)

Beispiel (C++ (HALCON 5.0-10.0))

// read calibration image
HImage Image("calib-01") ;
// find calibration pattern
HRegion CalPlate = Image.FindCaltab("caltab.descr", 3,112, 5);

Beispiel (HDevelop)

* read calibration image
read_image(Image, 'calib-01')
* find calibration pattern
find_caltab(Image, CalPlate, 'caltab.descr', 3, 112, 5)

Beispiel (HDevelop)

* read calibration image
read_image(Image, 'calib-01')
* find calibration pattern
find_caltab(Image, CalPlate, 'caltab.descr', 3, 112, 5)

Ergebnis

Sind die Parameterwerte korrekt und findet find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab eine passende Bildregion, dann liefert find_caltabfind_caltabFindCaltabfind_caltabFindCaltabFindCaltab 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>)set_system("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">)set_system("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_imageReadImageread_imageReadImageReadImage

Nachfolger

find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose

Siehe auch

find_marks_and_posefind_marks_and_poseFindMarksAndPosefind_marks_and_poseFindMarksAndPoseFindMarksAndPose, camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration, disp_caltabdisp_caltabDispCaltabdisp_caltabDispCaltabDispCaltab, sim_caltabsim_caltabSimCaltabsim_caltabSimCaltabSimCaltab, caltab_pointscaltab_pointsCaltabPointscaltab_pointsCaltabPointsCaltabPoints, gen_caltabgen_caltabGenCaltabgen_caltabGenCaltabGenCaltab

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren