points_sojka
— Findet Ecken mit dem Sojka-Operator.
points_sojka(Image : : MaskSize, SigmaW, SigmaD, MinGrad, MinApparentness, MinAngle, Subpix : Row, Column)
points_sojka
definiert eine Ecke als den Schnittpunkt zweier
gerader, nicht kollinearer Grauwertkanten. Es wird für jeden Bildpunkt
im Eingabebild Image
eine Nachbarschaft von
MaskSize
x
MaskSize
Punkten betrachtet, um zu entscheiden, ob es sich
dabei um einen Eckpunkt handeln kann. Innerhalb dieser Umgebung werden
wiederum nur diejenigen Bildbereiche berücksichtigt, die für diese
Entscheidung relevant sind. Pixel, in denen der Gradient nicht mindestens
MinGrad
beträgt, werden von vornherein verworfen.
Weiterhin werden
von den verbliebenen Punkten nur diejenigen verwendet, die zu einer der
beiden Grauwertkanten gehören, die die Ecke bilden. Dazu wird die sogenannte
Apparentness berechnet, die ein Maß für die
Wahrscheinlichkeit ist,
dass der untersuchte Punkt tatsächlich ein Eckpunkt ist. Sie wird im
Wesentlichen durch die Anzahl der relevanten Punkte und die Stärke der
Grauwertgradienten in ihnen bestimmt. Ein Punkt wird nur dann als Ecke
akzeptiert, wenn seine Apparentness mindestens
MinApparentness
ist. Typische Werte für MinApparentness
liegen in der Größenordnung von wenigen Vielfachen von MinGrad
.
Um die Apparentness zu berechnen, wird jeder Punkt
noch nach zwei Kriterien gewichtet:
Zum Einen wird der Abstand des Punktes zur (vermuteten) idealen
Grauwertkante abgeschätzt und der Punkt mit einer Gaußfunktion der Größe
SigmaD
entsprechend diesem Abstand gewichtet. D.h. Pixel, die
auf Grund der Diskretisierung des Eingabebildes von der idealen
Grauwertkante weiter entfernt sind, haben einen geringeren Einfluss
auf das Ergebnis, als solche mit einem geringeren Abstand. Im allgemeinen
ist es nicht notwendig, den Defaultwert 0.75 von SigmaD
zu ändern.
Zum Anderen wird der Einfluss eines Maskenpunkts mit einer Gaußfunktion
der Größe SigmaW
entsprechend seiner Entfernung zum
möglichen Eckpunkt gewichtet. Um ein vernünftiges Verhältnis
der Größe der Gewichtungsfunktion zur Maskengröße MaskSize
zu
erhalten, sollte SigmaW
in etwa ein Viertel bis die Hälfte
von MaskSize
betragen.
Als weiteres Entscheidungskriterium wird noch der Winkel,
um den sich die Richtung der Grauwertkanten im Eckpunkt verändert,
berechnet. Ein Punkt kann nur als Ecke akzeptiert werden, wenn dieser
Winkel größer als MinAngle
ist.
Die Positionen der gefundenen Eckpunkte werden in
(Row
, Column
) zurückgegeben. Je nach dem ob
Subpix
'true' oder 'false' ist, werden
Row
und Column
subpixelgenau berechnet oder nicht.
Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.
Image
(input_object) singlechannelimage →
object (byte / int1 / int2 / uint2 / int4 / real)
Eingabebild.
MaskSize
(input_control) integer →
(integer)
Gewünschte Filtergröße.
Defaultwert: 9
Werteliste: 5, 7, 9, 11, 13
SigmaW
(input_control) number →
(real / integer)
Sigma der Gewichtungsfunktion entsprechend der Entfernung zum möglichen Eckpunkt.
Defaultwert: 2.5
Wertevorschläge: 2.0, 2.2, 2.4, 2.5, 2.6, 2.8, 3.0
SigmaD
(input_control) number →
(real / integer)
Sigma der Gewichtungsfunktion für den Abstand zur idealen Grauwertkante.
Defaultwert: 0.75
Wertevorschläge: 0.6, 0.7, 0.75, 0.8, 0.9, 1.0
Restriktion: 0.6 <= SigmaD && SigmaD <= 1.0
MinGrad
(input_control) number →
(real / integer)
Schwelle für die Stärke das Gradienten.
Defaultwert: 30.0
Wertevorschläge: 20.0, 15.0, 30.0, 35.0, 40.0
MinApparentness
(input_control) number →
(real / integer)
Schwelle für Apparentness.
Defaultwert: 90.0
Wertevorschläge: 30.0, 60.0, 90.0, 150.0, 300.0, 600.0, 1500.0
MinAngle
(input_control) angle.rad →
(real)
Schwelle für die Richtungsänderung in einem Eckpunkt (Bogenmaß).
Defaultwert: 0.5
Restriktion: 0.0 <= MinAngle && MinAngle <= pi
Subpix
(input_control) string →
(string)
Subpixelgenaue Berechnung der Eckpunkte.
Defaultwert: 'false'
Werteliste: 'false' , 'true'
Row
(output_control) point.y-array →
(real)
Zeilenkoordinaten der gefundenen Eckpunkte.
Column
(output_control) point.x-array →
(real)
Spaltenkoordinaten der gefundenen Eckpunkte.
Sind die Parameterwerte korrekt und tritt kein Fehler während der
Berechnung auf, liefert points_sojka
den Wert 2 (H_MSG_TRUE). Das
Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt
sich mittels set_system('no_object_result',<Result>)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
Eduard Sojka: „A New and Efficient Algorithm for Detecting the Corners in Digital Images“. Pattern Recognition, Luc Van Gool (Editor), LNCS 2449, pp. 125-132, Springer Verlag, 2002.
Foundation