create_shape_model_3d
— Vorbereiten eines 3D-Objektmodells für das Matching.
create_shape_model_3d( : : ObjectModel3D, CamParam, RefRotX, RefRotY, RefRotZ, OrderOfRotation, LongitudeMin, LongitudeMax, LatitudeMin, LatitudeMax, CamRollMin, CamRollMax, DistMin, DistMax, MinContrast, GenParamName, GenParamValue : ShapeModel3DID)
create_shape_model_3d
bereitet ein 3D-Objektmodell, das in
ObjectModel3D
übergeben wird, als 3D-Formmodell für das
Matching vor. Das 3D-Objektmodell muss zuvor mit
read_object_model_3d
eingelesen worden sein.
Das erstellte 3D-Formmodell umfasst unterschiedliche Ansichten des
3D-Objektmodells. Die Ansichten werden innerhalb des vom Benutzer
vorgegebenen Pose-Bereichs generiert. Die Ansichtengenerierung
erfolgt durch das automatische Platzieren virtueller Kameras um das
3D-Objektmodell und das Projizieren des 3D-Objektmodells in die
Bildebene jeder virtuellen Kamera. Für jede auf diese Weise
erstellte Ansicht wird dann eine 2D-Formbeschreibung erzeugt.
Für die Erstellung des 3D-Formmodells werden also keine Bilder des
Objektes benötigt sondern lediglich das 3D-Objektmodell, das in
ObjectModel3D
übergeben wird. Die
Formbeschreibungen aller Ansichten werden im 3D-Formmmodell
gespeichert, das in ShapeModel3DID
zurückgeliefert
wird. Während des Matching-Prozesses mit find_shape_model_3d
werden die Formbeschreibungen dazu genutzt, die am besten passende
Ansicht zu ermitteln, deren Pose schließlich verfeinert und
zurückgegeben wird.
Um die Modellansichten korrekt erstellen zu können, müssen die
Parameter der zum Matching verwendeten Kamera in CamParam
übergeben werden. Die Kameraparameter sind notwendig um z.B. die
Skalierung der Projektionen mit Hilfe der Brennweite festzulegen.
Des weiteren werden sie benötigt, um radiale Verzeichnungen des
Objektivs korrekt berücksichtigen zu können. Daher ist es absolut
notwendig, die verwendete Kamera vor der Erstellung des
3D-Formmodells mit calibrate_cameras
zu kalibrieren. Auf
der einen Seite führt dies dazu, dass die von
find_shape_model_3d
zurückgegebenen Ergebnisse genauer
sind. Auf der anderen Seite wird dadurch die Anwendung des
3D-Matchings selbst für Objektive mit deutlichen radialen
Verzeichnungen ermöglicht.
Der Pose-Bereich, für den Modellansichten erstellt werden, kann mit
den Parametern RefRotX
, RefRotY
, RefRotZ
,
OrderOfRotation
, LongitudeMin
,
LongitudeMax
, LatitudeMin
, LatitudeMax
,
CamRollMin
, CamRollMax
, DistMin
und
DistMax
festgelegt werden.
Zu beachten ist, dass das Modell
nur dann während des Matchings erkannt wird, wenn es innerhalb des
angegebenen Pose-Bereichs liegt. Die Parameter werden im Folgenden
beschrieben:
Vor der Berechnung der Ansichten wird der Ursprung des
Koordinatensystems des 3D-Objektmodells in den Referenzpunkt des
3D-Objektmodells verschoben. Der Referenzpunkt ist der Mittelpunkt
des kleinsten umschließenden achsenparallelen Quaders und kann mit
get_object_model_3d_params
abgefragt werden. Die virtuellen
Kameras, die zum Erstellen der Ansichten verwendet werden, werden so
um das 3D-Objektmodell angeordnet, dass deren Blickrichtung auf den
Ursprung des Koordinatensystems gerichtet ist, d.h. die z-Achsen
der Kameras gehen durch den Ursprung. Der Pose-Bereich kann dann
dadurch angegeben werden, dass die Ansichten auf ein bestimmtes
Viereck auf einer Kugel um den Ursprung beschränkt werden. Dabei
bietet sich die Verwendung der sphärischen Koordinaten Länge, Breite
und Radius an. Das sphärische Koordinatensystem ist so gewählt, dass
die Äquatorebene der xz-Ebene des kartesischen Koordinatensystem
entspricht, wobei die y-Achse zum Südpol (negative Breite) und die
negative z-Achse zum Nullmeridian zeigt (vgl.
convert_point_3d_spher_to_cart
oder
convert_point_3d_cart_to_spher
für weitere Details zur
Konvertierung zwischen kartesischen und sphärischen
Koordinaten). Der Vorteil dieser Definition ist, dass eine Kamera
mit der Pose [0,0,z,0,0,0,0] ihr optisches Zentrum bei Länge=0,
Breite=0 und Radius=z hat. In diesem Fall entspricht der Radius der
Distanz des optischen Zentrums der Kamera zum Referenzpunkt des
3D-Objektmodells.
Der Längenbereich, für den Ansichten generiert werden sollen, kann
durch LongitudeMin
und LongitudeMax
angegeben
werden (beide im Bogenmaß). Entsprechend kann der Breitenbereich
durch LatitudeMin
und LatitudeMax
festgelegt
werden (ebenso im Bogenmaß). LongitudeMin
und
LongitudeMax
sind so eingestellt, dass sie einen Bereich von
360° beibehalten. Wenn eine Anpassung möglich ist,
bleiben LongitudeMin
und der Bereich erhalten. Die minimale
und maximale Distanz zwischen Kamerazentrum und Modell-Referenzpunkt können
in DistMin
und DistMax
übergeben werden.
Dabei befindet sich der Ursprung des Modells im Zentrum des kleinsten
einschließenden Quaders und stimmt nicht notwendigerweise mit dem Ursprung
des CAD-Koordinatensystems überein.
Zu beachten ist, dass die Distanzen in der Einheit Meter angegeben werden
müssen (davon ausgehend, dass der Parameter Scale
beim Einlesen
der CAD-Datei mit read_object_model_3d
korrekt gesetzt
wurde). Schließlich können in CamRollMin
und
CamRollMax
der minimale und maximale Rollwinkel der Kamera
angegeben werden. Dieses Intervall beschreibt die erlaubte
Kamerarotation um deren z-Achse bezüglich des 3D-Objektmodells.
Falls die Bildebene parallel zur Ebene liegt, auf der sich die
Objekte befinden, und bekannt ist, dass die Objekte in dieser Ebene
nur innerhalb eines eingeschränkten Bereichs rotieren, ist es
sinnvoll, diesen Bereich in CamRollMin
und
CamRollMax
anzugeben. In allen anderen Fällen ist die
Interpretation des Kamera-Rollwinkels schwierig. In diesen Fällen
sollte daher das Intervall auf gesetzt
sein. Zu beachten ist, dass je größer der Pose-Bereich gewählt wird
desto größer ist der Speicherbedarf für das Modell und desto
langsamer wird das Matching.
Die Orientierung des Koordinatensystems des 3D-Objektmodells ist
durch die Koordinaten innerhalb der mit
read_object_model_3d
eingelesenen CAD-Datei
festgelegt. Daher ist es sinnvoll, das 3D-Objektmodell vorab in eine
Referenzorientierung zu drehen, die ungefähr im Zentrum des
Pose-Bereiches liegt. Dies kann durch die Angabe entsprechender
Werte für RefRotX
, RefRotY
, RefRotZ
und
OrderOfRotation
erreicht werden. Die Rotation erfolgt dabei
um die Achsen des 3D-Objektmodells, dessen Ursprung in den
Referenzpunkt verschoben wurde. Folglich können die angegebenen
Längen- und Breitenbreiche als Variationen der 3D-Objektmodell-Pose
bezüglich der Referenzorientierung interpretiert werden. Die
Referenzorientierung kann auf zwei verschiedene Arten angegeben
werden. In der ersten Möglichkeit können die drei Rotationswinkel in
RefRotX
, RefRotY
und RefRotZ
und die
Reihenfolge, in der die Rotationen angewendet werden, übergeben
werden. Für die Rotationsreihenfolge kann dabei entweder
'gba' oder 'abg' gewählt werden. In der zweiten
Möglichkeit können die drei Komponenten des
Rodriguez-Rotationsvektors in RefRotX
, RefRotY
und
RefRotZ
übergeben werden. In diesem Fall muss für
OrderOfRotation
'rodriguez' übergeben werden (für
weitere Details über Rotationsreihenfolgen und die Definition des
Rodriguez-Vektors siehe create_pose
).
Demnach werden zwei Transformationen auf das 3D-Objektmodell angewendet bevor die Modellansichten erstellt werden. Die erste Transformation ist die Translation des Koordinatenursprungs in den Modell-Referenzpunkt. Die zweite Transformation ist die Rotation des 3D-Objektmodells in die gewünschte Referenzorientierung um die Achsen des Referenzkoordinatensystems. Durch Kombinieren beider Transformationen erhält man die Referenz-Pose des 3D-Formmodells. Demnach beschreibt die Referenz-Pose des 3D-Formmodells die Lage des Referenzkoordinatensystems bezüglich des durch die CAD-Datei definierten Koordinatensystems des 3D-Objektmodells. Seien t = (x,y,z)' die Koordinaten des Referenzpunktes des 3D-Objektmodells und R die Rotationsmatrix mit der Referenzorientierung. Dann wird ein Punkt , der im 3D-Objektmodellkoordinatensystem gegeben ist, durch die Anwendung der folgenden Formel in einen Punkt im Referenzkoordinatensystem des 3D-Formmodels transformiert:
Diese Transformation kann durch eine homogene
3D-Transformationsmatrix ausgedrückt werden oder alternativ dazu in
Form einer 3D-Lage. Letztere kann mit dem Operator
get_shape_model_3d_params
abgefragt werden, indem für
GenParamName
'reference_pose' übergeben
wird. Obige Formel kann man sich am besten als Pose des Pose-Typs 8,
10 oder 12 vorstellen, abhängig vom gewählten Wert für
OrderOfRotation
(für weitere Details über die verschiednen
Typen von Poses siehe create_pose
). Zu beachten ist
allerdings, dass die mit get_shape_model_3d_params
zurückgegebene Pose immer vom Typ 0 ist. Eine Pose, die in einem der
beiden Koordinatensysteme gegeben ist kann mit dem Operator
trans_pose_shape_model_3d
in das andere Koordinatensystem
transformiert werden.
Zu beachten ist außerdem, dass das Referenzkoordinatensystem nur
deswegen verwendet wird, um die Festlegung des Pose-Bereiches
möglichst einfach zu gestalten. Die beim 3D-Matching von
find_shape_model_3d
zurückgelieferte Pose bezieht sich
dagegen stets auf das ursprüngliche durch die CAD-Datei
definierten Koordinatensystems des 3D-Objektmodells.
Mit MinContrast
wird festgelegt, welchen Grauwertkontrast
das Modell später bei der Erkennung mit find_shape_model_3d
im Bild mindestens besitzen muss. Mit anderen Worten stellt dieser
Parameter somit eine Abgrenzung des Modells von Rauschen im Bild
dar. Eine gute Wahl ist deshalb der Bereich von Grauwertänderungen,
der durch das Rauschen im Bild verursacht wird. Falls die Grauwerte
z.B. in einem Bereich von 10 Graustufen durch Rauschen schwanken,
sollte MinContrast
auf 10 gesetzt werden. Falls
mehrkanalige Bilder für die Suchbilder verwendet werden, muss das
Rauschen in einem Kanal noch mit der Wurzel der Anzahl der Kanäle
multipliziert werden, um MinContrast
zu bestimmen. Falls
die Grauwerte in einem Kanal z.B. in einem Bereich von 10 Graustufen
schwanken, sollte MinContrast
bei einem dreikanaligen Bild
auf 17 gesetzt werden. Falls das Modell später in sehr kontrastarmen
Bildern erkannt werden soll, muss MinContrast
entsprechend
klein gewählt werden. Falls das Modell mit erheblichen Verdeckungen
erkannt werden soll, sollte MinContrast
etwas größer als
der Grauwertbereich, der durch das Rauschen verursacht wird, gewählt
werden, um eine robuste und genaue Lageschätzung des verdeckten
Modells mit find_shape_model_3d
zu gewährleisten.
Die oben beschriebenen Parameter sind anwendungsabhängig und müssen
demnach immer bei der Erstellung eines 3D-Formmodells angegeben
werden. Daneben gibt es generische Parameter, die optional
angegeben werden können, um die Modellerstellung zu
beeinflussen. Für die meisten Anwendungen brauchen 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 GenParamName
und
GenParamValue
übergeben werden. Die folgenden Werte für
GenParamName
sind möglich:
Aus Effizienzgründen
werden die Modellansichten auf mehreren Pyramidenebenen
erstellt. Auf höheren Ebenen werden weniger Ansichten generiert
als auf niedrigeren Ebenen. Mit dem Parameter
'num_levels' kann die Anzahl der Pyramidenebenen
angegeben werden. Sie sollte so groß wie möglich gewählt werden,
da hierdurch das Auffinden des Modells erheblich beschleunigt
wird. Bei der Wahl von 'num_levels' ist aber darauf zu
achten, dass die Formbeschreibungen der Ansichten auf der obersten
Pyramidenstufe noch erkennbar sind und genügend viele Punkte
besitzen (mindestens vier). Falls nicht genügend Modellpunkte für
eine bestimmte Ansicht erzeugt werden, wird diese Ansicht aus dem
Modell gelöscht und durch eine Ansicht auf einer darunter
liegenden Ebene ersetzt. Wenn für alle Ansichten einer Ebene nicht
genügend Modellpunkte erzeugt werden, wird die Anzahl der
Pyramidenstufen intern solange reduziert, bis auf der obersten
Pyramidenstufe für mindestens eine Ansicht genügend Modellpunkte
vorhanden sind. Falls durch diese Anpassung ein Modell mit keiner
Pyramidenstufe entstehen würde, d.h. falls für alle Ansichten
bereits auf der untersten Pyramidenstufe zu wenige Modellpunkte
vorhanden sind, liefert create_shape_model_3d
eine
Fehlermeldung zurück. Falls für 'num_levels'
'auto' (Default-Wert) übergeben wird, wählt
create_shape_model_3d
die Anzahl der Pyramidenstufen
automatisch. In diesem Fall werden die Ansichten aller
Pyramidenebenen dahingehend überprüft, ob die entsprechenden
Formbeschreibungen noch erkennbar sind. Stellt sich dabei heraus,
dass die Formbeschreibung zu unspezifisch ist, wird die
entsprechende Ansicht aus dem Modell entfernt und durch eine
Ansicht auf einer darunter liegenden Ebene ersetzt. Zu beachten
ist, dass es vorkommen kann, dass für unterschiedliche Ansichten
unterschiedlich viele Pyramidenebenen erstellt werden, wenn für
'num_levels' 'auto' übergeben wird, In seltenen
Fällen kann es vorkommen, dass create_shape_model_3d
die
Anzahl der Pyramidenstufen zu hoch oder zu niedrig bestimmt. Falls
die Anzahl der Pyramidenstufen zu hoch gewählt wird, kann das dazu
führen, dass das Modell im Bild nicht erkannt wird oder dass sehr
niedrige Parameter für MinScore
oder
Greediness
in find_shape_model_3d
selektiert
werden müssen, damit das Modell gefunden wird. Falls die Anzahl
der Pyramidenstufen zu niedrig gewählt wird, kann es zu erhöhten
Laufzeiten in find_shape_model_3d
kommen. In diesen
Fällen sollten die Ansichten auf den verschiedenen Pyramidenebenen
mit get_shape_model_3d_contours
überprüft werden.
Wertevorschläge: 'auto' , 3, 4, 5, 6
Defaultwert: 'auto'
Der Parameter
legt fest, ob die Pose-Verfeinerung während der Suche mit
find_shape_model_3d
in einem beschleunigten Modus
durchgeführt werden soll. Falls für
'fast_pose_refinement' 'false' gewählt wird,
kann die Pose-Verfeinerung bei komplexen Modellen mit vielen
Flächen einen signifikanten Teil der Rechenzeit ausmachen. Falls
für 'fast_pose_refinement' 'true' gewählt wird,
werden für die Pose-Verfeinerung notwendige Berechnungen bereits
während der Modellerzeugung ausgeführt und im Modell
gespeichert. Die Pose-Verfeinerung während der Suche geht dann
deutlich schneller. Zu beachten ist allerdings, dass die Größe des
Modells in diesem Fall deutlich anwachsen kann (typischerweise um
weniger als 30 Prozent). Außerdem ist zu beachten, dass es bei
find_shape_model_3d
in Abhängigkeit von der Wahl von
'fast_pose_refinement' zu leicht unterschiedlichen
Ergebnis-Posen kommen kann, da bei der Wahl von 'true'
intern die Pose-Verfeinerung approximiert wird.
Werteliste: 'true' , 'false' ,
Defaultwert: 'true'
In manchen
Fällen ist der Modellgenerierungsprozess sehr zeitaufwändig und
der Speicherbedarf des resultierenden Modells sehr hoch. Der
Grund hierfür ist, dass in diesen Fällen die Anzahl der Ansichten,
die generiert und im Modell gespeichert werden müssen, sehr hoch
ist. Je größer der Pose-Bereich gewählt wird und je größer die
Objekte im Bild erscheinen (gemessen in Pixeln), desto mehr
Ansichten werden benötigt. Vor allem die Verwendung von großen
Bildern (z.B. größer als 640×480 ) kann
folglich zu sehr großen Modellen führen. Da die Anzahl der
Ansichten auf den untersten Pyramidenebene am größten ist, bietet
der Parameter 'lowest_model_level' die Möglichkeit, die
unterste(n) Pyramidenebene(n) von der Ansichtengenerierung
auszuschließen. Der Wert, der für 'lowest_model_level'
übergeben wird, bestimmt die unterste Pyramidenebene, bis zu der
Ansichten generiert und im Modell gespeichert werden. Wird z.B.
für 'lowest_model_level' der Wert 2 übergeben,
verringert sich bei großen Modellen die Modellgenerierungszeit und
die Modellgröße auf ca. ein Drittel der ursprünglichen Werte.
Wird 'lowest_model_level' nicht angegeben, werden
Ansichten bis zur untersten Pyramidenebene generiert, was dem
Verhalten entspricht, wenn für 'lowest_model_level'
1 übergeben wird. Wird für 'lowest_model_level'
ein Wert größer als 1 übergeben, wird bei der späteren
Suche mit find_shape_model_3d
die Verfolgung der Matches
durch die Pyramide zunächst auf der angegebenen Ebene abgebrochen.
Wird bei find_shape_model_3d
für die Verfeinerung der
Posen allerdings ein Least-Squares Adjustment gewählt, werden die
Matches anschließend mit Hilfe des Least-Squares Adjustments auf
der untersten Ebene verfeinert. Zu beachten ist, dass für
verschiedene Werte von 'lowest_model_level' bei der Suche
unterschiedliche Matches gefunden werden können. Des weiteren ist
der Score der Matches abhängig von der bei der Suche gewählten
Verfeinerungsmethode. Außerdem ist zu beachten, dass je größer
'lowest_model_level' gewählt wird, desto größer wird der
Anteil der Verfeinerung an der Gesamtlaufzeit von
find_shape_model_3d
. Daher wirkt sich auch der Wert des
generischen Parameters 'fast_pose_refinement' (siehe
oben) mit größeren Werten für 'lowest_model_level'
stärker aus. Auf der einen Seite kann ein großer Wert für
'lowest_model_level' bei ausgeschaltetem
'fast_pose_refinement' ('false' ) zu sehr langen
Rechenzeiten während der Suche führen. Auf der anderen Seite kann
ein großer Wert für 'lowest_model_level' bei
eingeschaltetem 'fast_pose_refinement' ('true' )
zu ungenaueren Ergebnissen führen, da intern die Pose-Verfeinerung
nur approximiert wird. Der Wert für 'lowest_model_level'
sollte demnach so klein wie möglich gewählt werden.
Außerdem sollte 'lowest_model_level' so klein
gewählt werden, dass der Großteil der Kanten des
3D-Objektmodells auf dieser Pyramidenebene noch erkennbar sind.
Wertevorschläge: 1, 2, 3
Defaultwert: 1
Bei Modellen mit
besonders großen Ansichten kann es auch sinnvoll sein, die Anzahl
der Modellpunkte durch Setzen des Parameters
'optimization' auf einen Wert ungleich 'none' zu
setzen. Falls 'optimization' = 'none' , werden
alle Modellpunkte abgespeichert. Ansonsten wird die Anzahl der
Punkte entsprechend dem Parameter 'optimization'
reduziert. Falls die Anzahl der Punkte reduziert wird, kann es
bei find_shape_model_3d
notwendig werden, den Parameter
Greediness
auf einen kleineren Wert, z.B. 0.7 oder 0.8,
zu setzen. Bei Modellen mit kleineren Ansichten bewirkt die
Reduktion der Anzahl der Punkte keine Beschleunigung, da dadurch
typischerweise wesentlich mehr potentielle Instanzen des Modells
untersucht werden müssen. Falls für 'optimization'
'auto' übergeben wird, wählt
create_shape_model_3d
die Reduktion der Punkte
automatisch.
Werteliste: 'auto' , 'none' , 'point_reduction_low' , 'point_reduction_medium' , 'point_reduction_high'
Default value: 'auto'
Dieser Parameter legt fest,
unter welchen Bedingungen das Modell im Bild noch erkannt
wird. Wenn 'metric' = 'ignore_part_polarity' ,
dann darf sich die Kontrastpolarität nur zwischen verschiedenen
Modellteilen ändern, wohingegen die Polarität von Modellpunkten
innerhalb des selben Modellteils nicht wechseln darf. Zu beachten
ist, dass der Begriff 'ignore_part_polarity'
missverstanden werden kann. Er bedeutet, dass Polaritätswechsel
zwischen benachbarten Modellteilen den Score nicht beeinflussen
und daher ignoriert werden. Geeignete
Modellteile werden automatisch bestimmt. Die Größe der Teile kann
mit dem generischen Parameter 'part_size' , der weiter
unten beschrieben ist, festgelegt werden. Zu beachten ist, dass
diese Metrik nur mit einkanaligen Bildern verwendet werden kann.
Wird ein mit dieser Metrik generiertes Modell mit
find_shape_model_3d
in einem mehrkanaligen Bild gesucht,
wird ein Fehler zurückgegeben. Wenn 'metric' =
'ignore_local_polarity' , dann können Objekte auch dann
erkannt werden, wenn sich die Kontrastpolarität lokal für jeden
Modellpunkt ändert. Diese Metrik kann sowohl für die Suche in
einkanaligen als auch in mehrkanaligen Bildern verwendet werden.
Die Metrik 'ignore_part_polarity' sollte verwendet werden,
wenn das Objekt in Bildern mit starker Hintergrundtextur oder mit
Störobjekten gesucht werden soll, was ansonsten zu falschen
Matches führen würde. Zu beachten ist, dass der von
find_shape_model_3d
berechnete Score im Allgemeinen für
'ignore_part_polarity' kleiner ist als für
'ignore_local_polarity' . Dies sollte bei der Wahl von
MinScore
des Operators find_shape_model_3d
berücksichtigt werden.
Werteliste: 'ignore_local_polarity' , 'ignore_part_polarity'
Defaultwert: 'ignore_local_polarity'
Mit diesem Parameter wird die Größe der Objekteile festgelegt, die verwendet werden, wenn 'metric' auf 'ignore_part_polarity' (siehe oben) gesetzt wird. Die Größe muss in Pixeln angeben werden und sollte ungefähr zweimal so groß sein wie die Größe der Störtextur im Bild. Möchte man z.B. Objekte vor einem schachbrettartigen Hintergrund mit scharzen und weißen Quadraten der Größe 5×5 Pixel finden, dann sollte 'part_size' auf 10 gesetzt werden. Dabei ist zu beachten, dass größere Werte für 'part_size' den Score von korrekten Instanzen ebenfalls verringern kann. Dies kann vor allem bei Objekten mit glänzenden oder reflektierenden Oberflächen auftreten. Folglich kann ein höherer Wert für 'part_size' das Risiko erhöhen, richtige Instanzen nicht mehr finden zu können. Wurde für 'metric' 'ignore_local_polarity' gewählt, wird der Wert von 'part_size' ignoriert.
Wertevorschläge: 2, 3, 4, 6, 8, 10
Defaultwert: 4
Kanten des
3D-Objektmodells werden nur dann in die Formbeschreibung der
Ansichten übernommen, wenn der Winkel zwischen den beiden
benachbarten Flächen im 3D-Objektmodell, die diese Kante gemeinsam
haben, größer ist als 'min_face_angle' . Wird
'min_face_angle' auf 0.0 gesetzt, werden alle
Kanten übernommen. Wird 'min_face_angle' auf
(entspricht 180 Grad) gesetzt, wird nur die
Silhouette des 3D-Objektmodells übernommen. Dieser Parameter kann
insbesondere dafür verwendet werden, um Kanten in gekrümmten
Flächen, z.B. einer Zylinder- oder Kegeloberfläche, zu
unterdrücken. Gekrümmte Flächen werden durch eine Vielzahl ebener
Flächen approximiert. Die Kanten zwischen solchen Flächen sollten
nicht in die Formbeschreibung aufgenommen werden, da sie auch in
echten Bildern vom Modell nicht zu sehen sind. Deshalb sollte
'min_face_angle' genügend hoch gesetzt werden um solche
Kanten zu unterdrücken. Die Auswirkung unterschiedlicher Werte
für 'min_face_angle' kann vor dem Aufruf von
create_shape_model_3d
mit project_object_model_3d
überprüft werden. Zu beachten ist, dass wenn Kanten in die
Formbeschreibung aufgenommen werden, die im Suchbild nicht
sichtbar sind, die Matchingperformance (Robustheit und
Geschwindigkeit) deutlich absinken kann.
Wertevorschläge: 'rad(10)' , 'rad(20)' , 'rad(30)' , 'rad(45)'
Defaultwert: 'rad(30)'
Dieser Wert dient zur Selektion von signifikanten Komponenten des Modells basierend auf der Größe der Komponenten, d.h. zusammenhängende Komponenten, deren Anzahl von Punkten kleiner ist als diese Mindestgröße, werden unterdrückt. Dieser Schwellwert wird pro Pyramidenstufe halbiert.
Wertevorschläge: 'auto' , 0, 3, 5, 10, 20
Defaultwert: 'auto'
Der Parameter
spezifiziert die Toleranz der projizierten Kanten des
3D-Objektmodells im Bild (in Pixel). Je größer der Wert gewählt
wird, desto weniger Ansichten werden generiert. Ein größerer Wert
hat demnach zur Folge, dass das Modell zum einen weniger Speicher
benötigt und zum anderen schneller mit find_shape_model_3d
gefunden werden kann. Andererseits kann sich die Robustheit des
Matchings verringern, wenn für 'model_tolerance' ein zu
großer Wert gewählt wird. Daher sollte dieser Parameter nur mit
Sorgfalt verändert werden. Für die meisten Anwendungen stellt ein
Wert von 1 einen guten Kompromiss zwischen
Geschwindigkeit und Robustheit dar.
Wertevorschläge: 0, 1, 2
Defaultwert: 1
Dieser Parameter legt fest,
ob nach der Projektion mittels project_shape_model_3d
benachbarte
Konturen verbunden werden sollen.
Diese Option is äquivalent zu einem anschließenden Aufruf von
union_adjacent_contours_xld
, ist allerdings deutlich schneller.
Werteliste: 'true' , 'false'
Defaultwert: 'false'
Ist die Systemvariable (siehe set_system
)
'opengl_hidden_surface_removal_enable' auf
'true' gesetzt (Standard, sofern es verfügbar ist), wird die
Grafikkarte verwendet um die Berechnung der sichtbaren Flächen in den
Modellansichten zu beschleunigen. Abhängig von der verwendeten Grafikkarte
ist dies signifikant schneller als die analytische Sichtbarkeitsberechnung.
Ist 'fast_pose_refinement' auf 'true' gesetzt, werden
auch die Vorberechnungen für die Pose-Verfeinerung auf der Grafikkarte
durchgeführt. Es ist zu beachten, dass die Ergebnisse der OpenGL Projektion
leicht verschieden zu den Ergebnissen der analytischen Projektion sind.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
ObjectModel3D
(input_control) object_model_3d →
(handle)
Handle des 3D-Objektmodells.
CamParam
(input_control) campar →
(real / integer / string)
Interne Kameraparameter.
RefRotX
(input_control) angle.rad →
(real)
Referenzorientierung: Rotation um x-Achse bzw. x-Komponente des Rodriguez-Vektors (in Bogenmaß bzw. ohne Einheit).
Defaultwert: 0
Wertevorschläge: -1.57, -0.78, -0.17, 0., 0.17, 0.78, 1.57
RefRotY
(input_control) angle.rad →
(real)
Referenzorientierung: Rotation um y-Achse bzw. y-Komponente des Rodriguez-Vektors (in Bogenmaß bzw. ohne Einheit).
Defaultwert: 0
Wertevorschläge: -1.57, -0.78, -0.17, 0., 0.17, 0.78, 1.57
RefRotZ
(input_control) angle.rad →
(real)
Referenzorientierung: Rotation um z-Achse bzw. z-Komponente des Rodriguez-Vektors (in Bogenmaß bzw. ohne Einheit).
Defaultwert: 0
Wertevorschläge: -1.57, -0.78, -0.17, 0., 0.17, 0.78, 1.57
OrderOfRotation
(input_control) string →
(string)
Bedeutung der Rotationswerte der Referenzorientierung.
Defaultwert: 'gba'
Werteliste: 'abg' , 'gba' , 'rodriguez'
LongitudeMin
(input_control) angle.rad →
(real)
Kleinste geographische Länge der Modellansichten.
Defaultwert: -0.35
Wertevorschläge: -0.78, -0.35, -0.17
LongitudeMax
(input_control) angle.rad →
(real)
Größte geographische Länge der Modellansichten.
Defaultwert: 0.35
Wertevorschläge: 0.17, 0.35, 0.78
Restriktion: LongitudeMax >= LongitudeMin
LatitudeMin
(input_control) angle.rad →
(real)
Kleinste geographische Breite der Modellansichten.
Defaultwert: -0.35
Wertevorschläge: -0.78, -0.35, -0.17
Restriktion: - pi / 2 <= LatitudeMin && LatitudeMin <= pi / 2
LatitudeMax
(input_control) angle.rad →
(real)
Größte geographische Breite der Modellansichten.
Defaultwert: 0.35
Wertevorschläge: 0.17, 0.35, 0.78
Restriktion: - pi / 2 <= LatitudeMax && LatitudeMax <= pi / 2 && LatitudeMax >= LatitudeMin
CamRollMin
(input_control) angle.rad →
(real)
Kleinster Kamerarollwinkel der Modellansichten.
Defaultwert: -3.1416
Wertevorschläge: -3.14, -1.57, -0.39, 0.0, 0.39, 1.57, 3.14
CamRollMax
(input_control) angle.rad →
(real)
Größter Kamerarollwinkel der Modellansichten.
Defaultwert: 3.1416
Wertevorschläge: -3.14, -1.57, -0.39, 0.0, 0.39, 1.57, 3.14
Restriktion: CamRollMax >= CamRollMin
DistMin
(input_control) number →
(real)
Kleinster Kamera-Objekt-Abstand der Modellansichten.
Defaultwert: 0.3
Wertevorschläge: 0.05, 0.1, 0.2, 0.5
Restriktion: DistMin > 0
DistMax
(input_control) number →
(real)
Größter Kamera-Objekt-Abstand der Modellansichten.
Defaultwert: 0.4
Wertevorschläge: 0.1, 0.2, 0.5, 1.0
Restriktion: DistMax >= DistMin
MinContrast
(input_control) number →
(integer)
Minimaler Kontrast des Objektes in den Suchbildern.
Defaultwert: 10
Wertevorschläge: 1, 2, 3, 5, 7, 10, 20, 30, 1000, 2000, 5000
GenParamName
(input_control) attribute.name(-array) →
(string)
Namen von (optionalen) Parametern für die Steuerung des Verhaltens des Operators.
Defaultwert: []
Werteliste: 'fast_pose_refinement' , 'lowest_model_level' , 'metric' , 'min_face_angle' , 'min_size' , 'model_tolerance' , 'num_levels' , 'optimization' , 'part_size' , 'union_adjacent_contours'
GenParamValue
(input_control) attribute.name(-array) →
(integer / real / string)
Die zu den optionalen generischen Parametern gehörenden Werte.
Defaultwert: []
Wertevorschläge: 0, 1, 2, 3, 4, 6, 8, 10, 'auto' , 'none' , 'point_reduction_low' , 'point_reduction_medium' , 'point_reduction_high' , 0.1, 0.2, 0.3, 'ignore_local_polarity' , 'ignore_part_polarity' , 'true' , 'false'
ShapeModel3DID
(output_control) shape_model_3d →
(handle)
Handle des 3D-Formmodells.
Sind die Parameterwerte korrekt, dann liefert
create_shape_model_3d
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt. Wenn die Parameter so
gewählt worden sind, dass alle Modellansichten zu wenige Punkte
besitzen, wird die Fehlermeldung 8510 zurückgeliefert. Für den Fall,
dass das projizierte Modell in mindestens einer Ansicht größer als
die doppelte Bildgröße ist, wird die Fehlermeldung 8910
zurückgeliefert.
read_object_model_3d
,
project_object_model_3d
,
get_object_model_3d_params
find_shape_model_3d
,
write_shape_model_3d
,
project_shape_model_3d
,
get_shape_model_3d_params
,
get_shape_model_3d_contours
convert_point_3d_cart_to_spher
,
convert_point_3d_spher_to_cart
,
create_cam_pose_look_at_point
,
trans_pose_shape_model_3d
Markus Ulrich, Christian Wiedemann, Carsten Steger, „Combining Scale-Space and Similarity-Based Aspect Graphs for Fast 3D Object Recognition,“ IEEE Transactions on Pattern Analysis and Machine Intelligence, pp. 1902-1914, Oct., 2012.
3D Metrology