Der Canny Kantendektor ist 1986 von dem Namensgeber John Canny im Jahr 1986 veröffentlich worden und gehört zu den Algorithmen der Kantendetektion.


Im Folgenden wird der Canny-Edge-Algorithmus erklärt. Jedoch gibt es weitere Kantendetektions-Algorithmen, die ebenso auf diesem Blog vorgestellt werden. Die Fett-hervorgehobenen Algorithmen sind bisher erklärt worden.

 


Canny-Edge Detector

Canny wollte einen Algorithmus zur Kantendetektion entwickeln, der wesentlich drei Ziele verfolgt:

  • Erkennung

Alle tatsächlichen Kanten sollen gefunden werden, aber keine falschen

  • Lokalisierung

Abstand zwischen tatsächlicher und erkannter Kante möglichst klein

  • Ansprechverhalten

Keine Mehrfacherkennung ein- und derselben Kante

 


Vorgehen

Der Algorithmus lässt sich in vier Stufen unterteilen:

  • Vorverarbeitung (Glättung)

Mit einem Gauß-Filter wird das Rauschen unterdrückt

  • Gradienten berechnen (Kantendetektion)

Die Detektion berechnet die Kantenstärke und Kantenrichtung

  • Unterdrückung von Nicht-Maxima

Es werden nur lokale Maxima der Kantenstärke als Kantenpixel zugelassen

  • Schwellenwertbildung mit Hysterese

Die Hysterese unterdrückt nicht relevante Kanten mittels eines Schwellenwertverfahrens

 


Vorbereitung

Kantendetektoren sind anfällig für Rauschen. Damit das Rauschen reduziert wird, wird üblicherweise ein 5x5 Gauß-Filter verwendet mit einer Standardabweichung von 1,4.

\[G = \frac{1}{159} \begin{bmatrix}
2 & 4  & 5 & 4 & 2 \\
4 & 9 & 12 & 9 & 4 \\
5 & 12 & 15 & 12 & 5 \\
4 & 9 & 12 & 9 & 4 \\
2 & 4  & 5 & 4 & 2
\end{bmatrix}\]

Dennoch ist zu beachten, dass die Werte von diesem Filter je nach Situation angepasst werden müssen.

 


Gradienten berechnen

Danach wird auf das geglättete Bild eine Ableitung angewendet. Dazu können beispielsweise der Sobel-Operator oder auch der Laplace Operator eingesetzt werden.

 


Unterdrückung von Nicht-Maxima

Wenn ein Pixel kein Maxium ist, wird dieser unterdrückt. Es werden alle Pixel durchlaufen und jeder Ausrichtung vom jedem Pixel wird in ein sogenanntes Bins gelegt.

Quelle: aishack.in Eine Grafik, der die Richtungen zeigt 

In der oberen Abbildung wird anhand einer Grafik alle Richtungen ausgehend von dem Grauen Pixel alle Richtungen gezeigt: Norden und Süden (die grünen Nachbarn), Osten und Westen (die blauen Nachbaren) oder eine Diagonale (die gelben oder roten Nachbarn). Mit der Gradientenrichtung eines Pixels möchte der Algorithmus abschätzen wohin die Kante geht.

Die vier Möglichkeiten müssen getrennt betrachtet werden, um auf nicht maximal Unterdrückt zu prüfen. Es ist wichtig im Hintergrund zu behalten, dass eine Kante sich immer senkrecht zur einer Gradientenrichtung befindet und Intensitäten sich nicht entlang einer Kante verändern sondern über die Kante.

Quelle: aishack.in Gehört die weitere Kante noch dazu?

Die roten Pixel in der oberen Abbildung zeigen eine Kante. Um zu prüfen, ob der zentrale rote Pixel zu einer Kante gehört muss überprüft werden, ob dieser Maximal ist. Dies wird mit der Größe von dem oberen linken und dem unteren rechten Pixel verglichen.

Wenn der zentrale rote Pixel maximal ist und größer als obere Schwellenwert ist, ist es eine Kante und kann als Kante markiert werden.

 


Schwellenwertbildung

Für Gradienten mit mittlerer Steigung kann muss eine Entscheidung getroffen werden, ob es sich um eine Kante oder Rauschen handelt. Schwache kannten werden aufgrund ihrer Lage als Kante- oder Nicht-Kanten-Pixel klassifiziert.

