find_shape_model_3dT_find_shape_model_3dFindShapeModel3dFindShapeModel3d (Operator)

Name

find_shape_model_3dT_find_shape_model_3dFindShapeModel3dFindShapeModel3d — Suche der besten Matches eines 3D-Formmodells in einem Bild.

Signatur

find_shape_model_3d(Image : : ShapeModel3DID, MinScore, Greediness, NumLevels, GenParamName, GenParamValue : Pose, CovPose, Score)

Herror T_find_shape_model_3d(const Hobject Image, const Htuple ShapeModel3DID, const Htuple MinScore, const Htuple Greediness, const Htuple NumLevels, const Htuple GenParamName, const Htuple GenParamValue, Htuple* Pose, Htuple* CovPose, Htuple* Score)

void FindShapeModel3d(const HObject& Image, const HTuple& ShapeModel3DID, const HTuple& MinScore, const HTuple& Greediness, const HTuple& NumLevels, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* Pose, HTuple* CovPose, HTuple* Score)

HPoseArray HShapeModel3D::FindShapeModel3d(const HImage& Image, double MinScore, double Greediness, const HTuple& NumLevels, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* CovPose, HTuple* Score) const

HPoseArray HImage::FindShapeModel3d(const HShapeModel3D& ShapeModel3DID, double MinScore, double Greediness, const HTuple& NumLevels, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* CovPose, HTuple* Score) const

static void HOperatorSet.FindShapeModel3d(HObject image, HTuple shapeModel3DID, HTuple minScore, HTuple greediness, HTuple numLevels, HTuple genParamName, HTuple genParamValue, out HTuple pose, out HTuple covPose, out HTuple score)

HPose[] HShapeModel3D.FindShapeModel3d(HImage image, double minScore, double greediness, HTuple numLevels, HTuple genParamName, HTuple genParamValue, out HTuple covPose, out HTuple score)

HPose[] HImage.FindShapeModel3d(HShapeModel3D shapeModel3DID, double minScore, double greediness, HTuple numLevels, HTuple genParamName, HTuple genParamValue, out HTuple covPose, out HTuple score)

Beschreibung

find_shape_model_3dfind_shape_model_3dFindShapeModel3dFindShapeModel3dFindShapeModel3d findet die besten Matches des 3D-Formmodells ShapeModel3DIDShapeModel3DIDShapeModel3DIDShapeModel3DIDshapeModel3DID im Eingabebild ImageImageImageImageimage. Das 3D-Formmodell muss zuvor mit create_shape_model_3dcreate_shape_model_3dCreateShapeModel3dCreateShapeModel3dCreateShapeModel3d erzeugt oder mit read_shape_model_3dread_shape_model_3dReadShapeModel3dReadShapeModel3dReadShapeModel3d eingelesen worden sein.

Die 3D-Lage der gefundenen Modellinstanzen wird in PosePosePosePosepose zurückgeliefert. Sie ist in der Form . Dabei steht ccs für das Kamerakoordinatensystem und mcs für das Modellkoordinatensystem (ein 3D Weltkoordinatensystem), siehe auch Transformationen / Posen und „Solution Guide III-C - 3D Vision“. Dies bedeutet, sie beschreibt die Lage des 3D-Objektmodells im Kamerakoordinatensystem. Zu beachten ist, dass sich die resultierende PosePosePosePosepose nicht auf das in create_shape_model_3dcreate_shape_model_3dCreateShapeModel3dCreateShapeModel3dCreateShapeModel3d eingeführte Referenzkoordinatensystem bezieht, sondern auf das ursprüngliche durch die CAD-Datei definierte Koordinatensystem des 3D-Objektmodells. Falls eine 3D-Lagen-Verfeinerung durchgeführt wurde (siehe unten), werden zusätzlich die Genauigkeiten der sechs 3D-Lagen-Parameter in CovPoseCovPoseCovPoseCovPosecovPose zurückgeliefert. Standardmäßig enthält CovPoseCovPoseCovPoseCovPosecovPose die 6 Standardabweichungen der 3D-Lagen-Parameter pro Match. Wurde der generische Parameter 'cov_pose_mode'"cov_pose_mode""cov_pose_mode""cov_pose_mode""cov_pose_mode" (siehe unten) dagegen auf 'covariances'"covariances""covariances""covariances""covariances" gesetzt, enthält CovPoseCovPoseCovPoseCovPosecovPose die 36 Werte der kompletten 6×6 Kovarianzmatrix der 6 Posewerte. Zu beachten ist, dass es dabei nur um eine innere Genauigkeit der 3D-Lagen-Verfeinerung handelt. Die tatsächliche Genauigkeit der 3D-Lage kann davon abweichen. Schließlich wird in ScoreScoreScoreScorescore 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.

