| Operatoren |
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.
Eingabebild.
Gewünschte Filtergröße.
Defaultwert: 9
Werteliste: 5, 7, 9, 11, 13
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
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
Schwelle für die Stärke das Gradienten.
Defaultwert: 30.0
Wertevorschläge: 20.0, 15.0, 30.0, 35.0, 40.0
Schwelle für Apparentness.
Defaultwert: 90.0
Wertevorschläge: 30.0, 60.0, 90.0, 150.0, 300.0, 600.0, 1500.0
Schwelle für die Richtungsänderung in einem Eckpunkt (Bogenmaß).
Defaultwert: 0.5
Restriktion: 0.0 <= MinAngle && MinAngle <= pi
Subpixelgenaue Berechnung der Eckpunkte.
Defaultwert: 'false'
Werteliste: 'false', 'true'
Zeilenkoordinaten der gefundenen Eckpunkte.
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
| Operatoren |