| Operatoren |
points_foerstner — Suche nach signifikanten Punkten mittels des Förstner-Operators.
points_foerstner(Image : : SigmaGrad, SigmaInt, SigmaPoints, ThreshInhom, ThreshShape, Smoothing, EliminateDoublets : RowJunctions, ColumnJunctions, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColumnArea, CoRRArea, CoRCArea, CoCCArea)
points_foerstner extrahiert signifikante Punkte aus einem Bild. Signifikante Punkte sind Punkte im Bild, die sich von ihrer Umgebung unterscheiden, also Punkte, an denen sich das Bildsignal zweidimensional ändert. Diese Änderung tritt zum einen an den Schnittpunkte von Grauwertkanten auf (sogenannte Kreuzungspunkte), zum anderen an Stellen, deren Farbe oder Helligkeit sich von ihrer Umgebung unterscheidet (sogenannte Flächenpunkte).
Die Punkextraktion erfolgt in zwei Stufen: Im ersten Schritt werden die Punktregionen, also inhomogene Regionen mit hoher Isotropie, aus dem Eingabebild extrahiert. Dazu wird die geglättete Matrix
Inhomogenität = Spur(M)das Maß für die Inhomogenität im Bild und
Im zweiten Schritt werden für diese Punkte zwei Optimierungsfunktionen berechnet. Diese Optimierungsfunktionen geben im Wesentlichen für jeden Bildpunkt die durchschnittlichen Abstände zu den Kanten- (Kreuzungspunkte) bzw. Gradientenrichtungen (Flächenpunkte) innerhalb eines Beobachtungsfensters um den Punkt wieder. Für Smoothing = 'gauss' erfolgt die Durchschnittsbildung mit einem Gaußfilter der Größe SigmaPoints. Für Smoothing = 'mean' erfolgt die Durchschnittsbildung mit einem SigmaPoints x SigmaPoints Mittelwertfilter. Die lokalen Minima der Optimierungsfunktionen ergeben die signifikanten Punkte. Ihre Position wird subpixelgenau in (RowJunctions, ColumnJunctions) und (RowArea, ColumnArea) zurückgegeben.
Neben der Position werden für jeden gefundenen Punkt auch die Elemente CoRRJunctions, CoRCJunctions und CoCCJunctions (bzw. CoRRArea, CoRCArea und CoCCArea) seiner Kovarianzmatrix zurückgegeben. Diese erlaubt Rückschlüsse auf die Genauigkeit der gefundenen Punktposition. Um die tatsächlichen Werte zu erhalten, ist es notwendig, im Eingabebild die Stärke des Rauschens zu ermitteln und anschließend alle Komponenten der Kovarianzmatrix mit der Varianz des Rauschens zu multiplizieren. (Die Stärke des Rauschens ermittelt man z.B., indem man auf Bildbereiche mit konstantem Grauwert intensity oder auf Bildbereiche mit einem rampenförmigen Grauwertverlauf plane_deviation anwendet. In beiden Fällen wird die Stärke des Rauschens im Parameter Deviation zurückgegeben.) Das Beispielprogram
%HALCONEXAMPLES%\hdevelop\Filter\Points\points_foerstner_ellipses.hdevillustriert diesen Sachverhalt.
Es liegt in der Natur dieses Operators, dass an Ecken häufig zwei separate Punkte erkannt werden: Ein Kreuzungspunkt im Schnittpunkt der Kanten der Ecke und ein Flächenpunkt etwas weiter im Inneren der Ecke. Solche Doubletten werden automatisch eliminiert, wenn man EliminateDoublets auf 'true' setzt. Dazu werden alle möglichen Paare von jeweils einem Kreuzungs- und Flächenpunkt untersucht. Liegen die Punkte innerhalb des Beobachtungsfensters der Optimierungsfunktion des jeweiligen anderen Punktes, dann wird für beide Punkte die Genauigkeit ihrer Position berechnet und der Punkt mit der geringeren Genauigkeit verworfen. Ist EliminateDoublets 'false', so werden alle gefundenen Punkte zurückgegeben.
Es ist zu beachten, dass für Smoothing = 'mean', nur ungerade Werte für SigmaInt und SigmaPoints zulässig sind. Gerade Werte werden automatisch durch den nächstgrößeren ungeraden Wert ersetzt.
points_foerstner mit Smoothing = 'gauss' wird durch SSE2 Instruktionen beschleunigt, falls der Systemparameter 'sse2_enable' auf 'true' gesetzt ist (dies ist Standard, sofern SSE2 auf Ihrem Rechner verfügbar ist). Diese Implementierung ist aufgrund numerischer Probleme im Vergleich zur reinen C Version etwas ungenauer (für 'byte' Bilder bewegt sich der Unterschied von RowJunctions und ColumnJunctions in einer Größenordnung von 1.0e-5). Falls für Ihre Anwendung Genauigkeit wichtiger ist als Geschwindigkeit können Sie 'sse2_enable' auf 'false' setzen, bevor Sie points_foerstner aufrufen. Dadurch verwendet points_foerstner keine SSE2 Beschleunigungen. Vergessen Sie nicht 'sse2_enable' danach wieder auf 'true' zu setzen.
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.
Eingabebild.
Stärke der Glättung zur Berechnung des Gradienten. Für Smoothing = 'mean' wird SigmaGrad ignoriert.
Defaultwert: 1.0
Wertevorschläge: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0
Typischer Wertebereich: 0.7 ≤ SigmaGrad ≤ 50.0
Empfohlene Schrittweite: 0.1
Restriktion: SigmaGrad > 0.0
Stärke der Glättung zur Integration der Gradienten.
Defaultwert: 2.0
Wertevorschläge: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0
Typischer Wertebereich: 0.7 ≤ SigmaInt ≤ 50.0
Empfohlene Schrittweite: 0.1
Restriktion: SigmaInt > 0.0
Stärke der Glättung in den Optimierungsfunktionen.
Defaultwert: 3.0
Wertevorschläge: 0.7, 0.8, 0.9, 1.0, 1.2, 1.5, 2.0, 3.0
Typischer Wertebereich: 0.7 ≤ SigmaPoints ≤ 50.0
Empfohlene Schrittweite: 0.1
Restriktion: SigmaPoints >= SigmaInt && SigmaPoints > 0.6
Schwellwert zur Bestimmung inhomogener Bildbereiche.
Defaultwert: 200
Wertevorschläge: 50, 100, 200, 500, 1000
Restriktion: ThreshInhom >= 0.0
Schwellwert zur Bestimmung der Punktregionen.
Defaultwert: 0.3
Wertevorschläge: 0.1, 0.2, 0.3, 0.4, 0.5, 0.7
Typischer Wertebereich: 0.01 ≤ ThreshShape ≤ 1
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.1
Restriktion: 0.0 <= ThreshShape && ThreshShape <= 1.0
Verwendetes Glättungsverfahren.
Defaultwert: 'gauss'
Werteliste: 'gauss', 'mean'
Beseitigung mehrfach erkannter Punkte.
Defaultwert: 'false'
Werteliste: 'false', 'true'
Zeilenkoordinaten der gefundenen Kreuzungspunkte.
Spaltenkoordinaten der gefundenen Kreuzungspunkte.
Zeilenanteil der Kovarianzmatrix der gefundenen Kreuzungspunkte.
Gemischter Anteil der Kovarianzmatrix der gefundenen Kreuzungspunkte.
Spaltenanteil der Kovarianzmatrix der gefundenen Kreuzungspunkte.
Zeilenkoordinaten der gefundenen Flächenpunkte.
Spaltenkoordinaten der gefundenen Flächenpunkte.
Zeilenanteil der Kovarianzmatrix der gefundenen Flächenpunkte.
Gemischter Anteil der Kovarianzmatrix der gefundenen Flächenpunkte.
Spaltenanteil der Kovarianzmatrix der gefundenen Flächenpunkte.
Sind die Parameterwerte korrekt und tritt kein Fehler während der Berechnung auf, liefert points_foerstner 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.
gen_cross_contour_xld, disp_cross
points_harris, points_lepetit, points_harris_binomial
W. Förstner, E. Gülch: „A Fast Operator for Detection and Precise
Location of Distinct Points, Corners and Circular features“. In
Proceedings of the Intercommission Conference on Fast Processing of
Photogrametric Data, Interlaken, pp. 281-305, 1987.
W. Förstner: „Statistische Verfahren für die automatische
Bildanalyse und ihre Bewertung bei der Objekterkennung und
-vermessung“. Volume 370, Series C, Deutsche Geodätische
Kommission, München, 1991.
W. Förstner: „A Framework for Low Level Feature
Extraction“. European Conference on Computer Vision, LNCS 802,
pp. 383-394, Springer Verlag, 1994.
C. Fuchs: „Extraktion polymorpher Bildstrukturen und ihre
topologische und geometrische Gruppierung“. Volume 502, Series C,
Deutsche Geodätische Kommission, München, 1998.
Foundation
| Operatoren |