Eingabeparameter im Detail

Eingabebild und seine Region:

Der Definitionsbereich des Bildes ImageImageImageImageimage gibt den Suchbereich für den Referenzpunkt des 3D-Objektmodells an.

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. Zu beachten ist, dass in Bildern mit vielen Störobjekten oder mit starker Hintergrundtextur der Wert für MinScoreMinScoreMinScoreMinScoreminScore nicht deutlich niedriger als 0.7 gesetzt werden sollte, da ansonsten falsche Matches gefunden werden könnten.

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. 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 3D-Formmodell für GreedinessGreedinessGreedinessGreedinessgreediness=0.9 immer sicher gefunden.

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_model_3dcreate_shape_model_3dCreateShapeModel3dCreateShapeModel3dCreateShapeModel3d angegebenen Bereich beschnitten. Falls NumLevelsNumLevelsNumLevelsNumLevelsnumLevels als 0 angegeben wird, wird die mit create_shape_model_3dcreate_shape_model_3dCreateShapeModel3dCreateShapeModel3dCreateShapeModel3d angegebene Anzahl verwendet. 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, um Laufzeit einzusparen. 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.

GenParamName und GenParamValue:

Zusätzlich zu den oben beschriebenen Parametern gibt es generische Parameter, die optional angegeben werden können, um das Matching zu beeinflussen. Für die meisten Anwendungen müssen diese Parameter nicht spezifiziert werden, sondern können mit den Default-Werten übernommen werden. Fall erwünscht, können die generischen Parameter und deren Werte in GenParamNameGenParamNameGenParamNameGenParamNamegenParamName und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue übergeben werden. Die folgenden Werte für GenParamNameGenParamNameGenParamNameGenParamNamegenParamName sind möglich:

Ausführungsinformationen

Parameter

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

Eingabebild, in dem das Modell gefunden werden soll.

ShapeModel3DIDShapeModel3DIDShapeModel3DIDShapeModel3DIDshapeModel3DID (input_control)  shape_model_3d HShapeModel3D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des 3D-Formmodells.

MinScoreMinScoreMinScoreMinScoreminScore (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen des Modells.

Defaultwert: 0.7

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

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

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

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  attribute.name-array HTupleHTupleHtuple (string) (string) (HString) (char*)

Namen von (optionalen) Parametern für die Steuerung des Verhaltens des Operators.

Defaultwert: []

Werteliste: 'border_model'"border_model""border_model""border_model""border_model", 'cam_roll_max'"cam_roll_max""cam_roll_max""cam_roll_max""cam_roll_max", 'cam_roll_min'"cam_roll_min""cam_roll_min""cam_roll_min""cam_roll_min", 'cov_pose_mode'"cov_pose_mode""cov_pose_mode""cov_pose_mode""cov_pose_mode", 'dist_max'"dist_max""dist_max""dist_max""dist_max", 'dist_min'"dist_min""dist_min""dist_min""dist_min", 'latitude_max'"latitude_max""latitude_max""latitude_max""latitude_max", 'latitude_min'"latitude_min""latitude_min""latitude_min""latitude_min", 'longitude_max'"longitude_max""longitude_max""longitude_max""longitude_max", 'longitude_min'"longitude_min""longitude_min""longitude_min""longitude_min", 'max_overlap'"max_overlap""max_overlap""max_overlap""max_overlap", 'num_matches'"num_matches""num_matches""num_matches""num_matches", 'outlier_suppression'"outlier_suppression""outlier_suppression""outlier_suppression""outlier_suppression", 'pose_refinement'"pose_refinement""pose_refinement""pose_refinement""pose_refinement", 'recompute_score'"recompute_score""recompute_score""recompute_score""recompute_score"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  attribute.name-array HTupleHTupleHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*)

