联系方式

您当前位置:首页 >> Matlab编程Matlab编程

日期:2018-11-29 11:04

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

[email protected]

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]
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:horysk8