KlassenKlassenKlassenKlassen | | | | Operatoren

find_ncc_modelsT_find_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels (Operator)

Name

find_ncc_modelsT_find_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels — Suche der besten Matches mehrerer NCC-Modelle.

Signatur

find_ncc_models(Image : : ModelIDs, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score, Model)

Herror T_find_ncc_models(const Hobject Image, const Htuple ModelIDs, const Htuple AngleStart, const Htuple AngleExtent, const Htuple MinScore, const Htuple NumMatches, const Htuple MaxOverlap, const Htuple SubPixel, const Htuple NumLevels, Htuple* Row, Htuple* Column, Htuple* Angle, Htuple* Score, Htuple* Model)

Herror find_ncc_models(Hobject Image, const HTuple& ModelIDs, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model)

HTuple HImage::FindNccModels(const HTuple& ModelIDs, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model) const

HTuple HImageArray::FindNccModels(const HTuple& ModelIDs, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model) const

HTuple HNCCModel::FindNccModels(const HImageArray& Image, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model) const

void FindNccModels(const HObject& Image, const HTuple& ModelIDs, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model)

static void HNCCModel::FindNccModels(const HImage& Image, const HNCCModelArray& ModelIDs, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model)

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

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

void HImage::FindNccModels(const HNCCModelArray& ModelIDs, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& SubPixel, const HTuple& NumLevels, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model) const

void HImage::FindNccModels(const HNCCModel& ModelIDs, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& SubPixel, Hlong NumLevels, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model) const

void HImage::FindNccModels(const HNCCModel& ModelIDs, double AngleStart, double AngleExtent, double MinScore, Hlong NumMatches, double MaxOverlap, const char* SubPixel, Hlong NumLevels, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score, HTuple* Model) const

void HOperatorSetX.FindNccModels(
[in] IHUntypedObjectX* Image, [in] VARIANT ModelIDs, [in] VARIANT AngleStart, [in] VARIANT AngleExtent, [in] VARIANT MinScore, [in] VARIANT NumMatches, [in] VARIANT MaxOverlap, [in] VARIANT SubPixel, [in] VARIANT NumLevels, [out] VARIANT* Row, [out] VARIANT* Column, [out] VARIANT* Angle, [out] VARIANT* Score, [out] VARIANT* Model)

VARIANT HNCCModelX.FindNccModels(
[in] IHImageX* Image, [in] VARIANT AngleStart, [in] VARIANT AngleExtent, [in] VARIANT MinScore, [in] VARIANT NumMatches, [in] VARIANT MaxOverlap, [in] VARIANT SubPixel, [in] VARIANT NumLevels, [out] VARIANT* Column, [out] VARIANT* Angle, [out] VARIANT* Score, [out] VARIANT* Model)

VARIANT HImageX.FindNccModels(
[in] IHNCCModelX* ModelIDs, [in] VARIANT AngleStart, [in] VARIANT AngleExtent, [in] VARIANT MinScore, [in] VARIANT NumMatches, [in] VARIANT MaxOverlap, [in] VARIANT SubPixel, [in] VARIANT NumLevels, [out] VARIANT* Column, [out] VARIANT* Angle, [out] VARIANT* Score, [out] VARIANT* Model)

static void HOperatorSet.FindNccModels(HObject image, HTuple modelIDs, HTuple angleStart, HTuple angleExtent, HTuple minScore, HTuple numMatches, HTuple maxOverlap, HTuple subPixel, HTuple numLevels, out HTuple row, out HTuple column, out HTuple angle, out HTuple score, out HTuple model)

static void HNCCModel.FindNccModels(HImage image, HNCCModel[] modelIDs, HTuple angleStart, HTuple angleExtent, HTuple minScore, HTuple numMatches, HTuple maxOverlap, HTuple subPixel, HTuple numLevels, out HTuple row, out HTuple column, out HTuple angle, out HTuple score, out HTuple model)

void HNCCModel.FindNccModels(HImage image, double angleStart, double angleExtent, double minScore, int numMatches, double maxOverlap, string subPixel, int numLevels, out HTuple row, out HTuple column, out HTuple angle, out HTuple score, out HTuple model)

