create_uncalib_descriptor_model
— Vorbereiten eines Deskriptormodells für Punkt-Matching.
create_uncalib_descriptor_model(Template : : DetectorType, DetectorParamName, DetectorParamValue, DescriptorParamName, DescriptorParamValue, Seed : ModelID)
Der Operator create_uncalib_descriptor_model
erstellt ein
Deskriptormodell einer Bildregion, die als das Bild
Template
übergeben wird. Mit Hilfe dieses Modells kann
deskriptorbasiertes Matching durchgeführt werden. Durch
anschließende Verwendung des Operators
find_uncalib_descriptor_model
kann damit eine projektive 2D
Abbildung (Homographie) von Template
zu einem Suchbild
ermittelt werden. Der Schwerpunkt des Bildregions im Template
wird als Ursprung des Models genommen. Im Gegensatz zu
create_calib_descriptor_model
ist hier keine kalibrierte Kamera
nötig, allerdings ist das Ergebnis eines nachfolgenden Matchings
lediglich eine 2D Projektion. Es ist zu beachten, dass der Teil des
Objektes, der in dem Template
-Bild zu sehen ist, planar sein muss.
Das Deskriptormodell beschreibt einen Satz von Merkmalspunkten. Es
speichert die Punktpositionen, sowie unterschiedlichen Beschreibungen
ihrer lokalen Bildumgebung. Die Extraktion dieser Merkmalspunkte
wird durch DetectorType
, DetectorParamName
und
DetectorParamValue
parametrisiert. Der zugehörige Deskriptor
für die Umgebung der Merkmalspunkte wird durch
DescriptorParamName
und DescriptorParamValue
parametrisiert. Derzeit wird der Deskriptor durch randomized
ferns implementiert. Der Parameter Seed
initialisiert den
Zufallszahlengenerator, der für den Aufbau der randomized
ferns Strukturen verwendet wird. Ist das Deskriptormodell generiert,
wird dessen Referenz in ModelID
zurückgegeben.
Durch Verwendung dieses Modells in find_uncalib_descriptor_model
kann ein schnelles, projektivinvariantes Matching zwischen Modell- und
Suchbild gewährleistet werden. Da das deskriptorbasierte Matching auf
der Existenz von stabilen und repräsentativen Merkmalspunkten basiert,
muss das detektierte Objekt ausreichend Textur aufweisen, die sich
nicht wiederholt.
Wie bereits erwähnt, ist der Detektor dafür
verantwortlich, stabile Merkmalspunkte aus dem Modellbild zu
extrahieren. Durch den Parameter DetectorType
kann
festgelegt werden, welcher Punktoperator verwendet werden
soll. Derzeit werden points_lepetit
, points_harris
oder dessen binomiale Approximation points_harris_binomial
unterstützt ('lepetit' , 'harris' ,
'harris_binomial' ). Bei Anwendung auf dunkle Modell- /
Suchbilder wird die Verwendung eines der Harris-Punktoperatoren
empfohlen. Je nach Wahl des Punktoperators DetectorType
müssen dessen Parameter eingestellt werden, was über
DetectorParamName
und DetectorParamValue
möglich
ist.
Gültige Parameternamen für DetectorParamName
und die
entsprechenden Defaultwerte sind:
['radius','check_neighbor', 'min_check_neighbor_diff','min_score','subpix']
[ 3, 1, 15, 30, 'interpolation']
['sigma_grad','sigma_smooth','alpha', 'threshold']
[ 0.7, 2.0, 0.08, 1000]
['mask_size_grd','mask_size_smooth', 'alpha','threshold','subpix']
[5, 15, 0.08, 1000, 'on']
Weitere Informationen über diese Parameter können unter der Beschreibung
von points_harris
, points_harris_binomial
beziehungsweise points_lepetit
gefunden werden. Für die
Parameter, die nicht explizit durch DetectorParamName
und
DetectorParamValue
gesetzt sind, werden die oben genannten Werte
für den entsprechenden Punktoperator genommen. Dementsprechend, wenn
sowohl DetectorParamName
als auch DetectorParamValue
auf [] gesetzt sind, werden diese Defaultwerte für alle Parameter
übernommen.
Beim Optimieren der Punktoperator-Parameter sollten zwischen 50 und
450 Merkmalspunkte extrahiert werden (je nach Textur und Bildgröße
von Template
). In den meisten Fällen ist es jedoch
ausreichend, die Defaultwerte zu übernehmen ([] in
DetectorParamName
und DetectorParamValue
eingeben).
Der Punktdeskriptor ist ein Klassifikator, der charakteristische
Beschreibungen der Grauwertnachbarschaft der Merkmalpunkte aufbaut.
Derzeit ist der Deskriptor durch die so genannten randomized
ferns implementiert. Diese entnehmen die Polarität der
Grauwertdifferenzen von zufällig ausgewählten Pixelpaaren
aus der Nachbarschaft des Punktes. Dieser Deskriptor wird danach in
find_uncalib_descriptor_model
verwendet, um Merkmalspunkte im
Suchbild zu klassifizieren, oder mit anderen Worten: um potentielle
Modellpunkte auch im Suchbild zu erkennen (matchen).
Der Deskriptor speichert nur die projektiv stabilen
Merkmalspunkte (die in vielen projektiven Ansichten des Modellbildes
auftauchen). Um die Stabilität einzelner Punkte zu bewerten,
wird die folgende Simulation durchgeführt: Template
wird
vielen affinen Transformationen ausgesetzt, und die Punkte, die in den
meisten Ansichten erscheinen, werden als stabil eingestuft.
Die affinen Transformationen gelten als eine gute Näherung zu
projektiven Transformationen in der lokalen Umgebung der Punkten.
Die folgenden Parameter des Deskriptors und seines Trainings können
mit DescriptorParamName
und DescriptorParamValue
gesetzt werden:
Deskriptorstrukturen-Parameter:
Tiefe des Farns, der für die Punktklassifikation verwendet wird. Ein tieferer Farn kann Merkmalspunkte besser unterscheiden. Andererseits steigt der Speicherbedarf bei Erhöhung der Tiefe um 2 an. Typische Werte sind [5 .. 11], Defaultwert ist 11.
Anzahl der Farne. Mehr Farne erhöhen die Erkennungsrobustheit, aber auch die Laufzeit der Punktdetektion. Soll der Speicherverbrauch des Deskriptormodells minimiert werden, sind viele Farne mit geringer Tiefe empfohlen (z.B. 'number_ferns' =150, 'depth' = 5). Soll hingegen die Detektionszeit verkürzt werden sind wenige Farne mit größerer Tiefe empfohlen (z.B. 'number_ferns' =10, 'depth' =11). Typische Werte sind [1 .. 150], Defaultwert ist 30.
Seitenlänge der quadratischen Umgebung eines Merkmalpunktes. Höhere Werte dieses Parameters können zu längeren Trainingszeiten führen. Typische Werte sind [15 .. 33], Defaultwert ist 17.
Die Parameter 'depth' , 'number_ferns' und 'patch_size' erlauben eine transparente Kontrolle über die Robustheit der Erkennung, die Geschwindigkeit und den Speicherverbrauch.
Simulationparameter:
Schalter für projektive Transformationen während des Simulationschrittes. Im eingeschalteten Zustand ('on' ), verbessert sich die Robustheit des Modells, indem Objekte mit größerer Neigung gefunden werden können. Im ausgeschalteten Zustand ('off' ) verkürzt sich die Trainingzeit deutlich, und das Modell kann immer noch projektiv transformierte Objekte erkennen. Mögliche Werte sind ['on' , 'off' ], Defaultwert ist 'on' .
Minimaler Rotationswinkel um den
Normalvektor des Template
-Bildes.
Typische Werte sind [-180 .. 0],
Defaultwert ist -180.
Maximaler Rotationswinkel um den
Normalvektor des Template
-Bildes.
Typische Werte sind [0 .. 180],
Defaultwert ist 180.
Minimaler Skalierungsfaktor
des Template
-Bildes.
Typische Werte sind [0.1 .. 1.0],
Defaultwert ist 0.5.
Maximaler Skalierungsfaktor
des Template
-Bildes.
Typische Werte sind [1.0 .. 3.5],
Defaultwert ist 1.4.
Die Parameter 'min_rot' , 'max_rot' ,
'min_scale' und 'max_scale' ermöglichen eine
manuelle Selektion der für das Training durch Affintransformationen
erzeugten Ansichten von Template
. Eine Einschränkung ist
insbesondere in Verbindung mit dem Parameter 'tilt' zur
Reduzierung der Trainingszeiten hilfreich. Es ist zu beachten, dass
die Einstellung dieser Parameter direkten Einfluss auf die
Ergebnisse von find_uncalib_descriptor_model
hat. Deshalb
sollten sie mit Bedacht verwendet werden. Falls die
Rotationsspanne beispielsweise auf 'min_rot' = -10 bis
'max_rot' = 10 eingeschränkt wird, ist es in
find_uncalib_descriptor_model
nicht möglich, Ansichten von
Template
zu finden, die außerhalb dieses Bereichs
liegen. Eine Einschränkung des Trainingsbereichs hat auch zur Folge,
dass weniger Farne / geringere Farntiefen nötig sind, um
Template
zu erkennen. Eine Ausweitung bedingt folglich mehr
Bäume / Baumtiefen.
Es ist zu beachten, dass das Training der randomized ferns je nach
Rechenleistung mehrere Sekunden bis zu wenigen Minuten dauern
kann. Aus diesem Grund kann ein generierter Fern mittels
write_descriptor_model
abgespeichert und mittels
read_descriptor_model
wieder geladen werden.
Alle Parameter sowie die Koordinaten der letztendlichen
Merkmalspunkte können über get_descriptor_model_params
und
get_descriptor_model_points
abgerufen werden.
create_uncalib_descriptor_model
legt den Detektor und den
Deskriptor fest. Somit werden beide auch bei jedem nachfolgenden
Aufruf von find_uncalib_descriptor_model
verwendet. Der
Referenzpunkt (Ursprung) des Modells ist der Schwerpunkt der ROI des
Templates. Er kann über set_descriptor_model_origin
geändert
werden.
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.
Template
(input_object) singlechannelimage →
object (byte / uint2)
Eingabebild, dessen Definitionsbereich zum Aufbau des Modells verwendet wird.
DetectorType
(input_control) string →
(string)
Art des Detectors.
Defaultwert: 'lepetit'
Werteliste: 'harris' , 'harris_binomial' , 'lepetit'
DetectorParamName
(input_control) attribute.name-array →
(string)
Namen der Detektor-Parameter.
Defaultwert: []
Werteliste: 'alpha' , 'check_neighbor' , 'mask_size_grd' , 'mask_size_smooth' , 'min_check_neighbor_diff' , 'min_score' , 'radius' , 'sigma_grad' , 'sigma_smooth' , 'subpix' , 'threshold'
DetectorParamValue
(input_control) attribute.value-array →
(integer / real / string)
Werte der Detektor-Parameter.
Defaultwert: []
Wertevorschläge: 0.08, 1, 1.2, 3, 15, 30, 1000, 'on' , 'off' , 'none' , 'interpolation'
DescriptorParamName
(input_control) attribute.name-array →
(string)
Namen der Deskriptor-Parameter.
Defaultwert: []
Werteliste: 'depth' , 'max_rot' , 'max_scale' , 'min_rot' , 'min_scale' , 'number_ferns' , 'patch_size' , 'tilt'
DescriptorParamValue
(input_control) attribute.value-array →
(integer / real / string)
Werte der Deskriptor-Parameter.
Defaultwert: []
Wertevorschläge: 0.5, 1.4, 11, 21, 30, -180, 180, 'on' , 'off'
Seed
(input_control) integer →
(integer)
Initialisierung des Zufallsgenerators.
Defaultwert: 42
ModelID
(output_control) descriptor_model →
(handle)
Der Handle des Deskriptormodells
points_lepetit
,
points_harris
,
reduce_domain
get_descriptor_model_params
,
find_uncalib_descriptor_model
get_descriptor_model_params
,
find_uncalib_descriptor_model
V. Lepetit and P. Fua: „Keypoint Recognition using Randomized Trees.„
IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 28,
Nr. 9, pp. 1465-1479, 2006.
M. Ozuysal, P. Fua, and V. Lepetit: „Fast Keypoint Recognition in Ten Lines
of Code.„
In Proceedings of Conference on Computer Vision and Pattern Recognition,
2007.
Matching