| Operatoren |
edges_image — Kantendetektion mit Deriche-, Lanser-, Shen- oder Canny-Filtern.
edges_image dient der Detektion von Stufenkanten mittels rekursiver Filter (nach Deriche, Lanser und Shen) bzw. mittels des konventionell über Filtermasken realisierten „Derivative of Gaussian“ Filter, den auch Canny verwendet. Zudem existiert eine sehr schnelle Variante des Sobel-Filters. Konkret stehen somit die Kantenoperatoren
'deriche1', 'lanser1', 'deriche1_int4', 'deriche2', 'lanser2', 'deriche2_int4', 'shen', 'mshen', 'canny' und 'sobel_fast'
zur Verfügung (Parameter Filter).
Die Kantenamplituden werden in ImaAmp zurückgeliefert.
Für alle Filter außer 'sobel_fast' werden die Kantenrichtungen in ImaDir zurückgeliefert. Für 'sobel_fast' wird die Kantenrichtung aus Geschwindigkeitsgründen nicht berechnet. Deshalb ist in diesem Fall ImaDir ein leeres Bildobjekt. Die Kantenoperatoren 'deriche1' bzw. 'deriche2' stehen auch für int4-Bilder zur Verfügung. In dem Fall liefert die Routine statt der Amplituden, also dem Betrag der Filterantwort, die eigentliche, vorzeichenbehaftete Filterantwort als int4-Bild. Dieses Verhalten lässt sich durch Verwendung von 'deriche1_int4' bzw. 'deriche2_int4' auch für Byte-Bilder erzwingen. Auf die vorzeichenbehafteten Filterantworten lässt sich edges_image (mit Parameter 'lanser2') neuerlich anwenden, um die zweite Ableitung im Bild zu bestimmen. Die Kantenrichtungen werden in 2-Grad-Schritten kodiert, d.h. eine Kantenrichtung von x Grad (im mathematisch positiven Sinn und bezogen auf die Horizontale) wird zu x / 2 im entsprechenden Ergebnisbild. Außerdem wird auch die Richtung der Helligkeitsänderung berücksichtigt. Bezeichnet den Bildgradienten, ergeben sich folgende Kantenrichtungen r (zurückgeliefert als ) zwischen 0 und 359 Grad:
Die „Filterbreite“ (i.e. das Einzugsgebiet der Filter) ist für alle Filter außer 'sobel_fast' (wo die Filtergröße 3x3 ist und Alpha ignoriert wird) frei wählbar und mittels info_edges für konkrete Werte des Parameters Alpha abzuschätzen. Sie nimmt bei den Deriche-, Lanser- und Shen-Filtern mit Alpha ab bzw. beim Canny-Filter zu (Alpha ist in diesem Fall die Standardabweichung der zugrundeliegenden Gaußfunktion). „Breite“ Filter weisen eine höhere Rauschinvarianz, aber auch ein verringertes Auflösungsvermögen für Bilddetails auf. Nicht-rekursive Filter, wie hier die Canny-Filter, werden häufig mittels Filtermasken realisiert. In diesem Fall erhöht sich die Laufzeit natürlich mit wachsender Filterbreite. Die Laufzeit der rekursiver Filter ist hingegen konstant. Das Einzugsgebiet der Deriche-, Lanser bzw. Shen-Filter ist also ohne Mehraufwand beliebig vergrößerbar. Der daraus resultierennde Laufzeitvorteil gegenüber dem Canny-Operator nimmt naturgemäß mit wachsender „Filterbreite“ zu. Zur Randbehandlung wird bei den rekursiven Filtern angenommen, das Bildsignal falle außerhalb des Bildes auf Null ab. Beim Canny-Operator wird hingegen das Bild durch „Vervielfachung“ der Randpunkte fortgesetzt. Vergleichbare Einzugsgebiete der Filter erhält man bei folgender Wahl von Alpha:
Alpha('lanser1') = Alpha('deriche1'),
Alpha('deriche2') = Alpha('deriche1') / 2,
Alpha('lanser2') = Alpha('deriche2'),
Alpha('shen') = Alpha('deriche1') / 2,
Alpha('mshen') = Alpha('shen'),
Alpha('canny') = 1.77 / Alpha('deriche1').
Die hier eingesetzten rekursiven Filter verzerren in ihrer
ursprünglichen Form ('deriche1', 'deriche2', 'shen') die Amplituden
diagonaler Kanten. Diese Fehler sind in den zugehörigen
modifizierten Operatoren 'lanser1', 'lanser2' und 'mshen' (bei
unveränderter Laufzeit) beseitigt.
Bei relativ kleinem Einzugsgebiet der Filter (11 x 11) Bildpunkte, etwa für Alpha ('lanser2' = 0.5) liefern alle (modifizierten) Operatoren praktisch identische Ergebnisse. Erst bei „breiteren“ Filtern zeigen sich Unterschiede: Insbesondere fallen dann die Shen-basierten Operatoren qualitativ ab. Allerdings sind sie die schnellsten der implementierten Operatoren --- dicht gefolgt von den Deriche-Operatoren.
edges_image bietet (optional) die Weiterverarbeitung der Filterergebnisse mittels Non-Maximum-Suppression (NMS = 'nms'/'inms'/'hvnms', sonst Wert 'none') und Hysterese-Schwellenwertoperation (Low,High, falls nicht erwünscht: einer der Werte negativ). Dies entspricht im wesentlichen nachfolgenden Aufrufen der Routinen
nonmax_suppression_dir(...,NMS,...) und
hysteresis_threshold(...,Low,High,999,...).
Die Hysterese-Schwellenwertoperation wird nicht angewandt, wenn NMS auf 'none' gesetzt ist.
Für 'sobel_fast' wird für alle Werte von NMS außer 'none' dieselbe Non-Maximum-Suppression ausgeführt. Zusätzlich wird für 'sobel_fast' auch noch eine Verdünnung der Kanten auf ein Pixel Breite durchgeführt.
edges_image kann für die Filtertypen 'canny' und 'sobel_fast' auf OpenCL Geräten ausgeführt werden.
Die OpenCL-Implementierung von edges_image wird generell von der CPU-Implementierung abweichende Ergebnisse berechnen.
Da edges_image für den 'canny'-Filter intern Gauss-Faltung verwendet, gelten dieselben Einschränkungen wie für derivate_gauss: Alpha muss so gewählt werden, dass die resultierende Filtermaske kleiner als 129 Pixel ist.
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.
Eingabebilder.
Amplitudenbilder.
Richtungsbilder.
Gewünschter Kanten-Operator.
Defaultwert: 'canny'
Werteliste: 'canny', 'deriche1', 'deriche1_int4', 'deriche2', 'deriche2_int4', 'lanser1', 'lanser2', 'mshen', 'shen', 'sobel_fast'
Werteliste (für Compute Devices): 'canny', 'sobel_fast'
Filterparameter: kleine Werte bewirken starke Glättung, also auch weniger Bilddetails (bei 'canny' umgekehrt).
Defaultwert: 1.0
Wertevorschläge: 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.9, 1.1
Typischer Wertebereich: 0.2 ≤ Alpha ≤ 50.0
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.1
Restriktion: Alpha > 0.0
Non-Maximum Suppression ('none', falls nicht erwünscht).
Defaultwert: 'nms'
Werteliste: 'hvnms', 'inms', 'nms', 'none'
Untere Schwelle für Hysterese-Schwellenwertoperation (negativ, falls keine Schwellenwertbildung erwünscht).
Defaultwert: 20
Wertevorschläge: 5, 10, 15, 20, 25, 30, 40
Typischer Wertebereich: 1 ≤ Low ≤ 255
Minimale Schrittweite: 1
Empfohlene Schrittweite: 5
Restriktion: Low > 1 || Low < 0
Obere Schwelle für Hysterese-Schwellenwertoperation (negativ, falls keine Schwellenwertbildung erwünscht).
Defaultwert: 40
Wertevorschläge: 10, 15, 20, 25, 30, 40, 50, 60, 70
Typischer Wertebereich: 1 ≤ High ≤ 255
Minimale Schrittweite: 1
Empfohlene Schrittweite: 5
Restriktion: High > 1 || High < 0 && High >= Low
read_image(Image,'fabrik') edges_image(Image,Amp,Dir,'lanser2',0.5,'none',-1,-1) hysteresis_threshold(Amp,Margin,20,30,30)
Sind die Parameterwerte korrekt und tritt kein Fehler während der Berechnung auf, liefert edges_image 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.
threshold, hysteresis_threshold, close_edges_length
sobel_dir, frei_dir, kirsch_dir, prewitt_dir, robinson_dir
info_edges, nonmax_suppression_amp, hysteresis_threshold, bandpass_image
S.Lanser, W.Eckstein: „Eine Modifikation des Deriche-Verfahrens zur
Kantendetektion“; 13. DAGM-Symposium, München; Informatik
Fachberichte 290; Seite 151 - 158; Springer-Verlag; 1991.
S.Lanser: „Detektion von Stufenkanten mittels rekursiver Filter
nach Deriche“; Diplomarbeit; Technische Universität München,
Institut für Informatik, Lehrstuhl Prof. Radig; 1991.
J.Canny: „Finding Edges and Lines in Images“; Report, AI-TR-720;
M.I.T. Artificial Intelligence Lab., Cambridge; 1983.
J.Canny: „A Computational Approach to Edge Detection“; IEEE
Transactions on Pattern Analysis and Machine Intelligence; PAMI-8,
vol. 6; S. 679-698; 1986.
R.Deriche: „Using Canny's Criteria to Derive a Recursively
Implemented Optimal Edge Detector“; International Journal of
Computer Vision; vol. 1, no. 2; S. 167-187; 1987.
R.Deriche: „Optimal Edge Detection Using Recursive Filtering“;
Proc. of the First International Conference on Computer Vision,
London; S. 501-505; 1987.
R.Deriche: „Fast Algorithms for Low-Level Vision“; IEEE
Transactions on Pattern Analysis and Machine Intelligence; PAMI-12,
no. 1; S. 78-87; 1990.
S.Castan, J.Zhao und J.Shen: „Optimal Filter for Edge Detection
Methods and Results“; Proc. of the First European Conference on
Computer Vision, Antibes; Lecture Notes on computer Science;
no. 427; S. 12-17; Springer-Verlag; 1990.
Foundation
| Operatoren |