Die zu den optionalen generischen Parametern gehörenden Werte.

Defaultwert: []

Wertevorschläge: -0.78, -0.35, -0.17, 0.0, 0.17, 0.35, 0.78, 0.1, 0.2, 0.5, 'none'"none""none""none""none", 'false'"false""false""false""false", 'true'"true""true""true""true", '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", 'standard_deviations'"standard_deviations""standard_deviations""standard_deviations""standard_deviations", 'covariances'"covariances""covariances""covariances""covariances", 'medium'"medium""medium""medium""medium", 'high'"high""high""high""high"

PosePosePosePosepose (output_control)  pose(-array) HPose, HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

3D-Lage des 3D-Formmodells.

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

6 Standardabweichungen bzw. 36 Kovarianzen der Poseparameter.

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

Bewertung der gefundenen Instanzen des 3D-Formmodells.

Beispiel (HDevelop)

read_object_model_3d (DXFModelFileName, 'm', [], [], ObjectModel3D, \
                      DxfStatus)
CamParam := ['area_scan_division',0.01221,2791,7.3958e-6,7.4e-6,\
             308.21,245.92,640,480]
create_shape_model_3d (ObjectModel3D, CamParam, 0, 0, 0, 'gba', \
                       -rad(20), rad(20), -rad(20), rad(20), 0, \
                       rad(360), 0.15, 0.2, 10, [], [], ShapeModel3DID)
grab_image_async (Image, AcqHandle, -1)
find_shape_model_3d (Image, ShapeModel3DID, 0.6, 0.9, 0, [], [], \
                     Pose, CovPose, Score)
project_shape_model_3d (ModelContours, ShapeModel3DID, CamParam, \
                        Pose, 'true', rad(30))

Ergebnis

Sind die Parameterwerte korrekt, dann liefert find_shape_model_3dfind_shape_model_3dFindShapeModel3dFindShapeModel3dFindShapeModel3d 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. Wurde bei der Modellgenerierung mit find_shape_model_3dfind_shape_model_3dFindShapeModel3dFindShapeModel3dFindShapeModel3d für 'metric'"metric""metric""metric""metric" der Wert 'ignore_part_polarity'"ignore_part_polarity""ignore_part_polarity""ignore_part_polarity""ignore_part_polarity" gewählt und in ImageImageImageImageimage ein mehrkanaliges Bild übergeben, wird die Fehlermeldung 3359 zurückgegeben.

Vorgänger

create_shape_model_3dcreate_shape_model_3dCreateShapeModel3dCreateShapeModel3dCreateShapeModel3d, read_shape_model_3dread_shape_model_3dReadShapeModel3dReadShapeModel3dReadShapeModel3d

Nachfolger

project_shape_model_3dproject_shape_model_3dProjectShapeModel3dProjectShapeModel3dProjectShapeModel3d

Siehe auch

convert_point_3d_cart_to_spherconvert_point_3d_cart_to_spherConvertPoint3dCartToSpherConvertPoint3dCartToSpherConvertPoint3dCartToSpher, convert_point_3d_spher_to_cartconvert_point_3d_spher_to_cartConvertPoint3dSpherToCartConvertPoint3dSpherToCartConvertPoint3dSpherToCart, create_cam_pose_look_at_pointcreate_cam_pose_look_at_pointCreateCamPoseLookAtPointCreateCamPoseLookAtPointCreateCamPoseLookAtPoint, trans_pose_shape_model_3dtrans_pose_shape_model_3dTransPoseShapeModel3dTransPoseShapeModel3dTransPoseShapeModel3d

Modul

3D Metrology