ich war hier: TutoriumAutomatischeOptischeInspektion

Revision history for TutoriumAutomatischeOptischeInspektion


Revision [93949]

Last edited on 2019-03-08 12:56:21 by ClaudiaMichel
Deletions:
{{files}}


Revision [93948]

Edited on 2019-03-08 12:54:48 by ClaudiaMichel
Additions:
{{files}}


Revision [93919]

Edited on 2019-03-07 11:15:15 by ClaudiaMichel
Additions:
CategoryTutorienFKITWS1819;CategoryTutorienFKITSS18
Deletions:
CategoryTutorienFKITWS1819


Revision [93918]

Edited on 2019-03-07 11:13:36 by ClaudiaMichel
Additions:
----
CategoryTutorienFKITWS1819


Revision [93913]

Edited on 2019-03-07 11:10:33 by ClaudiaMichel
Deletions:
{{files}}


Revision [93912]

Edited on 2019-03-07 11:02:34 by ClaudiaMichel
Additions:
{{files}}


Revision [93910]

Edited on 2019-03-07 10:50:31 by ClaudiaMichel
Additions:
======Bildverarbeitung======
=====Ausgangsbild=====
{{image url="source.jpg" title="Ausgangsbild"}}
=====Canny-Algorithmus (auch: Canny Edge Detector)=====
Der Canny Kantendektor ist 1986 von dem Namensgeber John Canny im Jahr 1986 veröffentlich worden und gehört zu den Algorithmen der Kantendetektion
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
====Vorverarbeitung====
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.
{{image url="gauss.png" title="5x5 Gauss-Kernel"}}
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.
====Kantendetektion====
{{image url="kantendetektion.png" title="Kantendetektion"}}
====Sobel-Operator====
{{image url="sobeloperator.png" title="Sobel-Operator"}}
===Sobel X Resultat===
{{image url="sobelx.jpg" title="Scale = 1, Delta = 0"}}
===Sobel Y Resultat===
{{image url="sobely.jpg" title="Scale = 1, Delta = 0"}}
===Sobel Resultat===
{{image url="sobel.jpg" title="Scale = 1, Delta = 0"}}
====Absolute Kantenstärke und Kantenrichtung====
{{image url="absoluteKantenstaerkeUndKantenrichtung.png" title="Absolute Kantenstärke und Kantenrichtung"}}
====Unterdrückung von Nicht-Maxima====
Um sicherzustellen, dass eine Kante nicht mehr als ein Pixel breit ist, sollen im folgenden Schritt einzig die Maxima entlang einer Kante erhalten bleiben. Dafür wird vom Bild mit den absoluten Kantenstärken ausgegangen und für jedes Pixel die Werte
====Schwellenwertbildung mit Hysterese====
{{image url="schwellenwertbildungUndHysterese.png" title="Schwellenwertbildung mit Hysterese"}}
====Canny Edge Detector Resultat 1====
{{image url="cannyEdgeDetector1.jpg" title="T1 = 20, T2 = 200, Aperture Size = 3 (Sobel Kernel Size), L2 Gradient = true"}}
====Canny Edge Detector Resultat 2====
{{image url="cannyEdgeDetector2.jpg" title="T1 = 150, T2 = 200, Aperture Size = 3 (Sobel Kernel Size), L2 Gradient = true"}}
====Canny Edge Detector Resultat 3====
{{image url="cannyEdgeDetector3.jpg" title="T1 = 150, T2 = 200, Aperture Size = 7 (Sobel Kernel Size), L2 Gradient = true"}}
======Filter======
=====Normalized Block and Gaussian Filter=====
{{image url="normalizedBlockAndGaussian.png" title="Normalized Block and Gaussian Filter"}}
=====Median Filter=====
{{image url="median.png" title="Median Filter"}}
=====Bilateral Filter=====
{{image url="bilateral.png" title="Bilateral Filter"}}
=====Normalized Block Filter=====
{{image url="normalizedBlockFilter.jpg" title="Kernel Length = 5, Sehr simpler Filter"}}
=====Gaussian Filter=====
{{image url="gaussianFilter.jpg" title="Kernel Length = 5, Sehr verbreiteter und sehr guter allgemeiner Filter"}}
=====Median Filter=====
{{image url="medianFilter.jpg" title="Kernel Length = 5, Sehr gut um komplette Bildlücken zu entfernen, da fehlende Pixel komplett ersetzt werden und Extremwerte ignoriert werden"}}
=====Bilateral Filter=====
{{image url="bilateralFilter.jpg" title="Kernel Length = 21, Sehr gut um Kanten zu erhalten und trotzdem Rauschen heraus zu filtern"}}
======Histogram======
{{image url="histogram.png" title="Histogram"}}
=====Gray=====
{{image url="gray.jpg" title="(R+G+B)/3"}}
=====Histogram Equalization=====
{{image url="histogramEqualization1.png" title="Histogram Equalization Berechnung"}}
{{image url="histogramEqualization2.png" title="Histogram Equalization Resultat im Histogram"}}
{{image url="histogramEqualization.jpg" title="Histogram Equalization Resultat"}}
=====Contrast Limited Adaptive Histogram Equalization (CLAHE)=====
- Bild wird in Kacheln unterteilt (OpenCV 8x8 als Standard)
- Darüber wird dann eine Histogram Equalization angewendet
- Sollte Rauschen in der Kachel vorhanden sein würde es aber somit nur verstärkt werden, deshalb wird eine Kontrastbegrenzung vorgenommen
- Wenn ein Histogram-Bin über der Kontrastbegrenzung liegt (OpenCV 40 als Standard) werden die Pixel beschnitten und gleichmäßig auf andere Bins verteilt, bevor die Histogram Equalization durchgeführt wird
{{image url="verteilung.png" title="Verteilung der Pixel"}}
- Um Artefakte in den Kachelrändern zu entfernen, wird eine bilineare Interpolation angewendet
{{image url="histogramEqualization3.png" title="CLAHE Resultat im Histogram"}}
{{image url="clahe.jpg" title="CLAHE Resultat, Cliplimit = 2, tileSize = 8"}}
=====Quellen=====
""https://de.wikipedia.org/wiki/Automatische_optische_Inspektion""
""https://www.kuppelwieser.net/index.php/technik/15-bildverarbeitung/40-canny-algorithmus""
""https://de.wikipedia.org/wiki/Sobel-Operator""
""https://de.wikipedia.org/wiki/Arctan2""
""https://de.wikipedia.org/wiki/Canny-Algorithmus""
""https://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=blur#blur""
""https://de.wikipedia.org/wiki/Gau%C3%9F-Filter""
""https://de.wikipedia.org/wiki/Rangordnungsfilter#Medianfilter""
""https://de.wikipedia.org/wiki/Bilaterale_Filterung""
""http://eric-yuan.me/bilateral-filtering/""
""https://www.researchgate.net/figure/Histogram-of-the-pixel-grayscale-values-of-the-Corpus-Callosum_fig4_228695982""
""https://en.wikipedia.org/wiki/Adaptive_histogram_equalization""


Revision [93909]

The oldest known version of this page was created on 2019-03-07 10:49:36 by ClaudiaMichel
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki