Canny Edge Detection
Die Canny-Kantendetektion ist ein mehrstufiger Algorithmus, der Rauschen reduziert, starke Helligkeitsänderungen erkennt und dünne Kantendarstellungen für Computer Vision erzeugt.
Die Canny-Kantendetektion ist ein mehrstufiger Bildverarbeitungsalgorithmus, der starke Helligkeitsänderungen erkennt und in eine dünne, binäre Kantendarstellung umwandelt. Sie reduziert Rauschen, lokalisiert Helligkeitsübergänge und verbindet zuverlässige Kantenpixel zu Konturen. In der Computer Vision beschreiben diese Konturen die Bildstruktur und dienen der Formanalyse und Vermessung.
John Canny entwickelte das Verfahren 1983 und beschrieb es 1986 in seiner Arbeit A Computational Approach to Edge Detection. Das Verfahren vereint drei Ziele: echte Kanten zu erkennen, sie genau zu lokalisieren und für jede Kante nur eine Reaktion zu erzeugen. „Canny-Kantendetektor“ ist ein Synonym für den Algorithmus.
So funktioniert die Canny-Kantendetektion#
Der Algorithmus kombiniert die Datenvorverarbeitung mit Filterung und Konnektivitätsanalyse. Die fünf Schritte erfüllen jeweils eine eigene Aufgabe:
- Rauschunterdrückung: Bei der Gauß-Glättung werden benachbarte Pixel mit nach Abstand gewichteten Werten gemittelt. So werden Schwankungen unterdrückt, die unerwünschte Kanten erzeugen würden.
- Gradientenschätzung: Horizontale und vertikale Ableitungen messen, wie schnell sich die Helligkeit ändert. Zusammen ergeben sie die Kantenstärke und eine Richtung senkrecht zur Grenze. OpenCV verwendet für diesen Schritt Sobel-Ableitungen.
- Kantenausdünnung: Die Unterdrückung von Nichtmaxima behält lokale Gradientenmaxima entlang der Gradientenrichtung bei und erzeugt so schmale Linien statt breiter Bänder.
- Doppelte Schwellwertsetzung: Ein hoher Schwellenwert kennzeichnet starke Kanten; ein niedriger Schwellenwert entfernt schwache Reaktionen. Pixel zwischen den Schwellenwerten gelten als Kandidaten.
- Hysterese-Verknüpfung: Kandidatenpixel bleiben erhalten, wenn sie über weitere Kandidatenpixel mit einer starken Kante verbunden sind. Vereinzelte Kandidaten verschwinden.
Schwellenwerte, Glättung und Fehlermodi#
Die Schwellenwerte beziehen sich auf die Gradientenstärke und nicht auf die rohe Helligkeit oder die Konfidenz des Modells. Niedrigere Schwellenwerte erhalten mehr Details und Rauschen; höhere entfernen schwache Grenzen. Ein höherer oberer Schwellenwert verringert außerdem die Anzahl starker Kantenpunkte, die für die Verknüpfung durch Hysterese verfügbar sind.
Die Stärke der Gauß-Glättung steuert einen separaten Zielkonflikt. Eine stärkere Glättung unterdrückt Rauschen, entfernt aber feine Strukturen. Im Beispiel mit dem verrauschten Quadrat von scikit-image verändert die Standardabweichung der Gauß-Glättung, wie viel Rauschen rund um das Quadrat erhalten bleibt.
Bei der Rissprüfung erzeugen raue Betonoberflächen unerwünschte Texturkanten und unvollständige Risskonturen. Durch höhere Schwellenwerte werden einige falsche Kanten entfernt, zugleich gehen aber auch echte Rissabschnitte verloren.
Sobel schätzt Intensitätsableitungen; Canny kombiniert die Schätzung des Gradienten mit Glättung, Ausdünnung und einer Auswahl anhand der Konnektivität. Die Ausdünnungsstufe von Canny vergleicht benachbarte Pixel, während die NMS bei der Objekterkennung überlappende vorhergesagte Boxen vergleicht.
Kantenerkennung mit Canny in Python#
Installiere die Abhängigkeiten mit pip install opencv-python numpy. Dieses Beispiel verwendet OpenCV, um eine Kantenkarte des Bus-Beispielbilds zu speichern:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
gray = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)
# Glätte das Bild, bevor du die Intensitätsgradienten berechnest.
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)Die gespeicherte PNG-Datei zeigt die erhaltenen Kanten weiß auf schwarzem Hintergrund. Im Ablauf zur Kantenerkennung mit OpenCV geben das zweite und dritte Argument von Canny den unteren und oberen Schwellenwert an. L2gradient=True verwendet den euklidischen Gradientenbetrag; standardmäßig wird die Summe der absoluten horizontalen und vertikalen Ableitungen verwendet. Diese Einstellungen verändern die Gradientenwerte und damit das Verhalten der Schwellenwerte.
Anwendungen und verwandte Aufgaben der Bildverarbeitung#
Canny unterstützt die geometrische Merkmalsextraktion: Das Beispiel zur Liniendetektion von scikit-image wendet das Verfahren auf ein Foto eines Kameramanns an, bevor eine probabilistische Hough-Transformation gerade Liniensegmente extrahiert. Canny liefert die Kantenpixel; die Hough-Abstimmung gruppiert sie zu Linien. Die Objekterkennung weist Kategorien und Boxen zu, während die Instanzsegmentierung Pixel einzelnen Objekten zuordnet.
Die Segmentierung mit Ultralytics YOLO26 gibt Masken für die Objektisolierung zurück, mit denen Bildbereiche für eine separate Canny-Verarbeitung ausgewählt werden können. So wird die gelernte Objektauswahl mit der klassischen Kantenerkennung kombiniert.
Bei der generativen KI verwendet ControlNet Canny-Karten als räumliche Bedingungen für Diffusionsmodelle. Die Canny-gesteuerte Implementierung steuert die Generierung mit Stable Diffusion 1.5, indem sie extrahierte Konturen zusammen mit einer Textaufforderung verwendet.