void HImage.FindNccModels(HNCCModel[] modelIDs, HTuple angleStart, HTuple angleExtent, HTuple minScore, HTuple numMatches, HTuple maxOverlap, HTuple subPixel, HTuple numLevels, out HTuple row, out HTuple column, out HTuple angle, out HTuple score, out HTuple model)

void HImage.FindNccModels(HNCCModel modelIDs, double angleStart, double angleExtent, double minScore, int numMatches, double maxOverlap, string subPixel, int numLevels, out HTuple row, out HTuple column, out HTuple angle, out HTuple score, out HTuple model)

Beschreibung

find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels findet die besten NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen der NCC-Modelle, die in dem Tupel ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs übergeben werden, im Eingabebild ImageImageImageImageImageimage. Die Modelle müssen zuvor mit create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel erzeugt oder mit read_ncc_modelread_ncc_modelReadNccModelread_ncc_modelReadNccModelReadNccModel eingelesen worden sein. Im Gegensatz zu find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel kann also eine Mehrzahl von Modellen gleichzeitig im selben Bild gesucht werden.

Die Position und Rotation der gefundenen Instanzen des Modells wird in RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn und AngleAngleAngleAngleAngleangle zurückgeliefert. In ScoreScoreScoreScoreScorescore wird die Bewertung der gefundenen Instanzen zurückgegeben. Der gefundene Modelltyp wird in ModelModelModelModelModelmodel zurückgeliefert. Nähere Informationen finden Sie in den parameterspezifischen Abschnitten.

Besonderheiten der Parametersematik

Gegenüber find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel unterscheidet sich die Semantik aller Eingabeparameter etwas. Alle Eingabeparameter müssen entweder genau ein Element enthalten oder dieselbe Anzahl von Elementen wie ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs. (NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels kann auch zwei oder zweimal die Anzahl von Elementen wie ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs enthalten; siehe unten.) Im ersten Fall wird der Wert des Eingabeparameters für alle Modelle gleich verwendet. Im zweiten Fall wird das jeweilige Element des Eingabeparameters für das entsprechende Modell in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs verwendet. Details hierzu werden im zugehörigen Abschnitt weiter unten beschrieben. Ein Aufruf von find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels mit mehreren Werten für ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs, NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches und MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap entspricht von der Wirkung her also mehreren unabhängigen Aufrufen von find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel mit den jeweiligen Parametern, ist allerdings wesentlich effizienter.

Eingabeparameter im Detail

Eingabebild und seine Region:

Der Definitionsbereich des Bildes ImageImageImageImageImageimage gibt den Suchbereich für den Referenzpunkt des Modells an, d.h. für den Schwerpunkt der Region des Bildes, das zur Erzeugung des NCC-Modells mit create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel verwendet wurde. Ein eventuell mit set_ncc_model_originset_ncc_model_originSetNccModelOriginset_ncc_model_originSetNccModelOriginSetNccModelOrigin anders gesetzter Ursprung wird nicht berücksichtigt. Das Modell wird 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 MinScoreMinScoreMinScoreMinScoreMinScoreminScore erreichen würde.

ImageImageImageImageImageimage kann ein einzelnes Bildobjekt beinhalten oder ein Bildobjektarray. Falls ImageImageImageImageImageimage ein einzelnes Bildobjekt enthält, wird dessen Region als Suchbereich für alle Modelle in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs verwendet. Falls ImageImageImageImageImageimage mehrere Bildobjekte enthält, wird die jeweilige Region als Suchbereich für das entsprechende Modell aus ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs verwendet. In diesem Fall müssen die Bilder, abgesehen von ihrer Region, identisch sein. D.h. ImageImageImageImageImageimage kann nicht in beliebiger Weise mit concat_objconcat_objConcatObjconcat_objConcatObjConcatObj aufgebaut werden, sondern muss aus demselben Bild mit add_channelsadd_channelsAddChannelsadd_channelsAddChannelsAddChannels oder äquivalenten Aufrufen erzeugt werden. Falls das nicht der Fall ist, wird eine Fehlermeldung zurückgeliefert.

