Institut für Informationsverarbeitung (TNT) Prof. Dr.-Ing. Bodo Rosenhahn
Appelstrate 9a, 30167 Hannover Petrissa Zell, M.Sc.
www.tnt.uni-hannover.de
WiSe 2018/19 14.11.2018
Praktische übung:
Matlab für die medizinische und industrielle
Bildverarbeitung
Versuch 2: Globale Operatoren
Allgemeine Hinweise
Nutzen Sie unbedingt Ihren zugewiesenen Benutzeraccount, um Datenverlust zu
vermeiden.
Bevor Sie Ihre Lsungen dem Betreuer vorstellen, schicken Sie Ihre L?sungen an
Falls noch nicht geschehen, legen Sie einen Ordner
~/MatlabLabor/%IhrName%/
in Ihrem pers nlichen Verzeichnis an, in dem Sie Ihre L?sungen speichern.
Erinnerung - Hough-Transformation
Für die Hough-Transformation eines (Kanten-)Bildes sind die folgenden Schritte notwendig:
(a) Darstellung der gesuchten Kurve in der Form f(x, a) = 0 mit Position x und Parametervektor
a
(b) Quantisierung des Parameterraums und Initialisierung der Akkumulatormatrix A
(c) Für jeden Kantenpixel xe: Erhihung der Akkumulatorzellen A(a), wenn f(xe, a) = 0
(d) Bestimmung der (lokalen) Maxima von A
Die lokalen Maxima ?ai zeigen die (wahrscheinlichsten) Kurven f(x,ai) im Bild an.
1
Einleitung
Starten Sie die Funktion hough_demo.p. Hier knnen Sie an einem einfachen Beispiel
die Hough-Transformation zur Detektion von Geraden und Kreisen ausprobieren. Im
linken Bild kinnen Sie manuell Kantenpixel definieren, die für die Hough-Transformation
verwendet wird. Ein Linksklick setzt einen Punkt, ein Rechtsklick lischt einen Punkt.
Die Leertaste lischt das gesamte Bild. Das Programm wird mit Esc abgebrochen.
In den weiteren Bildern werden die Akkumulatormatrizen dargestellt. Ein Linksklick
hier zeichnet die zugehirige Funktion (Gerade oder Kreis) im Originalbild. Die Tasten
1 und 2 detektieren automatisch die Maxima.
Aufgabe 1 - Hough-Transformation für Geraden
Vervollstndigen Sie das Script houghTransform.m, das Geraden in einem Bild detektiert
und diese in das Bild plottet. Folgen Sie den Anweisungen im Script und setzen Sie die
folgenden Teilaufgaben um:
Erstellung des Kantenbildes
Hough-Transformation, Bestimmung der Akkumulatormatrix
Bestimmung der (lokalen) Maxima in der Akkumulatormatrix
Darstellung der Geraden im Bild
Nutzen Sie Matlab-eigene Funktionen (hough, houghpeaks), die nach Geraden in der
Form
f(x, y; θ, ρ) = xcos(θ) + ysin(θ) ? ρ = 0
suchen. Zur Darstellung der Geraden steht eine Funktion
getEndpoints(I,theta,rho) zur Verfügung, die die Start- und Endpunkte der implizit
gegebenen Geraden im Bild zurückgibt. Sie kinnen die Geraden in Matlab über
den Befehl plot darstellen. Achten Sie darauf, dass in Matlab immer x- gegen y-Werte
geplottet werden und Bilder in einem ij-Koordinatensystem angezeigt werden.
Das Testbild zeigt ein Bauteil mit unterschiedlich langen Drahtverbindungen. Ziel ist
die Detektion der Verbindungen als Geraden im Bild. Wie wirkt sich die Methode zur
Kantendetektion auf das Ergebnis aus? Testen Sie die Geradendetektion auch an anderen
Bildern.
Aufgabe 2 - Hough-Transformation für Kreise
Implementieren Sie nun eine eigene Funktion zur zur Detektion von Kreisen in der Form
f(x, y; m, n, r) = (x m)
2 + (y n)
2 r
2 = 0.
2
a) In der Akkumulatormatrix werden für jeden Kantenpixel die Elemente erhiht,
die einem Parameterset entsprechen, das den Kantenpixel erzeugt haben kinnte.
Sollen Kreise detektiert werden, kann jeder Kantenpixel durch einen Kreis mit
dem Mittelpunkt im Abstand des Radius r entstanden sein. Die zu erh henden
Parameter-Sets in der Akkumulatormatrix sind demnach ebenfalls als Kreise mit
Radius r darstellbar, wobei die Menge an Punkten nur abh?ngig von der Lage
des Kantenpixel ist. Zur Beschleunigung sollte diese Menge an Punkten als Maske
vorab initialisiert werden.
Vervollst?ndigen Sie daher zun?chst die Funktion getAkkumulatorUpdate.m, die
diese dreidimensionale Maske in Abh?ngigkeit des betrachteten Radius bestimmt.
Ihre Maske sollte wie folgt aussehen:
Abbildung 1: ausgw?hlte 2D-Ansichten bei rmax = 20
Hier wird für jeden Radius r = 1, . . . , rmax eine zweidimensionale Maske (ein Bild
mit den Werten 0 und 1) erstellt, in der die Pixel markiert werden, deren (gerundeter)
Abstand zum Mittelpunkt r betr?gt. Die einzelnen Masken k?nnen zu einer
dreidimensionalen Maske zusammengefasst werden, die Sie nun in der Akkumulatormatrix
an den geeigneten Stellen addieren k?nnen.
b) Vervollst ndigen Sie die Funktion houghCircle.m. Achten Sie auf eine geeignete
Aufteilung des Parameterraums, den Sie in der Akkumulatormatrix darstellen
wollen und eine geeignete Randbehandlung.
Hinweis: Die einfachste L?sung ist, Kantenpixel, die zu nah am Rand sind, zu
ignorieren.
c) Nutzen Sie Ihre Hough-Transformation, um Zellen in dem Bild Zellen.jpg zu
markieren. Schreiben Sie dazu ein Testscript, das das Bild einliest, ein Kantenbild
erstellt und anschlie end die gefundenen Kreise im Bild darstellt, indem Sie
die Funktion plotCircle(m,n,r) nutzen. Stellen Sie zus tzlich auch ein Histogramm
der Radien der gefundenen Kreise dar (hist). Farbbilder müssen zun?chst
in Graustufenbilder umgewandelt werden (Matlab: rgb2gray).
d)* Die Houghtransformation findet oft mehrere hnliche Kreise. Versuchen Sie das
Problem zu beheben, indem Sie einen grieren Bereich um gefundene Maxima
unterdrücken.
3
Kontrollfragen
a) Was beschreiben die Parameter θ und ρ in der gew hlten Geradendarstellung in
Aufgabe 1 Was sind die Vorteile gegenüber anderen Parametrisierungen, wie z.B.
über die Steigung und den Schnittpunkt mit der y-Achse?
b) Was ist die Akkumulatormatrix?
c) Warum werden tendenziell eher gro?e als kleine Kreise im Bild gefunden? Wie
kann das Problem gel?st werden.
d) Warum wird die Hough-Transformation selten für Objekte mit mehr als 3 Parametern
verwendet?
版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:821613408 微信:horysk8 电子信箱:[email protected]
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。