Der Canny Algorithmus ist ein bekannter Algorithmus zur Darstellung von Kantenbildern. Er besteht aus einer Bildglättung, einer Kantendetektion mit Berechnung von Betrag und Richtung der Kanten, einer Kantenverdünnung durch Nicht-Maximum-Unterdrückung sowie einer Schwellwertoperation die die Unwichtigen Kanten herausfiltert.

Die Bildglättung geschieht mittels eines Gaußalgorithmus. Ziel ist es das Bild in seiner Gesamtheit etwas zu entschärfen ohne die Kanten zu verzerren.

Zur Kantendetektion wird der Sobeloperator verwendet. Aus den hierbei berechneten Bildern wird nun zum einen mittels Arctan2 Funktion die Richtung der Kanten ermittelt, zum anderen wird die Kantenstärke über den euklidischen Betrag der beiden Bilder gebildet.

Die Kantenverdünnung geschieht durch die “Nicht-Maximum-Unterdrückung”. Bei diesem Verfahren wird bei jedem Punkt in Kantenrichtung geschaut ob es sich um das lokale Maximum der Kante handelt, wenn nicht wird der jeweilige Pixel auf 0 gesetzt. Das Ergebnis dieser Operation ist ein Kantenbild bei dem jede Kante genau 1 Pixel breit ist.

Als letztes wird noch eine Schwellwertoperation ausgeführt. Hierbei wird geschaut ob es sich um den gefundenen Kanten um hinreichend starke Kanten handelt. Kanten mit Kantenstärken über einen Schwellwert werden sofort zugelassen, Kanten mit Kantenstärken unter einen anderen Schwellwert werden automatisch verworfen und bei allen dazwischen wird geschaut ob mindestens ein Nachbar zugelassen wird, wenn ja dann wird diese Kante auch zugelassen.

Links das Originalbild, rechts ein Kantenbild nach dem Canny Algorithmus

In Python könnte man das ganze so realisieren:

import cv2

img = cv2.imread('Bild.jpg',cv2.IMREAD_GRAYSCALE)
edge = cv2.Canny(img,50,200)
cv2.imshow('Bild',edge)
cv2.waitKey(0)
cv2.destroyAllWindows()

Die Parameter der cv2.Canny() Funktion ist die Bildmatrix und die Schwellwerte für die Schwellwertoperation. Je niedriger die Zahlen desto mehr Kanten werden gefunden. Der zweite Schwellwert sollte etwa doppelt bis viermal so groß wie der erste sein.


Konnte ich helfen? Ich freue mich über einen Drink! 💙