AngleStart und AngleExtent:

Die Parameter AngleStartAngleStartAngleStartAngleStartAngleStartangleStart und AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent 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_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel angegeben worden ist.

Außerdem ist zu beachten, dass es in manchen Fällen vorkommen kann, dass Instanzen gefunden werden, deren Rotation geringfügig außerhalb des übergebenen Winkelbereichs liegt. Dies kann dann auftreten, wenn der übergebene Winkelbereich kleiner ist als der Bereich, der bei der Erzeugung des Modells angegeben worden ist.

MinScore:

Der Parameter MinScoreMinScoreMinScoreMinScoreMinScoreminScore 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 MinScoreMinScoreMinScoreMinScoreMinScoreminScore gewählt werden kann, desto schneller verläuft die Suche. Falls erwartet werden kann, dass das Modell niemals verdeckt wird, kann MinScoreMinScoreMinScoreMinScoreMinScoreminScore 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 MinScoreMinScoreMinScoreMinScoreMinScoreminScore liegen.

NumMatches:

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

Falls NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches einen Wert enthält, liefert find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels die NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches besten Instanzen des Modells unabhängig von der Art des Modells zurück. Falls z.B. in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs zwei Modelle übergeben werden und NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches = 2 gewählt wird, kann es sein, dass zwei Instanzen des ersten Modells und keine des zweiten Modells, eine Instanz des ersten Modells und eine des zweiten Modells oder keine Instanz des ersten Modells und zwei des zweiten Modells zurückgeliefert werden. Falls hingegen NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches mehrere Werte enthält, werden so viele Instanzen des jeweiligen Modells in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs zurückgeliefert, wie durch das entsprechende Element von NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches angegeben. Falls z.B. NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches = [1,1] gewählt wird, wird eine Instanz des ersten Modells und eine des zweiten Modells zurückgeliefert.

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 MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap 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 MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap ü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_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2). Bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap=0 dürfen sich die gefundenen Instanzen nicht überlappen, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap=1 werden alle gefundenen Instanzen zurückgeliefert.

Falls MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap einen Wert enthält, wird die Überlappung für alle gefundenen Instanzen des Modells unabhängig von der Art des Modells berechnet. Es werden also Instanzen verschiedener und gleicher Modelle eliminiert, die sich zu stark überlappen. Falls hingegen mehrere Werte in MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap übergeben werden, wird die Überlappung nur innerhalb der gefundenen Instanzen des jeweiligen Typs der Modelle in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs berechnet. Es werden dann nur sich zu stark überlappende Instanzen gleicher Modelle eliminiert. Modelle verschiedenen Typs können sich in diesem Modus vollständig überlappen.

SubPixel:

Der Parameter SubPixelSubPixelSubPixelSubPixelSubPixelsubPixel gibt an, ob die Extraktion subpixelgenau erfolgen soll. Falls SubPixelSubPixelSubPixelSubPixelSubPixelsubPixel auf 'false'"false""false""false""false""false" gesetzt wird, wird die Lage des Modells nur pixelgenau bzw. mit der bei create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel angegebenen Winkelauflösung bestimmt. Falls SubPixelSubPixelSubPixelSubPixelSubPixelsubPixel auf 'true'"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.

NumLevels:

Mit NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels 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_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel angegebenen Bereich beschnitten. Falls NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels als 0 angegeben wird, wird die mit create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel angegebene Anzahl verwendet.

In manchen Fällen kann es sein, dass die Anzahl der Pyramidenebenen, die beispielsweise automatisch mit create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel 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 MinScoreMinScoreMinScoreMinScoreMinScoreminScore auf einen sehr geringen Wert zu setzen, um alle Matches zu finden, kann der Wert von NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels mit get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsget_ncc_model_paramsGetNccModelParamsGetNccModelParams ermittelt werden und dann ein etwas geringerer Wert in find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels genutzt werden. Diese Herangehensweise führt oft zu besseren Ergebnissen hinsichtlich Geschwindigkeit und Robustheit.

