find_shape_modelT_find_shape_modelFindShapeModelFindShapeModel (Operator)

Name

find_shape_modelT_find_shape_modelFindShapeModelFindShapeModel — Suche der besten Matches eines Formmodells in einem Bild.

Signatur

find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)

Herror T_find_shape_model(const Hobject Image, const Htuple ModelID, const Htuple AngleStart, const Htuple AngleExtent, const Htuple MinScore, const Htuple NumMatches, const Htuple MaxOverlap, const Htuple SubPixel, const Htuple NumLevels, const Htuple Greediness, Htuple* Row, Htuple* Column, Htuple* Angle, Htuple* Score)

void FindShapeModel(const HObject& Image, const HTuple& ModelID, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, const HTuple& Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score)

void HShapeModel::FindShapeModel(const HImage& Image, double AngleStart, double AngleExtent, const HTuple& MinScore, Hlong NumMatches, double MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const

void HShapeModel::FindShapeModel(const HImage& Image, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& SubPixel, Hlong NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const

void HShapeModel::FindShapeModel(const HImage& Image, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const char* SubPixel, Hlong NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const

void HShapeModel::FindShapeModel(const HImage& Image, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const wchar_t* SubPixel, Hlong NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const   (Nur Windows)

void HImage::FindShapeModel(const HShapeModel& ModelID, double AngleStart, double AngleExtent, const HTuple& MinScore, Hlong NumMatches, double MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const

void HImage::FindShapeModel(const HShapeModel& ModelID, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& SubPixel, Hlong NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const

void HImage::FindShapeModel(const HShapeModel& ModelID, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const char* SubPixel, Hlong NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const

void HImage::FindShapeModel(const HShapeModel& ModelID, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const wchar_t* SubPixel, Hlong NumLevels, double Greediness, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score) const   (Nur Windows)

static void HOperatorSet.FindShapeModel(HObject image, HTuple modelID, HTuple angleStart, HTuple angleExtent, HTuple minScore, HTuple numMatches, HTuple maxOverlap, HTuple subPixel, HTuple numLevels, HTuple greediness, out HTuple row, out HTuple column, out HTuple angle, out HTuple score)

void HShapeModel.FindShapeModel(HImage image, double angleStart, double angleExtent, HTuple minScore, int numMatches, double maxOverlap, HTuple subPixel, HTuple numLevels, double greediness, out HTuple row, out HTuple column, out HTuple angle, out HTuple score)

void HShapeModel.FindShapeModel(HImage image, double angleStart, double angleExtent, double minScore, int numMatches, double maxOverlap, string subPixel, int numLevels, double greediness, out HTuple row, out HTuple column, out HTuple angle, out HTuple score)

void HImage.FindShapeModel(HShapeModel modelID, double angleStart, double angleExtent, HTuple minScore, int numMatches, double maxOverlap, HTuple subPixel, HTuple numLevels, double greediness, out HTuple row, out HTuple column, out HTuple angle, out HTuple score)

void HImage.FindShapeModel(HShapeModel modelID, double angleStart, double angleExtent, double minScore, int numMatches, double maxOverlap, string subPixel, int numLevels, double greediness, out HTuple row, out HTuple column, out HTuple angle, out HTuple score)

Beschreibung

find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel findet die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen des Formmodells ModelIDModelIDModelIDModelIDmodelID im Eingabebild ImageImageImageImageimage. Das Modell muss zuvor mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel erzeugt oder mit read_shape_modelread_shape_modelReadShapeModelReadShapeModelReadShapeModel eingelesen worden sein.

Die Position und Rotation der gefundenen Instanzen des Modells wird in RowRowRowRowrow, ColumnColumnColumnColumncolumn und AngleAngleAngleAngleangle zurückgeliefert. In ScoreScoreScoreScorescore wird die Bewertung der gefundenen Instanzen zurückgegeben. Nähere Informationen finden Sie in den parameterspezifischen Abschnitten.

Eingabeparameter im Detail

Eingabebild und seine Region:

Der Definitionsbereich des Bildes ImageImageImageImageimage gibt den Suchbereich für den Referenzpunkt des Modells an, d.h. für den Schwerpunkt der Region des Bildes, das zur Erzeugung des Formmodells mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel verwendet wurde. Ein eventuell mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin anders gesetzter Ursprung wird nicht berücksichtigt. Im Normalfall wird das Modell innerhalb des Definitionsbereiches des Eingabebildes nur an den Stellen gesucht, an denen das Modell vollständig in das Bild passt. Das bedeutet, dass das Modell nicht gefunden werden kann, wenn es aus dem Bild herausragt, selbst wenn es eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScore erreichen würde (siehe unten). Außerdem kann es sein, dass das Modell, wenn es in einer der Pyramidenebenen den Bildrand berührt, ebenfalls nicht gefunden wird, auch wenn es im ursprünglichen Bild vollständig enthalten ist. Als Daumenregel gilt hier, dass das Modell dann nicht gefunden werden könnte, wenn seine Distanz zum Bildrand unter fällt. Dieses Verhalten kann mit set_system('border_shape_models','true')set_system("border_shape_models","true")SetSystem("border_shape_models","true")SetSystem("border_shape_models","true")SetSystem("border_shape_models","true") für alle Modelle oder mit set_shape_model_param(ModelID, 'border_shape_models','true')set_shape_model_param(ModelID, "border_shape_models","true")SetShapeModelParam(ModelID, "border_shape_models","true")SetShapeModelParam(ModelID, "border_shape_models","true")SetShapeModelParam(ModelID, "border_shape_models","true") speziell für ein Modell umgestellt werden, so dass auch Modelle gefunden werden, die aus dem Bild herausragen, falls sie eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScore erreichen. Dabei werden Punkte außerhalb des Bildes als verdeckt angesehen, d.h. sie verringern die Bewertung. Es ist zu beachten, dass dieser Modus die Laufzeit der Suche erhöht. Es ist weiter zu beachten, dass in seltenen Fällen, die typischerweise nur in künstlichen Bildern auftreten, auch dann kein Modell gefunden wird, wenn das Modell in einer Pyramidenebene die reduzierte Bilddomäne berührt. In diesem Fall kann es helfen, die Region der Domäne um , z.B., mit dilation_circledilation_circleDilationCircleDilationCircleDilationCircle zu vergrößern.

AngleStart und AngleExtent:

Die Parameter AngleStartAngleStartAngleStartAngleStartangleStart und AngleExtentAngleExtentAngleExtentAngleExtentangleExtent legen den Winkelbereich fest, in dem nach dem Modell gesucht wird. Der Winkelbereich wird gegebenenfalls auf den Bereich beschnitten, der bei der Erzeugung des Modells mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel angegeben worden ist. Dies bedeutet insbesondere, dass die Winkelbereiche des Modells und der Suche sich überlappen müssen.

Beachten Sie, dass in einigen Fällen Instanzen mit einer Rotation gefunden werden, die geringfügig außerhalb des angegebenen Bereichs liegen. Dies kann vorkommen, wenn der angegebene Bereich kleiner ist als der bei der Erstellung des Modells angegebene Bereich. AngleStartAngleStartAngleStartAngleStartangleStart und AngleExtentAngleExtentAngleExtentAngleExtentangleExtent werden nur auf der höchsten Pyramidenstufe überprüft. Matches, die auf der höchsten Pyramidenstufe gefunden werden, werden bis zur untersten Pyramidenstufe verfeinert. Aus Leistungsgründen wird bei der Verfeinerung jedoch nicht mehr überprüft, ob die Matches immer noch innerhalb des angegebenen Bereichs liegen.

MinScore:

Der Parameter MinScoreMinScoreMinScoreMinScoreminScore legt fest, welche Bewertung ein potentieller Match mindestens besitzen muss, damit er als eine Instanz des Modells im Bild angesehen wird. Je größer der Wert von MinScoreMinScoreMinScoreMinScoreminScore gewählt werden kann, desto schneller verläuft die Suche. Falls erwartet werden kann, dass das Modell niemals verdeckt wird, kann MinScoreMinScoreMinScoreMinScoreminScore auf so hohe Werte wie 0.8 oder sogar 0.9 gesetzt werden. Werden die Matches nicht bis zur untersten Pyramidenebene verfolgt (siehe unten), kann es in manchen Fällen vorkommen, dass Instanzen gefunden werden, deren Score geringfügig unter dem Wert von MinScoreMinScoreMinScoreMinScoreminScore liegen.

Falls das Formmodell mit set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutter um Störparameter erweitert wurde und dadurch 'use_clutter'"use_clutter""use_clutter""use_clutter""use_clutter" aktiviert wurde, erwartet MinScoreMinScoreMinScoreMinScoreminScore einen zweiten Wert, welcher den maximalen Störwert eines potentiellen Matches angibt, um als Instanz des Modells im Bild betrachtet werden zu können. Die Laufzeit mit Nutzung von Störparametern ist mindestens so hoch wie die Laufzeit ohne Störparameter mit auf 0 gesetztem Parameter NumMatchesNumMatchesNumMatchesNumMatchesnumMatches.

NumMatches:

Mit NumMatchesNumMatchesNumMatchesNumMatchesnumMatches kann angegeben werden, wie viele Instanzen des Modells im Bild höchstens gefunden werden sollen. Falls mehr als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScore erreichen, werden nur die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen zurückgeliefert. Falls weniger als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen gefunden werden, werden nur diese Instanzen zurückgeliefert, d.h. der Parameter MinScoreMinScoreMinScoreMinScoreminScore hat Vorrang vor NumMatchesNumMatchesNumMatchesNumMatchesnumMatches. Sollen alle Modellinstanzen, deren Bewertung MinScoreMinScoreMinScoreMinScoreminScore übersteigt, im Bild gefunden werden, muss NumMatchesNumMatchesNumMatchesNumMatchesnumMatches auf 0 gesetzt werden.

Beim Tracken der Matches durch die Bildpyramide werden auf jeder Ebene Matches verworfen, die wenig vielversprechend sind. Dadurch ist es möglich, dass Matches verworfen werden, die auf der niedrigsten Pyramidenebene einen höheren Score gehabt hätten. Beispielsweise kann das dazu führen, dass der gefundene Match für NumMatchesNumMatchesNumMatchesNumMatchesnumMatches gleich 1 nicht mit dem Match mit dem höchsten Score übereinstimmt, der von NumMatchesNumMatchesNumMatchesNumMatchesnumMatches gleich 0 oder > 1 zurückgegeben wird.

Falls erwartet wird, dass mehrere Objekte mit einem ähnlichen Score gefunden werden können, aber nur das Modell mit dem höchsten Score zurückgegeben werden soll, kann es vorteilhaft sein, NumMatchesNumMatchesNumMatchesNumMatchesnumMatches zu erhöhen, und dann den Match mit dem höchsten Score auszuwählen.

Für den Fall, dass das Formmodell mit set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutter um Störparameter erweitert wurde, berücksichtigt NumMatchesNumMatchesNumMatchesNumMatchesnumMatches auch den zweiten Wert, der in MinScoreMinScoreMinScoreMinScoreminScore übergeben wird. Gefundene Instanzen weisen in diesem Fall einen Score auf, der größer als der erste Eintrag ist, sowie einen Störwert der niedriger als der zweite Eintrag ist. Ist die Anzahl gefundener Instanzen größer als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches, werden die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen in Bezug auf ihren Störwert zurückgegeben. MinScoreMinScoreMinScoreMinScoreminScore hat weiterhin Vorrang vor NumMatchesNumMatchesNumMatchesNumMatchesnumMatches und NumMatchesNumMatchesNumMatchesNumMatchesnumMatches muss weiterhin auf 0 gesetzt werden um alle Modellinstanzen zu erhalten, die die Bedingungen von MinScoreMinScoreMinScoreMinScoreminScore erfüllen. Es ist zu beachten, dass beim Tracken der Matches durch die Bildpyramide keine Matches verworfen werden, wenn Störparameter verwendet werden. Die Laufzeit mit Nutzung von Störparametern ist daher mindestens so hoch wie die Laufzeit ohne Störparameter mit auf 0 gesetztem Parameter NumMatchesNumMatchesNumMatchesNumMatchesnumMatches.

MaxOverlap:

Falls das Modell Symmetrien aufweist, kann es vorkommen, dass mehrere Instanzen an ähnlichen Positionen im Bild, aber mit verschiedenen Rotationen gefunden werden. Mit dem Parameter MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap kann bestimmt werden, um welchen Anteil, ausgedrückt als Zahl zwischen 0 und 1, sich zwei Instanzen höchstens überlappen dürfen, damit sie als verschieden angesehen werden, und somit zurückgeliefert werden. Falls sich zwei Instanzen um mehr als MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap überlappen, wird nur die beste gefundene Instanz zurückgeliefert. Die Berechnung der Überlappung erfolgt anhand der kleinsten umschließenden Rechtecke beliebiger Orientierung der Konturen (siehe smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2). Bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap=0 dürfen sich die gefundenen Instanzen nicht überlappen, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap=1 werden alle gefundenen Instanzen zurückgeliefert.

SubPixel:

Der Parameter SubPixelSubPixelSubPixelSubPixelsubPixel gibt an, ob die Extraktion subpixelgenau erfolgen soll. Falls SubPixelSubPixelSubPixelSubPixelsubPixel auf 'none'"none""none""none""none" (oder 'false'"false""false""false""false" für Rückwärtskompatibilität) gesetzt wird, wird die Lage des Modells nur pixelgenau bzw. mit der bei create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel angegebenen Winkelauflösung bestimmt. Falls SubPixelSubPixelSubPixelSubPixelsubPixel auf 'interpolation'"interpolation""interpolation""interpolation""interpolation" (oder 'true'"true""true""true""true") gesetzt wird, werden sowohl die Position als auch die Rotation subpixelgenau bestimmt. Dabei wird die Lage des Modells anhand der Score-Funktion interpoliert. Dieser Modus kostet fast keine Rechenzeit und liefert in den meisten Anwendungen eine ausreichende Genauigkeit. In manchen Anwendungen ist eine möglichst hohe Genauigkeit wichtig. In diesen Fällen kann die Lage des Modells durch Ausgleichsrechnung, d.h., durch Minimierung der Abstände der Modellpunkte und der zugehörigen Bildpunkte (Least-Squares Adjustment), bestimmt werden. Im Gegensatz zu 'interpolation'"interpolation""interpolation""interpolation""interpolation" kostet dieser Modus zusätzliche Rechenzeit. Mit den verschiedenen Modi ('least_squares'"least_squares""least_squares""least_squares""least_squares", 'least_squares_high'"least_squares_high""least_squares_high""least_squares_high""least_squares_high" und 'least_squares_very_high'"least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high") kann dabei die Genauigkeit festgelegt werden, mit der der minimale Abstand gesucht wird. Je höher die Genauigkeit gewählt wird, desto länger dauert allerdings auch die Subpixel-Extraktion. Im Normalfall sollte für SubPixelSubPixelSubPixelSubPixelsubPixel 'interpolation'"interpolation""interpolation""interpolation""interpolation" gewählt werden. Falls die Ausgleichsrechnung gewünscht wird, sollte 'least_squares'"least_squares""least_squares""least_squares""least_squares" gewählt werden, da sich so der optimale Kompromiss zwischen Laufzeit und Genauigkeit ergibt.

Objekte, die im Vergleich zum Modell leicht deformiert im Bild erscheinen, können in manchen Fällen entweder nicht oder nur mit einer geringen Genauigkeit gefunden werden. Für solche Objekte besteht die Möglichkeit, im Parameter SubPixelSubPixelSubPixelSubPixelsubPixel zusätzlich die maximal zulässige Objektdeformation in Pixeln anzugeben. Dies kann mit Hilfe des optionalen Parameterwertes 'max_deformation '"max_deformation ""max_deformation ""max_deformation ""max_deformation " und einer nachfolgenden Ganzzahl zwischen 0 und 32 (im selben String), die die maximale Deformation beschreibt, erfolgen. Kann die Form des Objektes z.B. bis zu 2 Pixel von der im Modell gespeicherten Form abweichen, muss im Parameter SubPixelSubPixelSubPixelSubPixelsubPixel der Wert 'max_deformation 2'"max_deformation 2""max_deformation 2""max_deformation 2""max_deformation 2" zusätzlich zum oben beschriebenen Modus für die subpixelgenaue Extraktion übergeben werden, also z.B. ['least_squares', 'max_deformation 2']["least_squares", "max_deformation 2"]["least_squares", "max_deformation 2"]["least_squares", "max_deformation 2"]["least_squares", "max_deformation 2"]. Mit 'max_deformation 0'"max_deformation 0""max_deformation 0""max_deformation 0""max_deformation 0" wird das Objekt ohne Deformationen gesucht, also so als ob man kein 'max_deformation '"max_deformation ""max_deformation ""max_deformation ""max_deformation " übergeben hätte. Zu beachten ist, dass größere Werte für die maximale Deformation oft zu erhöhten Laufzeiten führen. Außerdem besteht bei einem zu großen Wert die Gefahr, dass falsche Kandidaten gefunden werden. Beide Probleme können hauptsächlich bei kleinen Objekten oder Objekten mit feinen Strukturen auftreten. Der Grund hierfür ist, dass solche Objekte durch große erlaubte Deformationen ihre für die Suche wichtige charakteristische Form verlieren. Zu beachten ist auch, dass die Genauigkeit von teilweise verdeckten Objekten für höhere Deformationen abnehmen kann wenn Störobjekte in der Nähe des Objektes vorhanden sind. Die maximale Deformation sollte demnach immer nur so groß wie nötig und so gering wie möglich gewählt werden. Näherungsweise rotationssymmetrische Objekt könnten nicht gefunden werden, falls 'max_deformation'"max_deformation""max_deformation""max_deformation""max_deformation" und AngleExtentAngleExtentAngleExtentAngleExtentangleExtent beide auf einen Wert größer 0 gesetzt sind. In dem Fall kann es zu Mehrdeutigkeiten kommen, die nicht aufgelöst werden können, sodass der Match als falsch verworfen wird. Wenn das passiert, versuchen Sie, entweder 'max_deformation'"max_deformation""max_deformation""max_deformation""max_deformation" oder AngleExtentAngleExtentAngleExtentAngleExtentangleExtent auf 0 zu setzen oder das Modell so zu verändern, dass weniger Symmetrien auftreten. Die Score-Berechnung bei Deformationswerten größer 0 hängt von der Art der Subpixel-Extraktion ab. In den meisten Fällen wird sich der Score eines Matches verändern, wenn man 'least_squares'"least_squares""least_squares""least_squares""least_squares", 'least_squares_high'"least_squares_high""least_squares_high""least_squares_high""least_squares_high" oder 'least_squares_very_high'"least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high" (siehe oben) wählt (im Vergleich zu 'none'"none""none""none""none" oder 'interpolation'"interpolation""interpolation""interpolation""interpolation"). Außerdem wird sich der Score in der Regel erhöhen wenn man bei einer der Least-Squares-Adjustment-Methoden die maximale Deformation erhöht, da dann zu den Modellpunkten mehr zugehörige Bildpunkte gefunden werden können. Für einen aussagekräftigen Score und zum Vermeiden falscher Matches wird empfohlen, das Erlauben einer Deformation mit einer Subpixel-Extraktion mit einer der Least-Squares-Adjustment-Methoden zu kombinieren.

NumLevels:

Mit NumLevelsNumLevelsNumLevelsNumLevelsnumLevels wird die Anzahl der Pyramidenebenen festgelegt, die bei der Suche verwendet werden soll. Die Anzahl der Ebenen wird gegebenenfalls auf den bei der Erzeugung mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel angegebenen Bereich beschnitten. Falls NumLevelsNumLevelsNumLevelsNumLevelsnumLevels als 0 angegeben wird, wird die mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel angegebene Anzahl verwendet.

In manchen Fällen kann es sein, dass die Anzahl der Pyramidenebenen, die beispielsweise automatisch mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel ermittelt wurde, zu hoch ist. Dann werden eventuell Instanzen, die eine sehr hohe finale Bewertung gehabt hätten, bereits auf der höchsten Pyramidenebene ausgeschlossen und damit nicht gefunden. Anstatt nun MinScoreMinScoreMinScoreMinScoreminScore auf einen sehr geringen Wert zu setzen, um alle Matches zu finden, kann der Wert von NumLevelsNumLevelsNumLevelsNumLevelsnumLevels mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams ermittelt werden und dann ein etwas geringerer Wert in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel genutzt werden. Diese Herangehensweise führt oft zu besseren Ergebnissen hinsichtlich Geschwindigkeit und Robustheit.

Optional kann NumLevelsNumLevelsNumLevelsNumLevelsnumLevels einen zweiten Wert enthalten, der die unterste Pyramidenebene spezifiziert, bis auf welche die Matches verfolgt werden sollen. Ein Wert von [4,2] bedeutet also, dass das Matching auf der vierten Pyramidenebene begonnen wird und auf der zweituntersten Pyramidenebene beendet wird (die unterste Pyramidenebene hat den Wert 1). Dieser Mechanismus kann dazu verwendet werden, Laufzeit einzusparen. Allerdings ist in diesem Modus im allgemeinen die Genauigkeit der gefundenen Lageparameter geringer als im Normalfall, in dem die Matches bis auf die unterste Pyramidenebene verfolgt werden. Falls eine hohe Genauigkeit erzielt werden soll, empfiehlt es sich also, mindestens 'least_squares'"least_squares""least_squares""least_squares""least_squares" für SubPixelSubPixelSubPixelSubPixelsubPixel zu verwenden. Falls die unterste zu verwendende Pyramidenebene zu groß gewählt wird, kann es vorkommen, dass die gewünschte Genauigkeit nicht mehr erreicht werden kann, oder dass falsche Instanzen des Modells gefunden werden, weil das Modell auf den oberen Pyramidenstufen nicht eindeutig genug ist, um eine sichere Selektion der korrekten Instanz des Modells zu ermöglichen. In diesem Fall muss ein kleinerer Wert für die unterste zu verwendende Pyramidenebene gewählt werden.

In mangelhaften Eingabebildern, d.h., in Bildern die z.B. unscharf, deformiert oder verrauscht sind, kann auf der untersten Pyramidenebene oft keine Instanz des Formmodells gefunden werden, da aufgrund der mangelhaften Bildqualität nicht genügend Kanteninformation vorhanden ist, oder die Kanten zu stark deformiert sind. Auf höheren Pyramidenebenen dagegen kann die Kanteninformation noch ausreichend sein um Instanzen des Modells zu finden, wobei auch hierbei die oben beschriebenen Einschränkungen bezüglich Genauigkeit und Robustheit gelten. Die Wahl der passenden Pyramidenebene, d.h., der untersten Pyramidenebene auf der noch eine Instanz des Modells gefunden wird, hängt sowohl vom Modell als auch vom Eingabebild ab. Diese Pyramidenebene kann also von Bild zu Bild variieren. Um das Matching auf mangelhaften Bildern zu erleichtern, kann die unterste Pyramidenebene, auf der noch eine Instanz des Modells gefunden wird, während des Matchings automatisch bestimmt werden. Um diesen als 'increased tolerance mode' bezeichneten Mechanismus zu aktivieren, muss die unterste Pyramidenebene in NumLevelsNumLevelsNumLevelsNumLevelsnumLevels negativ angegeben werden. Wird z.B. NumLevelsNumLevelsNumLevelsNumLevelsnumLevels = [4,-2] gesetzt, so wird das Matching auf der vierten Pyramidenebene begonnen und auf der zweituntersten Pyramidenebene beendet. Es wird also versucht, eine Instanz des Formmodells auf der Pyramidenebene 2 zu finden. Kann auf dieser Pyramidenebene keine Instanz gefunden werden, so wird die unterste Pyramidenebene ermittelt, auf der noch Instanzen des Modells gefunden wurden. Die Instanzen dieser Pyramidenebene werden dann als Ergebnis zurückgegeben.

Greediness:

Der Parameter GreedinessGreedinessGreedinessGreedinessgreediness bestimmt, wie „gierig“ die Suche durchgeführt werden soll. Für GreedinessGreedinessGreedinessGreedinessgreediness=0 wird eine sichere Suchheuristik verwendet, die das Modell, falls im Bild vorhanden, immer findet, wenn die anderen Parameter passend gesetzt sind. Allerdings ist die Suche hiermit relativ zeitaufwendig. Für GreedinessGreedinessGreedinessGreedinessgreediness=1 wird eine unsicherere Suchheuristik verwendet, bei der es in seltenen Fällen vorkommen kann, dass das Modell nicht gefunden wird, obwohl es im Bild sichtbar ist. Für GreedinessGreedinessGreedinessGreedinessgreediness=1 wird die maximale Suchgeschwindigkeit erreicht. In den allermeisten Fällen wird das Formmodell für GreedinessGreedinessGreedinessGreedinessgreediness=0.9 immer sicher gefunden.

Ausgabeparameter im Detail

Row, Column und Angle:

Die Position und Rotation der gefundenen Instanzen des Modells wird in RowRowRowRowrow, ColumnColumnColumnColumncolumn und AngleAngleAngleAngleangle zurückgeliefert. Die Koordinaten RowRowRowRowrow und ColumnColumnColumnColumncolumn beschreiben die Position des Ursprungs des Modells im Suchbild. Die Werte sind allerdings bereits geringfügig angepasst, so dass sie direkt zur Erstellung einer Transformationsmatrix verwendet werden können, die für ein Alignment oder die Visualisierung der Modellkanten benötigt wird. Diese Anpassung der Koordinaten hat mit der Art und Weise zu tun, in der HALCON ikonische Objekte transformiert, siehe hierzu affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixel. Das Beispiel weiter unten zeigt, wie die Transformationsmatrix erzeugt wird und wie man damit das Modell an der gefundenen Position im Suchbild visualisiert und die exakten Koordinaten berechnet.

Normalerweise ist der Ursprung des Modells der Schwerpunkt der Region des Bildes, das zur Erzeugung des Formmodells mit create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel verwendet wurde. Ein anderer Ursprung kann mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin festgelegt werden.

Score:

In ScoreScoreScoreScorescore wird die Bewertung der gefundenen Instanzen zurückgegeben. Die Bewertung ist eine Zahl zwischen 0 und 1 und ist ein ungefähres Maß dafür, welcher Anteil des Modells im Bild zu sehen ist. Falls z.B. die Hälfte des Modells im Bild verdeckt ist, kann die Bewertung nicht größer als 0.5 sein.

Falls das Formmodell mit set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutter um Störparameter erweitert wurde, gibt ScoreScoreScoreScorescore, nach den oben genannten Werten, auch den Störwert jeder gefundenen Instanz zurück. Falls beispielsweise die Hälfte der Störregion Störkanten aufweist entspricht der Störwert 0.5. Werden z.B. zwei Instanzen gefunden, wobei für Erstere eine Bewertung von 0.9 und für die zweite 0.8 erreicht wird und der Störwert der ersten Instanz 0.2, der zweiten Instanz 0.1 ist, wird ScoreScoreScoreScorescore = [0.9,0.8,0.2,0.1] zurückgegeben. Es ist zu beachten, dass von sämtlichen Ergebnissen des formbasierten Matchings die Störwerte am stärksten von Beleuchtungsänderungen beeinflusst werden.

Setzen eines Timeout

Mittels des Operators set_shape_model_paramset_shape_model_paramSetShapeModelParamSetShapeModelParamSetShapeModelParam können Sie einen 'timeout'"timeout""timeout""timeout""timeout" für find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel angeben. Wenn find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel diesen 'timeout'"timeout""timeout""timeout""timeout" erreicht endet er ohne Ergebnis und gibt den Fehlercode 9400 (H_ERR_TIMEOUT) zurück.

Darstellung der Resultate

Die Verwendung der Prozedur dev_display_shape_matching_results wird zur Darstellung der Resultate formbasierten Matchings stark empfohlen.

Weitere Informationen

Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.

Ausführungsinformationen

Dieser Operator unterstützt Cancel-Timeouts und Interrupts.

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image objectHImageHImageHobject (byte / uint2)

Eingabebild, in dem das Modell gefunden werden soll.

ModelIDModelIDModelIDModelIDmodelID (input_control)  shape_model HShapeModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells.

AngleStartAngleStartAngleStartAngleStartangleStart (input_control)  angle.rad HTupleHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Rotation des Modells.

Defaultwert: -0.39

Wertevorschläge: -3.14, -1.57, -0.79, -0.39, -0.20, 0.0

AngleExtentAngleExtentAngleExtentAngleExtentangleExtent (input_control)  angle.rad HTupleHTupleHtuple (real) (double) (double) (double)

Ausdehnung des Winkelbereichs.

Defaultwert: 0.79

Wertevorschläge: 6.29, 3.14, 1.57, 0.79, 0.39, 0.0

Restriktion: AngleExtent >= 0

MinScoreMinScoreMinScoreMinScoreminScore (input_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen des Modells.

Defaultwert: 0.5

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

Typischer Wertebereich: 0 ≤ MinScore MinScore MinScore MinScore minScore ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

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

Anzahl der zu findenden Instanzen des Modells (oder 0 für alle Treffer).

Defaultwert: 1

Wertevorschläge: 0, 1, 2, 3, 4, 5, 10, 20

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Maximale Überlappung der zu findenden Instanzen des Modells.

Defaultwert: 0.5

Wertevorschläge: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Typischer Wertebereich: 0 ≤ MaxOverlap MaxOverlap MaxOverlap MaxOverlap maxOverlap ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

SubPixelSubPixelSubPixelSubPixelsubPixel (input_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Subpixelgenauigkeit falls ungleich 'none'"none""none""none""none".

Defaultwert: 'least_squares' "least_squares" "least_squares" "least_squares" "least_squares"

Wertevorschläge: 'none'"none""none""none""none", 'interpolation'"interpolation""interpolation""interpolation""interpolation", 'least_squares'"least_squares""least_squares""least_squares""least_squares", 'least_squares_high'"least_squares_high""least_squares_high""least_squares_high""least_squares_high", 'least_squares_very_high'"least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high", 'max_deformation 1'"max_deformation 1""max_deformation 1""max_deformation 1""max_deformation 1", 'max_deformation 2'"max_deformation 2""max_deformation 2""max_deformation 2""max_deformation 2", 'max_deformation 3'"max_deformation 3""max_deformation 3""max_deformation 3""max_deformation 3", 'max_deformation 4'"max_deformation 4""max_deformation 4""max_deformation 4""max_deformation 4", 'max_deformation 5'"max_deformation 5""max_deformation 5""max_deformation 5""max_deformation 5", 'max_deformation 6'"max_deformation 6""max_deformation 6""max_deformation 6""max_deformation 6"

NumLevelsNumLevelsNumLevelsNumLevelsnumLevels (input_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der verwendeten Pyramidenebenen (und unterste zu verwendende Pyramidenebene falls |NumLevelsNumLevelsNumLevelsNumLevelsnumLevels| = 2).

Defaultwert: 0

Werteliste: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

GreedinessGreedinessGreedinessGreedinessgreediness (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

„Gierigkeit“ der Suchheuristik (0: sicher aber langsam; 1: schnell aber Matches können „übersehen“ werden).

Defaultwert: 0.9

Wertevorschläge: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Typischer Wertebereich: 0 ≤ Greediness Greediness Greediness Greediness greediness ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

RowRowRowRowrow (output_control)  point.y-array HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate der gefundenen Instanzen des Modells.

ColumnColumnColumnColumncolumn (output_control)  point.x-array HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate der gefundenen Instanzen des Modells.

AngleAngleAngleAngleangle (output_control)  angle.rad-array HTupleHTupleHtuple (real) (double) (double) (double)

Rotationswinkel der gefundenen Instanzen des Modells.

ScoreScoreScoreScorescore (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

Bewertung der gefundenen Instanzen des Modells.

Beispiel (HDevelop)

create_shape_model (ImageReduced, 0, rad(-45), rad(180), 0, \
                    'none', 'use_polarity', 30, 10, ModelID)
get_shape_model_contours (ModelXLD, ModelID, 1)
find_shape_model (SearchImage, ModelID, rad(-45), rad(180), \
                  0.5, 1, 0.5, 'interpolation', \
                  0, 0, Row, Column, Angle, Score)
* Create transformation matrix
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2DObject)
* Display results
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, \
                                    1, 1, 0)

Ergebnis

Sind die Parameterwerte korrekt, dann liefert find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder 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>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel, read_shape_modelread_shape_modelReadShapeModelReadShapeModelReadShapeModel, set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin, set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutter

Nachfolger

clear_shape_modelclear_shape_modelClearShapeModelClearShapeModelClearShapeModel

Alternativen

find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModel, find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel, find_scaled_shape_modelsfind_scaled_shape_modelsFindScaledShapeModelsFindScaledShapeModelsFindScaledShapeModels, find_shape_modelsfind_shape_modelsFindShapeModelsFindShapeModelsFindShapeModels, find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModelsFindAnisoShapeModels, find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModel, find_ncc_modelsfind_ncc_modelsFindNccModelsFindNccModelsFindNccModels

Siehe auch

set_systemset_systemSetSystemSetSystemSetSystem, get_systemget_systemGetSystemGetSystemGetSystem, set_shape_model_paramset_shape_model_paramSetShapeModelParamSetShapeModelParamSetShapeModelParam

Modul

Matching