Im vorherigen Schritt haben wir Pixel markiert, deren Gradient größer als der obere Schwellenwert sind. Mit dem unterem Schwellenwert können die Kanten „wachsen“.

  • Weiter zur nächsten Kante, falls das aktuelle Pixel zur keiner Kante gehört
  • Wenn es eine Kante ist wird diese in Richtung der Kante geprüft (d.h. senkrecht zur Gradientenrichtung)
  • Falls ein oder beide Ergebnisse der Prüfung erfolgt werden wird dieser Schritt solange wiederholt bis keine Änderung mehr im Bild sind. Das ist die fertige Kante
    • Hat die gleiche Richtung wie das zentrale Pixel im selben Bin
    • Die Gradientengröße ist größer als die untere Schwelle
    • Die Nachbarn von dem zentralen Pixel sind das Maximum im Vergleich zu ihren Nachbarn (nichtmaximale Unterdrückung für diese Pixel). Dann kann das zentrale Pixel als Kante gekennzeichnet werden

 

Einfacher Schwellwert (Threshold)

Verringert die Anazhl der falschen Kanten durch das Anwenden von einem Schwellwert

  • Alle Werte unter dem Schwellwert T werden 0
  • Es muss ein guter Schwellwert definiert werden
  • Es können zu viele Kanten bleiben, falls der Schwllwert falsch gewählt worden ist
  • Es können Kanten verschwinden wenn der Schwllert zu streng gewählt worden ist
  • Einige Kanten können verschwinden durch weiche Kanten, die beispielsweise unregelmäßigkeiten wegen Schatten haben

 

Doppelter Schwellwert (ThresholdLink)

Es werden zwei Schwellwerte auf das zwei Bilder angwendet. Im Paper, indem der Algorithmus beschrieben worden ist, wird ermpfohlen, dass der ThresholdLink dreimal so groß sein sollte als der Threshold. Diese Wahl der Parameter erzielte experimentell gute Ergebenisse.

Quelle: intelligence.tuc.gr Zeigt beispielhaft den Ablauf

  • Es werden die Ergebnisse der zwei Bilder in einem ausgegeben
  • Das Bild von T2 hat weniger kanten aber mehr Lücken bei den Konturen
  • Das Bild von T1 hat viele falsche Kanten
  • Für das Ergebnisbild werden T1 und T1 kombiniert
  • Es werden die kanten von T2 verbunden bis eine Lücke kommt
  • Verbinde die Kanten von T2 mit den Kanten
  • Verknüpfen die Kante von T2 mit Kantenpixeln von einer T1-Kontur, bis wieder eine T2-Kante gefunden wird
  • Eine T2 Kontur hat nun Pixel entlang des grünes Pfeils (Obere Grafik)
  • Verknüpfe die Konturen, mit dem größten Pixel, die innerhalb einer 3x3 Matrix gefunden werden
  • Es wird in Richtung der Kante (Richtung des Gradienten) gesucht

 


Resultat

Als Resultat von dem Algorithmus ist ein Binärbild. Der Wert 1 wiederspiegelt eine Kante und der Wert 0 keine Kante.

 


Fazit

Der Canny-Filter ist gängig unter den klassischen Verfahren und wird als Basis für viele Verbesserungen verwendet. Jedoch ist der Filter stark abhängig je nachdem wie die Filter gewählt werden. Deswegen ist kein „unsupervised“ Einsatz möglich. Bei Oberflächen, die Texturen vorweisen kann der Algorithmus falschen Kanten zeigen. Jedoch kann dieses Problem beispielweise mit Surround Suppression eliminiert werden.

 


Quellen:

[1] A Computational Approach To Edge Detection, J. Canny, IEEE Transactions on Pattern Analysis and Machine Intelligence, 8:679-714 (1986)

[2] http://www.mathematik.uni-ulm.de/stochastik/lehre/ws05_06/seminar/wagner.pdf

[3] Digitale Bildverarbeitung, B. Jähne, Springer, 2002, 4. Auflage

[4] http://aishack.in/tutorials/canny-edge-detector

[5] https://docs.opencv.org/3.4/da/d22/tutorial_py_canny.html

[6] http://www9.in.tum.de/seminare/hs.SS06.EAMA/material/01_ausarbeitung

[7] Einleitungsbild von http://aishack.in/tutorials/canny-edge-detector/

[8] http://www.intelligence.tuc.gr/~petrakis/courses/computervision/canny.pdf

 

 


Suche

Kategorien

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.