find_ncc_modelT_find_ncc_modelFindNccModelFindNccModelfind_ncc_model (Operator)

Name

find_ncc_modelT_find_ncc_modelFindNccModelFindNccModelfind_ncc_model — Suche der besten Matches eines NCC-Modells in einem Bild.

Signatur

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

Herror T_find_ncc_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, Htuple* Row, Htuple* Column, Htuple* Angle, Htuple* Score)

void FindNccModel(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, HTuple* Row, HTuple* Column, HTuple* Angle, HTuple* Score)

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

void HNCCModel::FindNccModel(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) const

void HNCCModel::FindNccModel(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) const

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

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

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

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

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

static void HOperatorSet.FindNccModel(HObject image, HTuple modelID, 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)

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

void HNCCModel.FindNccModel(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)

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

void HImage.FindNccModel(HNCCModel modelID, 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)

def find_ncc_model(image: HObject, model_id: HHandle, angle_start: float, angle_extent: float, min_score: float, num_matches: int, max_overlap: float, sub_pixel: str, num_levels: MaybeSequence[int]) -> Tuple[Sequence[float], Sequence[float], Sequence[float], Sequence[float]]

Beschreibung

find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model findet die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches Instanzen des NCC-Modells ModelIDModelIDModelIDModelIDmodelIDmodel_id im Eingabebild ImageImageImageImageimageimage. Das Modell muss zuvor mit create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model erzeugt oder mit read_ncc_modelread_ncc_modelReadNccModelReadNccModelReadNccModelread_ncc_model eingelesen worden sein.

Die Position und Rotation der gefundenen Instanzen des Modells wird in RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn und AngleAngleAngleAngleangleangle zurückgeliefert. Zusätzlich wird in ScoreScoreScoreScorescorescore die Bewertung der gefundenen Instanzen zurückgegeben. Nähere Informationen finden Sie in den parameterspezifischen Abschnitten.

Falls NCC keine passenden Matches findet oder die Matching-Ergebnisse zu niedrig sind, sollte die Suche mit einer anderen Methode durchgeführt werden (siehe z.B. „Solution Guide II-B - Matching“).

Eingabeparameter im Detail

ImageImageImageImageimageimage 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_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model verwendet wurde. Ein eventuell mit set_ncc_model_originset_ncc_model_originSetNccModelOriginSetNccModelOriginSetNccModelOriginset_ncc_model_origin anders gesetzter Ursprung wird hier 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 MinScoreMinScoreMinScoreMinScoreminScoremin_score erreichen würde (siehe unten). Auf Grund von Rundungseffekten kann es jedoch passieren, dass das Modell für am Rand gefundene Instanzen bis zu Pixel außerhalb des Definitionsbereiches des Bildes liegt.

AngleStartAngleStartAngleStartAngleStartangleStartangle_start und AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent:

Die Parameter AngleStartAngleStartAngleStartAngleStartangleStartangle_start und AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 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_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model angegeben worden ist.

MinScoreMinScoreMinScoreMinScoreminScoremin_score:

Der Parameter MinScoreMinScoreMinScoreMinScoreminScoremin_score 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 MinScoreMinScoreMinScoreMinScoreminScoremin_score gewählt werden kann, desto schneller verläuft die Suche.

NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches:

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

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap:

Falls das Modell Symmetrien aufweist, kann es vorkommen, dass mehrere Instanzen an ähnlichen Positionen im Bild, aber mit verschiedenen Rotationen gefunden werden. Falls das Modell sich wiederholende Strukturen aufweist, kann es vorkommen, dass mehrere Instanzen mit gleichen Rotationen an ähnlichen Positionen im Bild gefunden werden. Mit dem Parameter MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap 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 MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap überlappen, wird nur die beste gefundene Instanz zurückgeliefert. Die Berechnung der Überlappung erfolgt anhand der kleinsten umschließenden Rechtecke beliebiger Orientierung des Definitionsbereiches der Modelle (siehe smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2). Bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap=0 dürfen sich die gefundenen Instanzen nicht überlappen, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap=1 werden alle gefundenen Instanzen zurückgeliefert.

SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel:

Der Parameter SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel gibt an, ob die Extraktion subpixelgenau erfolgen soll. Falls SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel auf 'false'"false""false""false""false""false" gesetzt wird, wird die Lage des Modells nur pixelgenau bzw. mit der bei create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model angegebenen Winkelauflösung bestimmt. Falls SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel 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. Dieser Modus kostet fast keine Rechenzeit und liefert eine hohe Genauigkeit. Im Normalfall sollte also SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel = 'true'"true""true""true""true""true" gewählt werden. Für eine subpixelgenaue Bestimmung der Lage muss das Modell auf der untersten verwendeten Pyramidenebene einen Abstand von mindestens 2 Pixel vom Bildrand haben. Wenn die gefundene Instanz des Modells näher am Bildrand liegt, wird die Lage des Modells nur pixelgenau bzw. mit der bei create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model angegebenen Winkelauflösung bestimmt, selbst wenn SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel auf 'true'"true""true""true""true""true" gesetzt ist.

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels:

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

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

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

Ausgabeparameter im Detail

RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn und AngleAngleAngleAngleangleangle:

Die Position und Rotation der gefundenen Instanzen des Modells wird in RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn und AngleAngleAngleAngleangleangle zurückgeliefert. Die Koordinaten RowRowRowRowrowrow und ColumnColumnColumnColumncolumncolumn 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 des Modells 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_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel. Das Beispiel weiter unten zeigt, wie die Transformationsmatrix erzeugt wird und wie man damit die exakten Koordinaten berechnet.

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

Normalerweise ist der Ursprung des Modells der Schwerpunkt der Region des Bildes, das zur Erzeugung des NCC-Modells mit create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model verwendet wurde. Ein anderer Ursprung kann mit set_ncc_model_originset_ncc_model_originSetNccModelOriginSetNccModelOriginSetNccModelOriginset_ncc_model_origin festgelegt werden.

ScoreScoreScoreScorescorescore:

In ScoreScoreScoreScorescorescore wird die Bewertung der gefundenen Instanzen zurückgegeben. Die Bewertung ist die normalisierte Kreuzkorrelation (engl.: normalized cross correlation) zwischen dem Muster t(r,c) und dem Bild i(r,c): Hierbei bezeichnet n die Anzahl der Punkte im Muster, R den Definitionsbereich (ROI) des Musters, den mittleren Grauwert des Musters die Varianz der Grauwerte des Musters den mittleren Grauwert an der Position (r,c) über alle Punkte im Muster (d.h. die Punkte im Muster sind um (r,c) verschoben) und die Varianz der Grauwerte an der Position (r,c) über alle Punkte im Muster

Die NCC misst, wie gut das Muster und das Bild an einem bestimmten Punkt (r,c) übereinstimmen. Sie nimmt Werte zwischen -1 und 1 an. Je größer der Absolutbetrag der Korrelation ist, desto besser ist die Übereinstimmung zwischen Muster und Bild. Ein Wert von 1 bedeutet, dass die Grauwerte im Bild eine lineare Transformation der Grauwerte im Muster sind: i(r+u,c+v) = a * t(u,v) + b wobei a > 0. Ein Wert von -1 bedeutet, dass die Grauwerte im Bild eine lineare Transformation der Grauwerte im Muster mit a < 0 sind. Das Muster hat in diesem Fall im Bild also genau die umgekehrte Polarität. Aufgrund der obigen Eigenschaft ist die NCC invariant gegenüber linearen Beleuchtungsänderungen.

Die NCC wie oben definiert wird verwendet, falls das Modell mit MetricMetricMetricMetricmetricmetric = 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity" erzeugt wurde. Falls das Modell mit MetricMetricMetricMetricmetricmetric = 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity" erzeugt wurde, wird der Absolutbetrag von ncc(r,c) als Bewertung verwendet.