Optional kann NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels 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 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.

Falls die unterste Pyramidenebene für jedes Modell einzeln spezifiziert werden soll, müssen in NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels zweimal die Anzahl von Elementen in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs angegeben werden. Dabei sind die Anzahl der Pyramidenebenen und die untersten Pyramidenebenen verschränkt anzugeben. Falls z.B. zwei Modelle in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs angegeben sind, die oberste Pyramidenebene für das erste Modell 5 und für das zweite Modell 4 sein soll und die unterste Pyramidenebene für das erste Modell 2 und für das zweite 1 sein soll, so ist NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels = [5,2,4,1] zu wählen. Falls genau zwei Modelle in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs angegeben sind, ergibt sich als Spezialfall, dass, falls die unterste Pyramidenebene spezifiziert werden soll, die oberste und unterste Pyramidenebene für beide Modelle explizit spezifiziert werden muss, selbst, wenn sie gleich sind. Ein Tupel der Länge zwei in NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels wird in diesem Fall nämlich als Spezifikation der obersten Pyramidenebene für die zwei Modelle interpretiert.

Ausgabeparameter im Detail

Row, Column und Angle:

Die Position und Rotation der gefundenen Instanzen der Modelle wird in RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn und AngleAngleAngleAngleAngleangle zurückgeliefert. Die Koordinaten RowRowRowRowRowrow und ColumnColumnColumnColumnColumncolumn sind die Koordinaten des Ursprungs des Modells im Suchbild. Normalerweise ist der Ursprung des Modells der Schwerpunkt der Region des Bildes, das zur Erzeugung des NCC-Modells mit create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel verwendet wurde. Ein anderer Ursprung kann mit set_ncc_model_originset_ncc_model_originSetNccModelOriginset_ncc_model_originSetNccModelOriginSetNccModelOrigin festgelegt werden.

Beachten Sie, dass die Koordinaten RowRowRowRowRowrow und ColumnColumnColumnColumnColumncolumn nicht exakt mit dem Ursprung des Modells übereinstimmen und daher nicht direkt verwendet werden sollten. Die Werte sind dafür optimiert, die Transformationsmatrix zu erzeugen, mit der die Matching-Ergebnisse für verschiedene Aufgaben verwendet werden können, z.B. um ROIs für andere Bildverarbeitungsschritte einem Objekt nachzuführen. Das bei find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel angegebene Beispiel zeigt, wie diese Matrix erzeugt wird und wie man damit das Modell an der gefundenen Position im Suchbild visualisiert und die exakten Koordinaten berechnet.

Beachten Sie, dass die Visualisierung aber auch mit der Prozedur dev_display_ncc_matching_results realisiert werden kann.

Score:

In ScoreScoreScoreScoreScorescore wird die Bewertung der gefundenen Instanzen zurückgegeben. Die Berechnung von ScoreScoreScoreScoreScorescore ist in find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel beschrieben.

Model:

Der gefundene Modelltyp wird in ModelModelModelModelModelmodel zurückgeliefert. Die Elemente von ModelModelModelModelModelmodel sind ein Index in das Tupel ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs, d.h. sie können Werte von 0 bis |ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs|-1 enthalten. Ein Wert von 0 in einem Element von ModelModelModelModelModelmodel entspricht also einer Instanz des ersten in ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs übergebenen Modells.

Setzen eines Timeout

Mittels des Operators set_ncc_model_paramset_ncc_model_paramSetNccModelParamset_ncc_model_paramSetNccModelParamSetNccModelParam können sie einen 'timeout'"timeout""timeout""timeout""timeout""timeout" für find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels angeben. Falls die durch ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs referenzierten Modelle unterschiedliche Werte für 'timeout'"timeout""timeout""timeout""timeout""timeout" besitzen, wählt find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels den niedrigsten aus. Wenn find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels diesen 'timeout'"timeout""timeout""timeout""timeout""timeout" erreicht endet er ohne Ergebnis und gibt den Fehlercode 9400 (H_ERR_TIMEOUT) zurück.

