edges_coloredges_colorEdgesColoredges_colorEdgesColorEdgesColor extrahiert Farbkanten aus dem Eingabebild
ImageImageImageImageImageimage. Zur Definition von Farbkanten wird das mehrkanalige
Bild ImageImageImageImageImageimage als Abbildung betrachtet, wobei n der Anzahl der Kanäle in
ImageImageImageImageImageimage entspricht. Für solche Funktionen existiert eine
natürliche Erweiterung des Gradienten: der metrische Tensor
G, welcher es erlaubt, die Größe der Veränderung von
f für jede beliebige Richtung, die durch den
Richtungsvektor v gegeben ist, zu berechnen. Zur
Vereinfachung der Notation wird G als zweidimensionale
Matrix betrachtet. Damit kann die Größe der Veränderung von
f in Richtung v durch
berechnet werden. Dabei ist
Zur Kantenextraktion werden, wie auch bei edges_imageedges_imageEdgesImageedges_imageEdgesImageEdgesImage, die
partiellen Ableitungen der Bilder, die im metrischen Tensor
berechnet werden müssen, mit den jeweiligen Kantenfiltern
berechnet. Für FilterFilterFilterFilterFilterfilter = 'canny'"canny""canny""canny""canny""canny" werden die
partiellen Ableitungen der Gaußmasken (siehe
derivate_gaussderivate_gaussDerivateGaussderivate_gaussDerivateGaussDerivateGauss) verwendet, für FilterFilterFilterFilterFilterfilter =
'deriche1'"deriche1""deriche1""deriche1""deriche1""deriche1" und FilterFilterFilterFilterFilterfilter = 'deriche2'"deriche2""deriche2""deriche2""deriche2""deriche2" die
entsprechenden Deriche-Filter, für FilterFilterFilterFilterFilterfilter =
'shen'"shen""shen""shen""shen""shen" die entsprechenden Shen-Filter und für
FilterFilterFilterFilterFilterfilter = 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" der Sobel-Filter. Wie bei
einkanaligen Bildern wird die Gradientenrichtung dadurch definiert,
dass die Größe der Veränderung von f in der Richtung
v maximal ist. Diese Richtung ist gegeben durch den
Eigenvektor von G, der zum größten Eigenwert von
G gehört. Die Wurzel aus dem größten Eigenwert ist das
Äquivalent des Gradientenbetrags (der Amplitude) bei einkanaligen
Bildern. Sie wird in ImaAmpImaAmpImaAmpImaAmpImaAmpimaAmp zurückgeliefert. Für
einkanalige Bilder sind beide Definitionen äquivalent. Da der
Gradientenbetrag sich potentiell nicht im Eingabedatentyp (byte oder
uint2) darstellen lässt, wird in ImaAmpImaAmpImaAmpImaAmpImaAmpimaAmp der
nächstgrößere Datentyp (uint2 oder int4) verwendet. Der
Eigenvektor liefert gleichzeitig auch die Kantenrichtung. Diese
ist, im Gegensatz zu einkanaligen Bildern, nur modulo 180 Grad
definiert. Die Kantenrichtungen werden wie bei edges_imageedges_imageEdgesImageedges_imageEdgesImageEdgesImage
in 2-Grad-Schritten kodiert und in ImaDirImaDirImaDirImaDirImaDirimaDir zurückgeliefert.
In Bildpunkten mit Kantenamplitude 0 wird als Kantenrichtung der
Wert 255 (undefinierte Richtung) zurückgeliefert. Aus
Geschwindigkeitsgründen wird für FilterFilterFilterFilterFilterfilter =
'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" das Richtungsbild nicht explizit berechnet,
und kann somit nicht zurückgegeben werden. In diesem Fall ist
ImaDirImaDirImaDirImaDirImaDirimaDir ein leeres Bildobjekt.
Die „Filterbreite“ (d.h. das Einzugsgebiet der Filter) ist für
alle Filter außer 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" (wo die Filtergröße
3x3 ist und AlphaAlphaAlphaAlphaAlphaalpha ignoriert wird) frei
wählbar und kann mittels info_edgesinfo_edgesInfoEdgesinfo_edgesInfoEdgesInfoEdges für konkrete Werte des
Parameters AlphaAlphaAlphaAlphaAlphaalpha abgeschätzt werden. Sie nimmt bei den
Deriche- und Shen-Filtern mit AlphaAlphaAlphaAlphaAlphaalpha ab bzw. beim
Canny-Filter zu (AlphaAlphaAlphaAlphaAlphaalpha 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 mittels
Filtermasken realisiert. In diesem Fall erhöht sich die Laufzeit
mit wachsender Filterbreite. Die Laufzeit der rekursiver Filter ist
hingegen konstant. Das Einzugsgebiet der Deriche- und Shen-Filter
ist also ohne Mehraufwand beliebig vergrößerbar. Der daraus
resultierende Laufzeitvorteil gegenüber dem Canny-Filter 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 Spiegelung der Randpunkte fortgesetzt.
VDas Signal-Rausch-Verhältnis der FilterFilterFilterFilterFilterfilter ist vergleichbar,
wenn AlphaAlphaAlphaAlphaAlphaalpha wie folgt gewählt wird:
edges_coloredges_colorEdgesColoredges_colorEdgesColorEdgesColor bietet (optional) die Weiterverarbeitung der
Filterergebnisse mittels Non-Maximum-Suppression (NMSNMSNMSNMSNMSNMS =
'nms'"nms""nms""nms""nms""nms"/'inms'"inms""inms""inms""inms""inms"/'hvnms'"hvnms""hvnms""hvnms""hvnms""hvnms", sonst Wert
'none'"none""none""none""none""none") und Hysterese-Schwellenwertoperation
(LowLowLowLowLowlow,HighHighHighHighHighhigh, falls nicht erwünscht: einer der Werte
negativ). Dies entspricht im wesentlichen nachfolgenden Aufrufen
der Routinen
Die Hysterese-Schwellenwertoperation wird nicht angewandt, wenn
NMSNMSNMSNMSNMSNMS auf 'none' gesetzt ist.
Für 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" wird für alle Werte von NMSNMSNMSNMSNMSNMS
außer 'none'"none""none""none""none""none" dieselbe Non-Maximum-Suppression ausgeführt.
Zusätzlich wird für 'sobel_fast'"sobel_fast""sobel_fast""sobel_fast""sobel_fast""sobel_fast" auch
noch eine Verdünnung der Kanten auf ein Pixel Breite
durchgeführt.
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.
C. Steger: „Subpixel-Precise Extraction of Lines and Edges“;
International Archives of Photogrammetry and Remote Sensing,
vol. XXXIII, part B3; pp. 141-156; 2000.
C. Steger: „Unbiased Extraction of Curvilinear Structures from 2D
and 3D Images“; Herbert Utz Verlag, München; 1998.
S. Di Zenzo: „A Note on the Gradient of a Multi-Image“; Computer
Vision, Graphics, and Image Processing, vol. 33; pp. 116-125;
1986.
Aldo Cumani: „Edge Detection in Multispectral Images“; Computer
Vision, Graphics, and Image Processing: Graphical Models and Image
Processing, vol. 53, no. 1; pp. 40-51; 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; pp. 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; pp. 167-187; 1987.
R.Deriche: „Fast Algorithms for Low-Level Vision“; IEEE
Transactions on Pattern Analysis and Machine Intelligence; PAMI-12,
no. 1; pp. 78-87; 1990.
J. Shen, S. Castan: „An Optimal Linear Operator for Step Edge
Detection“; Computer Vision, Graphics, and Image Processing:
Graphical Models and Image Processing, vol. 54, no. 2;
pp. 112-133; 1992.