Setzen eines Timeout

Mittels des Operators set_ncc_model_paramset_ncc_model_paramSetNccModelParamSetNccModelParamSetNccModelParamset_ncc_model_param können sie einen 'timeout'"timeout""timeout""timeout""timeout""timeout" für find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model angeben. Wenn find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model diesen 'timeout'"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_ncc_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.

Achtung

find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model kann teilweise auf OpenCL-Geräten ausgeführt werden, wenn diese die cl_khr_global_int32_base_atomics OpenCL-Erweiterung unterstützen. Es wird nur die Suche auf der obersten Pyramidenstufe auf dem OpenCL-Gerät durchgeführt, während das Tracking der potentiellen Matches auf der CPU durchgeführt wird. Wenn die Domäne des Bildes in dem gesucht werden soll deutlich kleiner ist als die Größe des Bildes, sollte daher crop_domaincrop_domainCropDomainCropDomainCropDomaincrop_domain verwendet werden, um die Menge der von dem OpenCL auf das Host-System zu übertragenden Daten zu reduzieren. Abhängig von einer Vielzahl von Faktoren kann find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model auf OpenCL-Geräten sowohl deutlich schneller, als auch deutlich langsamer laufen. Daher kann man hier keine generelle Aussage treffen und muss jeweils mit Bildern aus der Anwendung testen, ob der Einsatz von OpenCL für find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model Sinn macht oder nicht.

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

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHImageHobject (byte* / uint2*) *erlaubt für Compute Devices

Eingabebild, in dem das Modell gefunden werden soll.

ModelIDModelIDModelIDModelIDmodelIDmodel_id (input_control)  ncc_model HNCCModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells.

AngleStartAngleStartAngleStartAngleStartangleStartangle_start (input_control)  angle.rad HTuplefloatHTupleHtuple (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

AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent (input_control)  angle.rad HTuplefloatHTupleHtuple (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

MinScoreMinScoreMinScoreMinScoreminScoremin_score (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen des Modells.

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

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches (input_control)  integer HTupleintHTupleHtuple (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

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap (input_control)  real HTuplefloatHTupleHtuple (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 max_overlap ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Subpixelgenauigkeit.

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

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

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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

Defaultwert: 0

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

RowRowRowRowrowrow (output_control)  point.y-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate der gefundenen Instanzen des Modells.

ColumnColumnColumnColumncolumncolumn (output_control)  point.x-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate der gefundenen Instanzen des Modells.

AngleAngleAngleAngleangleangle (output_control)  angle.rad-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Rotationswinkel der gefundenen Instanzen des Modells.

ScoreScoreScoreScorescorescore (output_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Bewertung der gefundenen Instanzen des Modells.

Beispiel (HDevelop)

create_ncc_model (TemplateImage, 'auto', rad(-45), rad(90), 'auto', \
                  'use_polarity', ModelID)
find_ncc_model (SearchImage, ModelID, rad(-45), rad(90), 0.7, 1, \
                0.5, 'true', 0, Row, Column, Angle, Score)
* Create transformation matrix
vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
* Calculate true position of the model origin in the search image
affine_trans_pixel (HomMat2D, 0, 0, RowObject, ColumnObject)
* display the results
dev_display_ncc_matching_results (ModelID, 'red', Row, Column, \
                                  Angle, 0)

Ergebnis

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

Vorgänger

create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model, read_ncc_modelread_ncc_modelReadNccModelReadNccModelReadNccModelread_ncc_model, set_ncc_model_originset_ncc_model_originSetNccModelOriginSetNccModelOriginSetNccModelOriginset_ncc_model_origin

Nachfolger

clear_ncc_modelclear_ncc_modelClearNccModelClearNccModelClearNccModelclear_ncc_model

Alternativen

find_generic_shape_modelfind_generic_shape_modelFindGenericShapeModelFindGenericShapeModelFindGenericShapeModelfind_generic_shape_model

Modul

Matching