Achtung

Es sei bemerkt, dass der intern benötigte Speicher mit der Anzahl der verwendeten Threads anwächst.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte* / uint2*) *erlaubt für Compute Devices

Eingabebild, in dem die Modelle gefunden werden sollen.

ModelIDsModelIDsModelIDsModelIDsModelIDsmodelIDs (input_control)  ncc_model(-array) HNCCModel, HTupleHTupleHNCCModel, HTupleHNCCModelX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle der Modelle.

AngleStartAngleStartAngleStartAngleStartAngleStartangleStart (input_control)  angle.rad(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Kleinste auftretende Rotation des Modelle.

Defaultwert: -0.39

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

AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent (input_control)  angle.rad(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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

MinScoreMinScoreMinScoreMinScoreMinScoreminScore (input_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen des Modelle.

Defaultwert: 0.8

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 minScore ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

NumMatchesNumMatchesNumMatchesNumMatchesNumMatchesnumMatches (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

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

Defaultwert: 1

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

MaxOverlapMaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap (input_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Maximale Überlappung der zu findenden Instanzen des Modelle.

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 maxOverlap ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

SubPixelSubPixelSubPixelSubPixelSubPixelsubPixel (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Subpixelgenauigkeit.

Defaultwert: 'true' "true" "true" "true" "true" "true"

Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"

NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

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

Defaultwert: 0

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

RowRowRowRowRowrow (output_control)  point.y-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Zeilenkoordinate der gefundenen Instanzen des Modelle.

ColumnColumnColumnColumnColumncolumn (output_control)  point.x-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Spaltenkoordinate der gefundenen Instanzen des Modelle.

AngleAngleAngleAngleAngleangle (output_control)  angle.rad-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Rotationswinkel der gefundenen Instanzen des Modelle.

ScoreScoreScoreScoreScorescore (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Bewertung der gefundenen Instanzen des Modelle.

ModelModelModelModelModelmodel (output_control)  integer-array HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Indices der gefundenen Instanzen des Modelle.

Beispiel (HDevelop)

read_image (Image, 'pcb_focus/pcb_focus_telecentric_061')
gen_rectangle1 (ROI_0, 236, 241, 313, 321)
gen_circle (ROI_1, 281, 653, 41)
reduce_domain (Image, ROI_0, ImageReduced1)
reduce_domain (Image, ROI_1, ImageReduced2)
create_ncc_model (ImageReduced1, 'auto', rad(-45), rad(90), 'auto', \
                  'use_polarity', ModelID1)
create_ncc_model (ImageReduced2, 'auto', rad(-45), rad(90), 'auto', \
                  'use_polarity', ModelID2)
ModelIDs:=[ModelID1, ModelID2]
find_ncc_models (Image, ModelIDs, rad(-45), rad(90), 0.7, [1,1], 0.5, \
                 'true', 0, Row, Column, Angle, Score, Model)
dev_display_ncc_matching_results (ModelIDs, 'red', Row, Column, \
                  Angle, Model)

Ergebnis

Sind die Parameterwerte korrekt, dann liefert find_ncc_modelsfind_ncc_modelsFindNccModelsfind_ncc_modelsFindNccModelsFindNccModels 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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel, read_ncc_modelread_ncc_modelReadNccModelread_ncc_modelReadNccModelReadNccModel, set_ncc_model_originset_ncc_model_originSetNccModelOriginset_ncc_model_originSetNccModelOriginSetNccModelOrigin

Nachfolger

clear_ncc_modelclear_ncc_modelClearNccModelclear_ncc_modelClearNccModelClearNccModel

Alternativen

find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel, find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModel, find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModel, find_shape_modelsfind_shape_modelsFindShapeModelsfind_shape_modelsFindShapeModelsFindShapeModels, find_scaled_shape_modelsfind_scaled_shape_modelsFindScaledShapeModelsfind_scaled_shape_modelsFindScaledShapeModelsFindScaledShapeModels, find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModels

Modul

Matching


KlassenKlassenKlassenKlassen | | | | Operatoren