Top Banner
1 Bildverarbeitung mit C++ ã Dr. Stefan Florczyk
208

Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

Aug 22, 2019

Download

Documents

hanhu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

1

••

Bildverarbeitung mit C++

� Dr. Stefan Florczyk

Page 2: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

2

••

HDevelop

Page 3: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

3

••

• Starten von HDevelop

- Setzen der Umgebungsvariablen:

setenv HALCONIMAGES/usr/stud/Mayr/images:/usr/stud/Mayr/HALCON/images

setenv HALCONROOT /usr/local/halcon

setenv DISPLAY [Rechnername].informatik.tu-muenchen.de:0.0

• Aufruf für Linux mit

/usr/local/halcon/bin/i486-unknown-linux2.0.0/hdevelop&

• Damit wird HDevelop im Hintergrund gestartet

• Aufruf für HP mit

/usr/local/halcon/bin/hppa1.1-hp-hpux10/hdevelop&

• Aufruf für Sun mit

/usr/local/halcon/bin/sparc-sun-solaris2.6/hdevelop&

Page 4: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

4

••

Page 5: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

5

••

• Grafikfenster

- Anzeigen von Bildern

- Anzeigen von Ergebnissen, die durch Anwendung vonBildverarbeitungsoperatoren entstehen

- Sofern mehrere Fenster geöffnet sind, ist dasjenigeaktiviert, bei dem sich im Feld 'Active' ein grünerPunkt befindet

- Ein nicht aktiviertes Grafikfenster wird dadurchaktiviert, indem mit der Maus der Button 'Active'gedrückt wird

- Durch Betätigung des Buttons 'Clear' wird der aktuelleFensterinhalt gelöscht

Page 6: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

6

••

A

B

C

Page 7: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

7

••

• Einige Erläuterungen zum Menü des HDevelop Hauptfenster

• File

- New: Erzeugen eines neuen Projetks

- Open: Öffnen einer Hdevelop Datei

- Insert: Einfügen eines neuen Projektes an die Stelle desEinfügemarkers

- Einfügemarker wird durch Bewegen der Maus in Bereich 'A'an die einzufügende Stelle gesetzt

- Rechte Maustaste wird betätigt und der Menüpunkt 'Setinsert Cursor' ausgewählt

- Save: Abspeichern des Projekts unter dem aktuellen Namen

- Save as..: Abspeichern des Projekts unter einem anderenNamen

Page 8: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

8

••

- Wenn die Endung .dev gewählt wird, erfolgt dieAbspeicherung als Hdevelop Datei

- Mit der Endung .cpp wird das Programm in C++ Codeexportiert

- Read Image: Einlesen eines Bildes vom Massenspeicher

- Cleanup: Löschen von Variablen, die im Programm nichtmehr benötigt werden

- Options: Auswahl diverser Menüpunkte wie beispielsweise'Automatic Program Save'

- Modules: Gibt eine Übersicht über die aktuell benutztenHdevelop Module aus

- Quit: Beendigung des Programms

Page 9: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

9

••

•Edit

- Undo: Zurücknehmen von Befehlen (Ctrl+Z)

- Cut: Ausschneiden von Anweisungen (Ctrl+X)

- Copy: Kopieren von Anweisungen (Ctrl+C)

- Paste: Einfügen von Anweisungen an die Stelle, auf diedie Einfügemarkierung zeigt (Ctrl+V)

- Delete: Löschen von Anweisungen

- Cut, Copy, Paste und Delete beziehen sich auf markierteAnweisungen in Bereich 'B'

- Sollen mehrere Anweisungen markiert werden, so geschiehtdies bei gedrückter Ctrl-Taste und Auswahl der zumarkierenden Befehle mit Bewegen der Maus auf dieAnweisung und Drücken der linken Maustaste

Page 10: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

10

••

• Execute

- Run: Ausführen des aktuellen Programms (F5)

- Step: Sofern das Programm sich nicht in Ausführungbefindet kann diejenige Anweisung ausgeführt werden aufdie der Ausführungspfeil zeigt (F6)

- Der Ausführungspfeil wird in Bereich 'A' gesetzt

- Dies geschieht durch Bewegen der Maus in 'A' neben dieauszuführende Anweisung und Betätigen der linkenMaustaste

- Stop: Unterbrechen eines Programms zur Laufzeit (F9)

Page 11: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

11

••

- Activate: Aktivieren von deaktivierten Befehlen

- Ein deaktivierter Befehl ist mit einem Sternauskommentiert

- Deactivate: Deaktivieren von aktivierten Befehlen

- Activate und Deactivate beziehen sich auf die markiertenAnweisungen in Bereich 'B'

- Reset Program: Zurücksetzten eines Programms an denAnfang

- Clear Break Point: Entfernen eines Anhaltepunkts imProgramm

- Ein Anhaltepunkt wird in derselben Weise wie dieEinfügemarkierung gesetzt

- Hierbei ist nach Betätigen der rechten Maustaste derBefehl 'Set break point' aus dem erscheinenden Menüauszuwählen

Page 12: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

12

••

• Visualization

- Open Window: Öffnen eines Grafikfensters

- In diesem Grafikfenster werden Bilder angezeigt

- Es können die Eigenschaften des Fensters, wie Höhe,Breite und Hintergrund gesetzt werden

- Reset Parameters: Zurücksetzen der Eigenschaften desGrafikfensters auf den initialen Zustand

- Clear Window: Löschen der Inhalte des Grafikfensters

- Close Window: Schließen des Grafikfensters

- Pixel Info: Liefert Informationen über die Pixel desBildes, welches im Grafikfenster angezeigt wird

- Dies geschieht durch Bewegen der Maus auf das zuuntersuchende Pixel im Grafikfenster

Page 13: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

13

••

- Liefert dann Informationen über Grauwert oder RGB Wert

- Zeigt die Koordinaten des Pixels

- Zeigt die Höhe und Breite des Bildes an

- Gibt die Anzahl der Kanäle des Bildes aus

- Online Zooming: Zoomen eines Bildausschnitts

- Der Nutzer kann einen Zommfaktor bestimmen

- Gray Histogram Info: Zeigt die Grauwertverteilung einesBildes

- Bei einem mehrkanaligen Bild kann der Nutzer den Kanalauswählen

- An der X-Achse sind die möglichen Grauwerte abgetragen

- An der Y-Achse wird abgetragen, wie oft der Grauwert imBild vorkommt

Page 14: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

14

••

- Region Info: Liefert Informationen über Regionen wiebeispielsweise Breite und Höhe einer Region

- Dies geschieht durch bewegen der Maus auf die zuuntersuchende Region im Grafikfenster und Betätigen derlinken Maustaste

- Size Window: Veränderung der Größe des Grafikfensters

- Zooming: Beispielsweise kann hier in das Grafikfensterherein oder heraus gezommt werden

- Colored: Auswahl der Anzahl unterschiedlicher Farben mitdenen die Regionen im Grafikfenster kenntlich gemachtwerden können

- Color: Auswahl einer Farbe mit der im Grafikfenstergezeichnet wird

- Draw: Auswahl ob im Grafikfenster nur Konturengezeichnet werden oder ob eine füllende Zeichnungverwendet werden soll

Page 15: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

15

••

- Line Width: Mit Line Width wird die Breite der Linieder Linie eingestellt, mit der im Grafikfenstergezeichnet wird

- Shape: Hiermit wird die Gebildeform der zu zeichnendenObjekte eingestellt

- Objekte können beispielsweise als Rechtecke oder Kreisegezeichnet werden

- Lut: Auswahl verschiedener Look-Up-Tabellen für Grau-und Farbbilder möglich

- Paint: Bietet Modi zum Anzeigen von Graubildern an (z.B.Konturlinien)

- Set Parameters: Einstellen vieler Parameter für dasGrafikfenster mit 4 Registerkarten

- Save Window: Abspeichern des Inhalts des Grafikfenstersbeispielsweise im 'tif' Format

Page 16: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

16

••

• Control: Auswahl der zur Verfügung stehenden Operatoren

- Diese werden in Bereich 'C' eingetragen und können dortparametrisiert werden

• Suggestions

- Alternatives: Zeigt Alternativen zu dem in 'C'ausgewählten Operator

• See also

- Verweist auf Operatoren, die mit den in 'C' angezeigtenin Beziehung stehen

- Beispielsweise wird bei einem angezeigten Filteroperatorauf die Faltung verwiesen

- Predeccesor: Mögliche Operatoren, die sich als Vorgängerfür den angezeigten Operator anbieten

Page 17: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

17

••

- Wenn die Erosion angezeigt wird, wirdbeispielsweise auf die Schwellwert-Operation verwiesen

- Successor: Mögliche Operatoren, die sich als Nachfolgerfür den angezeigten Operator anbieten

- Wenn der Mittelwertfilter angezeigt wird, wirdbeispielsweise auf den Schwellwert-Operator verwiesen

- Keywords: Hier sind Schlüsselwörter in alphabetischerReihenfolge aufgelistet und können selektiert werden

- Bei der Selektion werden dann zugehörige Operatorenangezeigt

Page 18: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

18

••

• Bereich C

- Dient zur Eingabe von HDevelop-Operatoren

- Selektion erfolgt im Feld 'Operator'

- Wenn der Name des Operators komplett bekannt ist, kanndieser durch Editierung von 'Operator' eingegeben werden

- Ist der Name des Operators nicht komplett bekannt,können Zeichenketten eingegeben werden

- Durch Betätigen des Pop-Up Menüs werden dann alle inHDevelop vorkommenden Operatoren angezeigt, dessen Namedie eingegebene Zeichenkette beinhaltet

- Mit Return wird dann der Operator ausgewählt

- Es werden Felder angezeigt, in denen die Parameter desOperators editiert werden können

Page 19: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

19

••

- Wird 'Ok' betätigt, so wird der Operator an die Stelleim HDevelop Programm eingefügt, wo sich derEinfügemarker aktuell befindet und der Operator wirdsofort ausgeführt

- 'Enter' hat denselben Effekt wie 'Ok', allerdingsunterbleibt die sofortige Ausführung des Operators

- Mit 'Apply' kann die aktuelle Parameterbelegung getestetwerden

- Beispielsweise wird das Ergebnis, welches sich durch dieAnwendung des Operators ergibt, im Grafikfensterangezeigt

- Mit 'Cancel' werden die eingetragenen Parameterwertewieder gelöscht

- Mit 'Help' wird der Standardbrowser (z. B. NetscapeNavigator) geöffnet und die Erläuterung zum selektiertenOperator im Browser angezeigt

Page 20: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

20

••

Page 21: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

21

••

• Variablenüberwachung

- Im Bereich 'Iconic Variables' werden grafische Variablenangezeigt

- Dies können auch Arrays sein, welche mehrere Regionenbeinhalten

- Doppelklick auf eine 'Iconic Variable' bewirkt derenAnzeigen im Grafikfenster

- Im Bereich 'Control Variables' werden die in HDevelopverwendeten Steuervariablen mit Ihrer aktuellenBelegung angezeigt

- Doppelklick auf eine 'Control Variable' zeigt diesevergrößert in einem eigenen Fenster an

Page 22: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

22

••

Ein erstes Beispiel in HDevelop

• Es soll die Anzahl der Büroklammern in einem Bild ermitteltwerden

• Dieses Bild kann von unserem Unix-Server über folgenden Pfadgeladen werden:

- /usr/images/industry/clip.tiff

• In HDevelop wird ein Bild mit dem Operator read_imageeingelesen

- read_image (Clip, 'clip.tif')

read_image ( : Image : FileName : )

- Einlesen eines Bildes vom Massenspeicher

- Das Eingangsbild wird in 'Image' geliefert

- Das Einlesen von nicht HALCON-Format Bildern wie 'tiff'ist auch möglich

Page 23: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

23

••

- Dies erfolgt über 'FileName'

- Hier kann auch der Dateipfad angegeben werden

- HALCON sucht Dateien im aktuellen Verzeichnis

- Darüber hinaus kann mit der UmgebungsvariablenHALCONIMAGES ein zu durchsuchender Pfad angegeben werden

- Beispiel für das Setzen von HALCONIMAGES unter UNIX:

setenv HALCONIMAGES /usr/local/images

Page 24: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

24

• Anschließend werden die Attribute des Eingangsbildes ermittelt

- get_image_pointer1(Clip,_,_,Width,Height)get_image_pointer1(Image : : : Pointer, Type, Width,Height)

- Liefert einen Pointer auf den ersten Kanal desEingabebildes 'Image' (also beispielsweise wird beieinem RGB Bild ein Pointer auf den Rotkanalgeliefert)

- Als weitere Informationen erhält man Bildtyp, Breite undHöhe des übergebenen Bildes in 'Type', 'Width' und'Height' geliefert

Page 25: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

25

• Öffnen eines Grafikfensters

- dev_open_window

(0,0,0.5*Width,0.5*Height,'black',WindowID)

dev_open_window(: : Row, Column, Width, Height,Background : WindowHandle)

- Öffnen eines neuen Fensters

- Der 'Background' des Fensters ist per Voreinstellungauf 'schwarz' gesetzt

- Der Ursprung des Koordinatensystems (0,0) beginntin der oberen linken Ecke des Fensters.

- 'Row' gibt den Zeilenindex der oberen linken Ecke an.Dieser ist per Voreinstellung auf 0 gesetzt

Page 26: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

26

- 'Column' spezifiziert den Spaltenindex der oberen linkenEcke und ist ebenfalls per Voreinstellung auf 0 gesetzt

- Der Zeilenindex Height erhöht sich von der linken oberenEcke des Fensters zur linken unteren Ecke des Fensters

- Der Spaltenindex Width erhöht sich von der linken oberenEcke des Fensters zur rechten oberen Ecke des Fensters

- HALCON liefert die logische Nummer des zu öffnendenFensters in 'WindowHandle'

Page 27: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

27

• dev_display(Clip)

dev_display(Object : : :)

- Anzeigen eines HALCON Objekts im aktiven Grafikfenster

Page 28: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

28

Page 29: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

29

• mean_image(Clip, Clip_Mean, 15, 15)

mean_image(Image : ImageMean : MaskWidth, MaskHeight :)

- Dem Parameter 'Image' wird das zu glättende (ggf.mehrkanalige) Bild übergeben

- Die Filter-Matrix besteht aus Einsen,welche alle mit demselben Gewicht berücksichtigtwerden.

- 'MaskWidth' gibt die Breite der Filtermatrix anund 'MaskHeight' die Höhe

- Das Ergebnis der Glättung wird in 'ImageMean'geliefert

Page 30: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

30

Page 31: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

31

• threshold (Clip_Mean, Threshold, 0, 90)

threshold (Image : Region : MinGray, MaxGray :)

- Auswahl von Grauwerten welche sich innerhalb desIntervalls mit der unteren Grenze 'MinGray' und deroberen Grenze 'MaxGray' befinden

- Anwendung des Schwellwertoperators auf 'Image'liefert dann das Binärbild 'Region'

Page 32: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

32

Page 33: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

33

• fill_up_shape (Threshold, FillUp, 'area' ,1 , 100)

fill_up_shape( Region : RegionFillUp : Feature, Min, Max :)

- Es werden Löcher in 'Region' aufgefüllt

- Des Ergebnis wird in 'RegionFillUp' geliefert

- Mit Feature wird festgelegt, welches Merkmal dasauszufüllende Loch aufweisen muss

- Als Merkmal kann beispielsweise 'area' oder'compactness' angegeben werden

- Mit 'Min' und 'Max' wird die Untergrenze undObergrenze für das Merkmal angegeben

Page 34: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

34

• erosion_circle (FillUp, Erosion, 1.5)

erosion_circle (Region : RegionErosion : Radius :)

- Es wird die Erosion an einer Region mit einemkreisförmigen strukturierenden Element durchgeführt

- Der Radius des kreisförmigen Elements wird mit dementsprechenden Eingabeparameter festgelegt

- Das Ergebnis der Erosion ergibt sich aus einer MinkowskiSubtraktion und wird in 'RegionErosion' geliefert

- Objekte, die kleiner als das strukturierende Elementsind, existieren im Ergebnis nicht mehr

Page 35: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

35

Page 36: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

36

• dilation_circle (Erosion, Dilation, 3.5)

dilation_cirlce (Region : RegionDilation : Radius :)

- 'Region' wird mit einem kreisförmigen strukturierendenElement bearbeitet

- Die Größe des kreisförmigen Elements wird analog wie beierosion_circle mit 'Radius' festgelegt

- Das Ergebnis der Minkowski Addition wird in'RegionDilation' gespeichert

- Durch Anwendung der Dilatation werden auch diejenigenLöcher aufgefüllt, welche kleiner als dasstrukturierende Element sind

Page 37: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

37

Page 38: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

38

• connection (Dilation, Connection)

connection (Region : ConnectedRegions : :)

- Es werden zusammengehörige Komponenten in 'Region'ermittelt

- Jede ermittelte zusammengehörige Komponente bildet in'ConnectedRegions' eine eigene Region, so dass es sichbei 'ConnectedRegions' um ein Array handelt

- Mit dem Operator 'union1' kann 'connection' wiederaufgehoben werden

Page 39: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

39

Page 40: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

40

• select_shape (Connection, SelectedRegions, 'width', 'and', 50,300)

- select_shape(Regions : SelectedRegions : Features,Operation, Min, Max:)

- Auswahl von Regionen, welche den spezifiziertenGebildemerkmalen entsprechen

- Hier einige Beispiele für mögliche Gebildemerkmale:

- Mit 'area' werden Flächen ausgewählt

- 'height' bezieht sich auf die Gebildehöhe

- 'width' analog zu 'height' auf die Breite

- 'compactness' verwendet als Auswahlkriterium dieKompaktheit des Gebildes

- 'compactness' wird mit folgender Formelermittelt:

Page 41: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

41

πFLC

4²=

- L ist die Gebildelänge

- F ist die Gebildefläche

- C ist der Gebildefaktor und hat beieinem Kreis den Wert 1

- Sofern die Region Löcher hat, ist C> 1

- Mit 'Min' und 'Max' wird die Unter- bzw. Obergrenze desjeweils ausgewählten Gebildemerkmals festgelegt

Page 42: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

42

• count_obj(SelectedRegions, Number)

count_obj (Objects : : : Number)

- Übergabe einer Menge von Objekten im Array 'Objects'

- Anzahl der Objekte im Array wird ermittelt und mit'Number' geliefert

Page 43: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

43

• dev_clear_window()

dev_clear_window(: : :)

- Es werden die Einträge im aktiven Fenster gelöscht

• stop()

- stop (: : :)

- Unterbricht die Programmausführung

- Bei Wiederinbetriebnahme des Programms wird mit derAnweisung fortgefahren, welche auf stop() folgt

Page 44: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

44

• dev_close_window()

dev_close_window(: : :)

- Das aktive Grafikfenster wird geschlossen

Page 45: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

45

Steuerung des Programmablaufs in HDevelop• Zuweisen von Werten an Variablen mit assign

assign (: : Input :Result)

- Der Ausdruck 'Input' wird ausgewertet und an 'Result'zugewiesen

Beispiel:

- assign(a+b,c)

- Die Anzeige in HDevelop erfolgt ähnlich wie in anderenProgrammiersprachen:

c := a + b

- In den Bildverarbeitungsoperatoren können anstelle vonKonstanten als Parameter auch Variablen verwendet werden

Page 46: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

46

Programmverzweigungen mit ifelse bzw. if

- if (: : Condition : )

- 'Condition' wird auf 'true' überprüft

- Trifft zu sofern 'Condition' ≠ 0

- Sofern die Auswertung von 'Condition' 'true'ergibt, werden die Anweisungen im if Teildurchlaufen

- ifelse (: : Condition : )

- Ausführungen zur if Anweisung gelten analog

- Zusätzlich gibt es einen else Teil

- Dieser wird durchlaufen, wenn die Auswertung von'Condition' 'false' ergibt

Page 47: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

47

••

HALCON/C++

Page 48: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

48

••

Vorgehensweise beim Kompilierenvon HALCON/C++ Dateien• Einbinden des HALCON Include-Files mit dem Befehl

#include "HalconCpp.h"

in das zu kompilierende HALCON/C++ Programm

• Setzen der Umgebungsvariablen HALCONROOT mit

setenv HALCONROOT /usr/local/halcon

• Kopieren von makefile in

/usr/local/lehrstuhl/halcon/examples/cpp/

in das Verzeichnis, in welches sich auch die zu kompilierende

HALCON/C++ Datei befindet

Page 49: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

49

••

• Beispiel zum Kopieren von makefile ins eigene Verzeichnis

• $ cp /usr/local/lehrstuhl/halcon/examples/cpp/makefile [Blank]/usr/stud/mayer/halcon/makefile

• Das Dollarzeichen repräsentiert den Systemprompt

• Editieren des Makefiles beispielsweise mit dem grafischenEditor xemacs

• Hier ein Beispielaufruf von der Kommandozeile

$ xemacs /usr/stud/mayer/halcon/makefile &

• Damit wird makefile im xemacs im Hintergrund geladen

• Wenn xemacs aus dem Verzeichnis aufgerufen wird, in dem sichdie zu editierende Datei befindet, braucht der Pfad nichtangegeben werden

• In diesem Fall ist es hinreichend, wenn als Argument lediglichder Dateiname eingegeben wird

Page 50: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

50

••

• Im makefile ist die folgende Zeile zu editieren

TEST_PROG = example1

• Anstelle von example1 ist der Name des zu kompilierendenHALCON/C++ Files anzugeben

• Die Endung .cpp wird nicht eingegeben

• Damit die Kompilierung erfolgreich durchgeführt werden kann,ist die Datei make.$(ARCHITECTURE) ebenfalls in das Verzeichniszu kopieren, in welcher sich die zu kompilierende Datei befindet

• Die Belegung der Umgebungsvariablen ARCHITECTURE hängt von derverwendeten Plattform ab

• Unter Linux ist ARCHITECTURE wie folgt zu setzen

setenv ARCHTITECTURE i486-unknown-linux2.0.0

• Wird die Plattform Sun verwendet ist eine andere Belegung fürARCHITECTURE erforderlich:

Page 51: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

51

••

setenv ARCHITECTURE sparc-sun-solaris2.5

• Schließlich noch die Belegung für HP-Rechner

setenv ARCHITECTURE hppa1.1-hp-hpux10

• Natürlich besteht auch die Möglichkeit remote zu kompilieren

• Hier wird bespielsweise eine Verbindung zu einem Sun-Rechnerhergestellt

$ rlogin sunradig12.informatik.tu-muenchen.de

Page 52: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

52

••

• Herror ::read_image(Hobject *Image, const Htuple &FileName)

- Einlesen eines Bildes vom Massenspeicher

- Das Eingangsbild wird in 'Image' geliefert

- Das Einlesen von nicht HALCON-Format Bildern wie 'tiff'ist auch möglich

- Dies erfolgt über 'FileName'

- Hier kann auch der Dateipfad angegeben werden

- HALCON sucht Dateien im aktuellen Verzeichnis

- Darüber hinaus kann mit der UmgebungsvariablenHALCONIMAGES ein zu durchsuchender Pfad angegeben werden

- Beispiel für das Setzen von HALCONIMAGES unter UNIX:

setenv HALCONIMAGES "/usr/local/images"

Page 53: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

53

••

• Herror ::get_image_pointer1 (Hobject Image, long *Pointer,char* Type, long* Width, long *Height)

- Liefert einen Pointer auf den ersten Kanal desEingabebildes (also beispielsweise bei einem RGB Bild wirdein Pointer auf den Rotkanal geliefert)

- Als weitere Informationen erhält man die Höhe, Breiteund den Bildtyp des übergebenen Bildes

Page 54: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

54

••

• Herror set_window_attr(const HTuple &AttributeName, constHTuple & AttributeValue)

- Belegen der Attribute eines Fensters

- Z.B. kann die Hintergrundfarbe auf 'schwarz' gesetztwerden

• Herror ::open_window(const HTuple &Row, const HTuple &Column,const HTuple &Width, const HTuple &Height, const HTuple&FatherWindow, const HTuple &Mode, const HTuple &Machine, long*WindowHandle)

- Öffnen eines neuen Fensters

- Der Hintergrund des Fensters ist per Voreinstellung auf'schwarz' gesetzt

- Der Fensterrand ist weiß und hat eine Breite von 2 Pixel

Page 55: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

55

••

- Der Ursprung des Koordinatensystems (0,0) beginntin der oberen linken Ecke des Fensters.

- Der Zeilenindex erhöht sich von der linken oberen Eckedes Fensters zur linken unteren Ecke des Fensters undnimmt maximal den Wert Height-1 an

- Der Spaltenindex erhöht sich von der linken oberen Eckedes Fensters zur rechten oberen Ecke des Fensters undnimmt maximal den Wert Width-1 an.

- Mit dem Parameter 'Machine' wird der Name des Computersangegeben, auf dem das Fenster geöffnet werden soll

- Sofern an 'Machine' ein leerer String übergeben wird,verwendet HALCON den in der Umgebungsvariablen 'DISPLAY'gesetzten Wert

- Der Parameter 'Mode' setzt den Fenstermodus (z.B.'visible', 'invisible')

Page 56: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

56

••

- 'Row' gibt den Zeilenindex der oberen linken Ecke an.Dieser ist per Voreinstellung auf 0 gesetzt

- 'Column' spezifiziert den Spaltenindex der oberen linkenEcke und ist ebenfalls per Voreinstellung auf 0 gesetzt

- Mit 'FatherWindow' wird ein in der Hierarchievorangehendes Fenster über seine logische Nummer(WindowHandle) angegeben

- Sofern das zu öffnende Fenster die Wurzel sein soll,kann 0 oder 'root' angegeben werden

- HALCON liefert die logische Nummer des zu öffnendenFensters in 'WindowHandle'

• Herror ::close_window (const HTuple &WindowHandle)

- Es wird dasjenige Ausgabefenster geschlossen, dessenlogische Nummer 'WindowHandle' entspricht

Page 57: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

57

••

• Herror ::disp_obj(Hobject Object, const HTuple &WindowHandle)- Anzeigen eines HALCON Objekts im Ausgabefenstermit der logischen Nummer 'WindowHandle‚

• Herror ::clear_window(const HTuple &WindowHandle)

- Es werden die Einträge im Fenster mit der logischenNummer 'WindowHandle' gelöscht

Page 58: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

58

••

• Digitale Darstellung von Bildern mit zweidimensionalen Arrays:

1346201465191823112743

-An die Stelle I(X,Y) wird der jeweilige Grauwert desBildes eingetragen

- Bei einkanaligen Grauwertbildern liegen die Werte vonI(X,Y) meistens im Intervall [0;255]

- Schwarze Punkte haben den Grauwert 0

- Weiße Punkte den Grauwert 255

I(X,Y)

X = 1,2...,M (Zeilen)

Y = 1,2,...,N (Spalten)

Page 59: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

59

••

-Bei mehrkanaligen Bildern, wie beispielsweise den RGBBildern setzt sich der Farbwert aus drei Grauwertenzusammen

-Binärbilder unterscheiden nur zwischen Bit gesetztoder nicht

- Beispielsweise kann man den Sachverhalt 'Bit gesetzt(1)' durch ein weißes Pixel darstellen und 'Bit nichtgesetzt (0)' durch ein schwarzes Pixel

Page 60: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

60

••

• Faltung:

- Homogene Operation, der eine lineare Verknüpfungzugrunde liegt

- Homogene Operation:

- Verknüpfungsoperation

- verwendet für das gesamte Bild denselbenAlgorithmus

Page 61: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

61

••• Beispiel:

- Auf die Matrix I wird der Filter F angewendet

- Die Einträge in E ergeben sich indem F über Igeschoben wird

- Dabei wird in jeder möglichen Position von F derEintrag von F mit dem jeweils darunter liegendenEintrag von I multipliziert. Alle sich ergebendenWerte werden dann für jede mögliche Position von Faddiert und an die Stelle in E geschrieben, welche zumZeitpunkt der jeweiligen Position von F mit dermittleren Stelle von F identisch ist

1346201465191823112743

111111111

71667150

I FE

Page 62: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

62

••• Hier die allgemeine Gleichung für die diskrete Faltung:

� �+

−=

+

−=

+−−=k

ki

l

ljcjyixIjiFcyxE 01 ),(),(),(

• C0 und C1 sind Konstanten, um im Bereich zwischen 0 und 255 zubleiben

• F(i,j) ist die Filtermatrix und wird auch als Maskebezeichnet

• F hat (2k+1) Zeilen und (2l+1) Spalten

• Damit der Bezugspunk in der Mitte eindeutig bestimmt werdenkann, muss die Matrixgröße ungerade sein

• Die Randpunkte können im Ergebnis weggelassen werden

• Es entsteht dann ein Rand der Größe k bei einer Filtergrößevon (2k+1) x (2k+1)

Page 63: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

63

••

• Bei der im Beispiel verwendeten Maske F handelt es sich umeinen ungewichteten Mittelwertfilter

• c1 muß mit 1/10 initialisiert werden, um im diskreten Bereichzu bleiben

• Es wird somit der mittlere Grauwert aus den jeweilsbenachbarten Pixeln ermittelt

Page 64: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

64

••

• Herror ::mean_image(Hobject Image, Hobject *ImageMean, constHTuple &MaskWidth, const HTuple &MaskHeight)

- Dem Parameter 'Image' wird das zu glättende (ggf.mehrkanalige) Bild übergeben

- Die Filter-Matrix besteht aus Einsen,welche alle mit demselben Gewicht berücksichtigtwerden.

- 'MaskWidth' gibt die Breite der Filtermatrix anund 'MaskHeight' die Höhe

- Das Ergebnis der Glättung wird in 'ImageMean'geliefert

Page 65: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

65

••

• Originalbild Mittelwertgefiltertes BildMaskengröße: 15x15

Page 66: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

66

••

• Anwendung der ersten und zweiten Ableitung auf ein Bild:

I x yI x y

xx' ( , )( , )

=∂

∂I x y

I x yyy' ( , )

( , )=

∂∂

• Diskrete Gradienten in X und Y Richtung:

∂∂

I x yx

I x yI x y I x x y

xx

( , )( , )

( , ) ( , )≈ =

− −∆

∆∆

∂∂

I x yy

I x yI x y I x y y

yy

( , )( , )

( , ) ( , )≈ =

− −∆

∆∆

Page 67: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

67

••

• Hier die diskreten Ableitungen für ∆x = 1 und ∆y = 1:

∆x I x y I x y I x y( , ) ( , ) ( , )= − −1 ∆ y I x y I x y I x y( , ) ( , ) ( , )= − −1

• Für diese diskreten Ableitungen gelten die folgendenFaltungsmatrizen:

11−=yF11−

=xF

Page 68: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

68

••

• Beide Faltungsmatrizen ergänzt mit einem mittleren Bezugspunkt:

101 −=yF1

01

−=xF

• Um ein Gradientenbild zu erhalten, muss man für jeden Bildpunktzwei Gradientenwerte Berechnen und diese nach einerRechenvorschrift wie beispielsweise dem Betrag derRichtungsdifferenz zusammenfassen:

2),(),(

),(yxIyxI

yxD yxA

∆+∆=

Page 69: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

69

••

• Um eine Glättung von gestörten Bildsignalen zu erreichen,verwendet man Filtermatrizen der Größe 3x3 und mehr, wiebeispielsweise den Sobel-Operator :

101202101

−−−

=SyF121

000121

−−−=SxF

Page 70: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

70

••

• Herror ::detect_edge_segments (Hobject Image, const HTuple&SobelSize, const HTuple &MinAmplitude, const HTuple&MaxDistance, const HTuple &MinLength, HTuple *BeginRow, HTuple*BeginCol, HTuple *EndRow, Htuple *EndCol)

- Es werden mit diesem Operator gerade Kantenelemente in'Image' gefunden

- Die Beschreibung der gefundenen Kanten erfolgt über dieStartkoordinaten 'BeginRow' und 'BeginCol' und dieEndkoordinaten 'EndRow' und 'EndCol'

- Die Kantenermittlung arbeitet mit dem Sobelfilter

- Die Größe der Sobel-Filtermatrix wird mit 'SobelSize'gesteuert

- Als Rechenvorschrift wird 'Betrag derRichtungsdifferenz' verwendet

Page 71: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

71

••

- Mit 'MaxDistance' wird festgelegt, wie groß die Distanzin Pixel zwischen der approximierenden Linie und demjeweils betrachteten zugehörigen Kantenpunkt höchstenssein darf

- Mit 'MinLength' wird die minimale Länge der zuermittelnden Linien festgelegt

- 'MinAmplitude' legt fest, daß lediglich diejenigen Pixelins Endergebnis aufgenommen werden können, derenFilterantwort größer als 'MinAmplitude' ist

- somit werden bei einem hohen Wert von 'MinAmplitude' nurdiejenigen Kanten ermittelt, die eine entsprechend hoheGrauwertänderung im Bezug auf ihre direkte Umgebungaufweisen

- Wenn mehr als eine Kante ermittelt wird, erfolgt dieLieferung aller Kantendaten in Arrays

Page 72: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

72

••

Anwendung des Sobelfilters mit Maskengröße 9x9 und derRechenvorschrift 'Betrag der Richtungsdifferenz'

Page 73: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

73

••

• Herror ::line_orientation(const HTuple &RowBegin, const HTuple&ColBegin, const HTuple &RowEnd, const HTuple &ColEnd, HTuple*Phi)

- Liefert die Richtung der übergebenen Kanten in Phi (-π/2<Phi≤π/2)

- Messung der Richtung in Bogenmaß

- Es können auch Arrays übergeben werden

- Bei Übergabe mehrerer Kanten wird das Ergebnis in einemArray geliefert

Page 74: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

74

••

• Herror ::gen_empty_region (Hobject* EmptyRegion)

- Erzeugung einer leeren Region, die keine Pixelbeinhaltet

• Herror ::distance_pp(const HTuple &Row1, const HTuple &Column1,const Htuple &Row2, const HTuple &Column2, HTuple *Dist)

- Ermittlung der Entfernung zwischen Punktepaaren mit derfolgenden Formel:

)²Column(Column)²Row(RowDist 2121 −+−=

Page 75: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

75

••

• Herror ::gen_rectangle2(Hobject *Rectangle, const HTuple &Row,const HTuple &Column, const HTuple &Phi, const HTuple &Length1,const HTuple &Length2)

- Erzeugung eines Rechtecks mit Zentrum ('Row', 'Column')

- 'Phi' bestimmt die Orientierung des Rechtecks

- 'Length1' und 'Length2' legen die halbe Breite bzw.halbe Höhe des Rechtecks fest

- Bei 'Phi' handelt es sich um den Winkel zwischen'Length1' und der horizontalen Achse gemessen in Bogenmaß

- Die obere rechte Ecke des Rechtecks repräsentiert denUrsprung (0,0) des Koordinatensystems

Page 76: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

76

••

Mathematische Morphologie bei Binärbildern

XIE +=

Grundoperationen:

• Dilatation

• X ist ein strukturierendes Element

• Die Dilatation wird auch als Minkowski-Addition bezeichnet

Page 77: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

77

••

• Erosion

XIE −=

Page 78: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

78

••

• Dem strukturierenden Element ist ein Bezugspunkt zugeordnet

• Dieser kann innerhalb oder außerhalb des strukturierendenElements liegen

• Bei der Dilatation wird jeder Bildpunkt des Bildes B auf dieGröße des strukturierenden Elements XD transformiert

• Bei der Erosion werden alle Punktegruppen in denen dasstrukturierende Element voll enthalten ist,auf den Bezugspunktvon X transformiert

Page 79: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

79

••

• Vereinigungsmenge

E = IA ∪ IB

• Entspricht dem logischen OR

• Schnittmenge

E = IA ∩ IB

• entspricht dem logischen AND

• Mengendifferenz

E = IA / IB

• entspricht dem logischen EXOR

Page 80: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

80

••

Einzelobjektverarbeitung im Binärbild• Objekttrennung durch Grassfire (Steppenbrand)

• Getrennte Objekte werden in eine eigene Region geschrieben

• Die Koordinaten mindestens eines Objektpunkts IZ(x,y) müssenbekannt sein und bilden den Zündpunkt

• Von diesem Punkt aus wird jeder Punkt des Objekts stufenweiseerfasst

• Es erfolgt eine Dilatierung mit der Objektraute

• Anschließend wird eine logische AND-Operation ausgeführt, sodass die über den Rand hinausragenden Markierungspunkte imdilatierten Bild abgeschnitten werden

Page 81: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

81

••

• Herror ::concat_obj(Hobject Object1, Hobject Object2, Hobject*ObjectConcat)

- Der Operator bekommt zwei HALCON Objekte (Object1,Object2 übergeben

- Bei den Objekten handelt es sich um Arrays, welchejeweils mehrere Bildobjekte enthalten können

- Diese Bildobjekte werden nun alle in ObjectConcatzusammengefasst

- Jedes Bildobjekt bildet in 'ObjectConcat' eine eigeneRegion

Page 82: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

82

••• Ein Beispiel für ein Bild, welches mehrere Regionenbeinhaltet

• Bei den Regionen handelt es sich um gerade Kanten, welchedurch unterschiedliche Farben kenntlich gemacht sind

• Zur Veranschaulichung ist das Originalbild dahinter gelegt

Page 83: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

83

••

Herror ::union1 (Hobject Region, Hobject *RegionUnion)

- Übergabe eines HALCON Objects, 'Region', welches ineinem Array mehrere Regionen beinhalten kann

- Diese Regionen werden in 'RegionUnion' verschmolzen

Herror ::fill_up_shape(Hobject Region, Hobject *RegionFillUp,const HTuple &Feature, const HTuple &Min, const HTuple &Max)

- Es werden Löcher in 'Region' aufgefüllt

- Des Ergebnis wird in 'RegionFillUp' geliefert

- Mit Feature wird festgelegt, welches Merkmal dasauszufüllende Loch aufweisen muss

Page 84: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

84

••- Als Merkmal kann beispielsweise 'area' oder'compactness' angegeben werden

- Mit 'Min' und 'Max' wird die Untergrenze undObergrenze für das Merkmal angegeben

Page 85: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

85

••• Auffüllung von Löchern deren Fläche zwischen 1 und 100 Pixelnbeträgt

Page 86: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

86

••

Herror ::erosion_circle (Hobject Region, Hobject *RegionErosion,const HTuple &Radius)

- Es wird die Erosion an einer Region mit einemkreisförmigen strukturierenden Element durchgeführt

- Der Radius des kreisförmigen Elements wird mit dementsprechenden Eingabeparameter festgelegt

- Das Ergebnis der Erosion ergibt sich aus einer MinkowskiSubtraktion und wird in 'RegionErosion' geliefert

- Objekte, die kleiner als das strukturierende Elementsind, existieren im Ergebnis nicht mehr

Page 87: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

87

••

• Erosion mit einem kreisförmigen strukturierenden Element mitRadius 2.5

Page 88: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

88

••

• Herror ::dilation_circle (Hobject Region, Hobject*RegionDilation, const HTuple &Radius)

- 'Region' wird mit einem kreisförmigen strukturierendenElement bearbeitet

- Die Größe des kreisförmigen Elements wird analog wie beierosion_circle mit 'Radius' festgelegt

- Das Ergebnis der Minkowski Addition wird in'RegionDilation' gespeichert

- Durch Anwendung der Dilatation werden auch diejenigenLöcher aufgefüllt, welche kleiner als dasstrukturierende Element sind

Page 89: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

89

••

• Dilatation mit einem kreisförmigen Gebilde und Radius 3.5

Page 90: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

90

••

• Herror ::connection(Hobject Region, Hobject* ConnectedRegions)

- Es werden zusammengehörige Komponenten in 'Region'ermittelt

- Jede ermittelte zusammengehörige Komponente bildet in'ConnectedRegions' eine eigene Region, so dass es sichbei 'ConnectedRegions' um ein Array handelt

- Mit dem Operator 'union1' kann 'connection' wiederaufgehoben werden

Page 91: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

91

••

• Ermittlung von zusammengehörigen Regionen

• Diese werden in eine eigene Region geschrieben

• Die Regionen sind durch die unterschiedliche Verwendung vonFarben kenntlich gemacht worden

Page 92: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

92

••

• Herror ::select_shape(Hobject Regions, Hobject*SelectedRegions, const HTuple &Features, const HTuple&Operation, const HTuple &Min, const HTuple &Max)

- Auswahl von Regionen, welche den spezifiziertenGebildemerkmalen entsprechen

- Hier einige Beispiele für mögliche Gebildemerkmale:

- Mit 'area' werden Flächen ausgewählt

- 'height' bezieht sich auf die Gebildehöhe

Page 93: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

93

••

- 'width' analog zu 'height' auf die Breite

- 'compactness' verwendet als Auswahlkriterium dieKompaktheit des Gebildes

- 'compactness' wird mit folgender Formelermittelt:

πFLC

4²=

- L ist die Gebildelänge

- F ist die Gebildefläche

- C ist der Gebildefaktor und hat beieinem Kreis den Wert 1

- Sofern die Region Löcher hat, ist C> 1

Page 94: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

94

••- Mit 'Min' und 'Max' wird die Unter- bzw. Obergrenze desjeweils ausgewählten Gebildemerkmals festgelegt

Page 95: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

95

••

• Auswahl von Gebilden deren Fläche zwischen 1 und 1000 Pixelgroß ist

Page 96: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

96

••

• Auswahl von Gebilden deren Kompaktheit zwischen 1 und 2 beträgt

Page 97: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

97

••

• Auswahl von Gebilden deren Höhe zwischen 25 und 30 Pixelnbeträgt

Page 98: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

98

••

• Herror ::smallest_rectangle1(Hobject Regions, long* Row1, long*Column1, long* Row2, long* Column2)

- Ermittlung eines umgebenden Rechtecks für jede Region

- 'Regions' ist ein Array und kann mehrere Regionenbeinhalten

- Mit 'Row1' und 'Column1' werden die Koordinaten deroberen linken Ecke des Rechtecks beschrieben

- Mit 'Row2' und 'Column2' entsprechend die Koordinatender unteren rechten Ecke

• Herror ::reduce_domain(Hobject Image, Hobject Region, Hobject*ImageReduced)

- Bildet die Schnittmenge von 'Image' und 'Region'

- Als Ergebnis wird ein neuer Definitionsbereichfestgelegt

Page 99: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

99

••

- Bei dem Ergebnis kann es sich um eine Untermenge von'Region' handeln

Page 100: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

100

••

• Reduktion des Originalbildes auf die Fläche, welche durchdas zuletzt segmentierte einzelne Objekt repräsentiert wird

Page 101: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

101

••

Affine Transformationen• Veränderung der Ortskoordinaten

• Durchführung von Normierungen

• Translation (Verschiebung von Regionen)

• Skalierung (Größenänderungen von Regionen)

• Rotation (Drehung von Regionen)

• Bei der Translation und orthogonalen Drehungen bleibt derPixelzusammenhang erhalten

• Bei Drehungen um beliebige Winkel und Skalierungen soll eineInterpolierung durchgeführt werden

• z.B. bilineare Interpolation:

)1,1(),1()1,(),()','(' 4321 +++++++= yxIgyxIgyxIgyxIgyxI

Page 102: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

102

••• Verwendung von Transformationsmatrizen

• Darstellung der Bildpunkte I und I‘ in homogenen Koordinaten

• I repräsentiert die Koordinaten des Ursprungsbildes

• I‘ diejenigen Koordinaten welche durch affine Transformationentstanden sind

���

���

=1yx

I���

���

=1

''

' yx

I

• Affine Transformation liefert die neuen Koordinaten ausLinearkombination der ursprünglichen Werte mit denKoeffizienten der Transformationsmatrix

Page 103: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

103

••

• Bei der Translation hat der Ursprung im ursprünglichenKoordinatensystem in transformierten Koordinatensystem dieKoordinaten (-tx, -ty)

• Die Berechnung der neuen Koordinaten erfolgt mit derfolgenden Transformationsmatrix:

���

���

−−

1001001

y

x

tt

• Keine Änderung des Ursprungs bei der Skalierung• Vergrößerung der Pixel mit Sx und Sy > 1• Verkleinerung mit Sx und Sy < 1

Page 104: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

104

••

���

���

1000000

y

x

SS

• Bei der Rotation ändert sich weder Ursprung noch Skalierung• Es erfolgt eine Drehung der alten Achsen um den Winkel Θ gegenden Uhrzeiger

���

���

ΘΘ−ΘΘ

1000cossin0sincos

Page 105: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

105

••

• Herror ::hom_mat2d_identity(HTuple *HomMat2dIdentity)

- erzeugt eine Transformationsmatrix

- Diese dient als als Grundlage für Translation, Rotation,und Skalierung

• Herror ::hom_mat2d_translate(const HTuple &HomMat2D, constHTuple &Tx, const Htuple &Ty, HTuple *HomMat2DTranslate)

- Die Transformationsmatrix wird mit Werten für dieTranslation ergänzt

- Die Translation entlang der X-Achse wird durch 'Tx'spezifiziert und entlang der Y-Achse mit 'Ty'

- Die Transformationsmatrix für die Translation wird in'HomMat2DTranslate' geliefert

Page 106: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

106

••

• Herror ::affine_trans_image(Hobject Image, Hobject*ImageAffinTrans, const HTuple &HomMat2D, const HTuple&Interpolation, const HTuple &AdaptImageSize)

- Durchführung einer beliebigen affinen Transformation

- Verwendung der Transformationsmatrix 'HomMat2D'

- Bei Drehungen und Skalierungen sollte eine Interpolationdurchgeführt werden, um einen Treppeneffekt (Aliasing) zuvermeiden

- Wenn eine Interpolation nicht gewünscht ist, kann 'none'gewählt werden

- Mit 'AdaptImageSize' wird angegeben, ob die Bildgrößeverändert werden soll

- Dies kann mit 'true' festgelegt werden

- Ansonsten ist 'false' zu wählen

- 'AdaptImageSize' vermeidet Clipping

Page 107: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

107

••

• Verschiebung des segmentierten Objekts zum Ursprung des Bildes

Page 108: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

108

••#include "HalconCpp.h"#include <iostream.h>

class traffic_sign_recognition

{HTuple WindowID;

HTuple HRow1, HCol1, HRow2, HCol2, HPhi, Helements, HLength;HTuple Width, Height, HomMat2D;Hobject Image, Image_Mean, RSign, RTemp1, RSign2, RSign3;Hobject RSign4, RSign5, RSign6, RSign7, RSign8, RSign9;Hobject RSign10, Image_Reduced;void segmentation(int MEAN_VALUE_SEARCH);

public:void action (char file[]);

};

Page 109: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

109

••

void traffic_sign_recognition::segmentation(intMEAN_VALUE_SEARCH)

{char proceed;::disp_obj(Image,WindowID);cout<<"Weiter mit <RETURN>\n";cin>>proceed;

if (MEAN_VALUE_SEARCH){::mean_image(Image,&Image_Mean,HTuple(15),HTuple(15));

::detect_edge_segments(Image_Mean,HTuple(3),HTuple(10),HTuple(7),HTuple(11),&HRow1,&HCol1,&HRow2,&HCol2);

}

Page 110: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

110

••else

::detect_edge_segments(Image,HTuple(11),HTuple(10),HTuple(7),HTuple(11),&HRow1,&HCol1,&HRow2,&HCol2);

::line_orientation(HRow1,HCol1,HRow2,HCol2,&HPhi);::gen_empty_region(&RSign);Helements = HCol1.Num();::distance_pp(HRow1,HCol1,HRow2,HCol2,&HLength);HRow1 = (HRow1+HRow2)/2;HCol1 = (HCol1+HCol2)/2;

for (int i=0; HTuple(i)<=Helements-1; i+=1){

::gen_rectangle2(&RTemp1,HTuple(HRow1[i]),HTuple(HCol1[i]),HTuple(HPhi[i]),HTuple(HLength[i]),HTuple(1));

::concat_obj(RSign,RTemp1,&RSign);}

::union1(RSign,&RSign2);

Page 111: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

111

••::fill_up_shape(RSign2,&RSign3,HTuple("area"),HTuple(1),HTuple(100));::erosion_circle(RSign3,&RSign4,HTuple(2.5));::dilation_circle(RSign4,&RSign5,HTuple(3.5));::connection(RSign5,&RSign6);

::select_shape(RSign6,&RSign7,HTuple("area"),HTuple("and"),HTuple(1),HTuple(1000));

::select_shape(RSign7,&RSign8,HTuple("compactness"),HTuple("and"),HTuple(1),HTuple(2));

::select_shape(RSign8,&RSign9,HTuple("height"),HTuple("and"),HTuple(25),HTuple(30));

::select_shape(RSign9,&RSign10,HTuple("width"),HTuple("and"),HTuple(20),HTuple(40));::smallest_rectangle1(RSign10,&HRow1,&HCol1,&HRow2,&HCol2);

Page 112: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

112

••

::disp_obj(RSign10,WindowID);cout<<"Weiter mit <RETURN>\n";cin>>proceed;

::clear_window(WindowID);::reduce_domain(Image,RSign10,&Image_Reduced);::hom_mat2d_identity(&HomMat2D);::hom_mat2d_translate(HomMat2D,HTuple(0)-HRow1,HTuple(0)-

HCol1,&HomMat2D);

::affine_trans_image(Image_Reduced,&Image_Reduced,HomMat2D,HTuple("constant"),HTuple("false"));

::disp_obj(Image_Reduced,WindowID);cout<<"Weiter mit <RETURN>\n";cin>>proceed;

}

Page 113: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

113

••

void traffic_sign_recognition::action(char file [])

{Herror err = read_image(&Image,HTuple(file));if (err != H_MSG_TRUE)

{fprintf(stderr,"could not find image");exit(1);}

::get_image_pointer1(Image,_,_,&Width,&Height);::set_window_attr("background_color",HTuple("black"));

::open_window(HTuple(0),HTuple(0),HTuple(0.5)*Width,HTuple(0.5)*Height,0,"","",&WindowID);segmentation(0);close_window(WindowID);

}

Page 114: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

114

••

int main(int argc, char *argv[])

{traffic_sign_recognition ts;ts.action(argv[1]);return 0;

}

Page 115: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

115

••

• Herror ::access_channel(Hobject MultiChannelImage, Hobject*Image, const HTuple &Channel)

- Zugriff auf 'Channel' bei einem mehrkanaligen Bild

- Durchnumerierung der Kanäle von 1 bis n

- Der extrahierte Kanal wird dann in 'Image' geliefert

- Beispielsweise erfolgt der Zugriff auf den Blaukanal einesRGB-Bildes durch Initialisierung von 'Channel' mit 3

Page 116: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

116

••

• Zugriff auf den Blaukanal eines RGB Bildes

• Helle Blauanteile entsprechen hohen Grauwerten und dunkleBlauanteile niedrigen Grauwerten

Page 117: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

117

••

• Herror ::threshold(Hobject Image, Hobject *Region, const HTuple&MinGray, const HTuple &MaxGray)

- Auswahl von Grauwerten welche sich innerhalb desIntervalls mit der unteren Grenze 'MinGray' und der oberenGrenze 'MaxGray' befinden

- Anwendung des Schwellwertoperators auf 'Image' liefertdann das Binärbild 'Region'

Page 118: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

118

••

• Anwendung des Schwellwertoperators auf den extrahiertenBlaukanal

• Auswahl von Grauwerten aus dem Intervall [120;170]

Page 119: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

119

••

• Herror ::intersection (Hobject Region1, Hobject Region2, Hobject*RegionIntersection)

- Die Regionen, welche in 'Region1' enthalten sind, werdenmit den Regionen in 'Region2' geschnitten

- Jede Region in 'Region1' wird mit allen Regionen in'Region2' geschnitten

- Das Ergebnis wird in 'RegionIntersection' geliefert

Page 120: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

120

••

• Herror ::zoom_image_size (Hobject Image, Hobject *ImageZoom,const HTuple &Width, const HTuple &Height, const HTuple&Interpolation)

- Skalierung von 'Image' in 'ImageZoom'

- Breite und Höhe des Ergebnisbildes werden mit 'Width' and'Height' festgelegt

- 'Interpolation' legt die Art der Interpolation fest,sofern gewünscht

Page 121: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

121

••

#include "HalconCpp.h"

class channel

{protected:HTuple WindowID;Hobject Image, Rot, Gruen, Blau;enum farben {rot=1, gruen, blau};HTuple Width, Height;

public:virtual void show(char file[]);channel(char file[]);void get_win(char file[]);

};

Page 122: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

122

••

channel::channel(char file[])

{get_win(file);

:}

void channel::get_win(char file[])

{Herror err = read_image(&Image,HTuple(file));

if (err != H_MSG_TRUE){fprintf(stderr,"could not find image"); exit(1);

}::get_image_pointer1(Image,_,_,&Width,&Height);::set_window_attr("background_color",HTuple("black"));

Page 123: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

123

••

::open_window(HTuple(0),HTuple(0),HTuple(0.5)*Width,HTuple(0.5)*Height,0,"","",&WindowID);}

void channel::show(char file[]){

char proceed;get_win(file);

for (farben i=rot ; i<=blau; int(i)++){

Page 124: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

124

••

switch(i){case rot:::access_channel(Image,&Rot,i);::disp_obj(Rot,WindowID);cout<<"Weiter mit beliebiger Eingabe und <RETURN>\n";cin>>proceed;

::

}

Page 125: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

125

••}close_window(WindowID);

}

class channel_compound : public channel

{protected:Hobject Region_Rot, Region_Gruen, Region_Blau;Hobject RG_Intersection, RGB_Intersection;Hobject RegionFillUp, RegionErosion, SelectedRegions,

ConnectedRegions;Hobject RegionDilation, car;

public:channel_compound(char file[]);virtual void show(char file[]);void find();

};

Page 126: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

126

••

channel_compound::channel_compound(char file[]): channel(file)

{show(file);

:}

void channel_compound::show(char file[]){char proceed;get_win(file);for (farben i=rot ; i<=blau; int(i)++){

Page 127: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

127

••

switch(i){case rot:::threshold(Rot,&Region_Rot,HTuple(110),HTuple(170));::disp_obj(Region_Rot,WindowID);cout<<"Weiter mit beliebiger Eingabe und <RETURN>\n";cin>>proceed;break;

::

}

Page 128: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

128

••}

}

void channel_compound::find()

{char proceed;

::intersection(Region_Rot,Region_Gruen,&RG_Intersection);::intersection(RG_Intersection,Region_Blau,&RGB_Intersection);

::fill_up_shape(RGB_Intersection,&RegionFillUp,HTuple("area"),HTuple(1),HTuple(100));::erosion_circle(RegionFillUp,&RegionErosion,HTuple(1.5));::dilation_circle(RegionErosion,&RegionDilation,HTuple(2.5));::connection(RegionDilation,&ConnectedRegions);

::select_shape(ConnectedRegions,&SelectedRegions,HTuple("width"),HTuple("and"),HTuple(16),HTuple(17));

Page 129: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

129

••

::select_shape(SelectedRegions,&car,HTuple("height"),HTuple("and"),HTuple(9),HTuple(10));::clear_window(WindowID);::disp_obj(car,WindowID);cout<<"Weiter mit beliebiger Eingabe und <RETURN>\n";cin>>proceed;close_window(WindowID);

}

int main(int argc, char *argv[]){channel_compound com(argv[1]);return 0;

}

Page 130: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

130

••

FouriertransformationFouriertransformation von Bildernvon Bildern

EindimensionaleEindimensionaleFouriertransformationFouriertransformation

•• Bilder I(x,y) mit den Bildkoordinaten x und y kBilder I(x,y) mit den Bildkoordinaten x und y köönnen innnen inBildfrequenzbilder S(Bildfrequenzbilder S(ffxx,, ffyy) mit den Bildfrequenzen) mit den Bildfrequenzen ffxx undund ffyytransformiert werdentransformiert werden

•• die Transformation vom Bildbereich (Zeitbereich, Ortsbereich)die Transformation vom Bildbereich (Zeitbereich, Ortsbereich)in den Frequenzbereich wirdin den Frequenzbereich wird FouriertransformationFouriertransformation genanntgenannt

Page 131: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

131

••

Analyse eines periodischen Signals bAnalyse eines periodischen Signals b’’(x), das sich aus den(x), das sich aus denEinzelschwingungen bEinzelschwingungen b11(x), b(x), b22(x) und b(x) und b33(x) zusammensetzt(x) zusammensetzt

Page 132: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

132

••

b(x) = eindimensionales Ortssignal

sinusförmige Helligkeitsverteilung

f(t) = Transformation durch Abtastung in ein zeitabhängigesSignal

b1(x) = Grundsignal einer Sinusschwingung

b2(x), b3(x),...,bn(x)

• b(x) = eindimensionales Ortssignal mit der Periodenlänge:

x00 f

1X =

• fx0 ist die Grundfrequenz

Page 133: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

133

••

Signalkomponenten eines Rechtecksignals:

x)5fsin(251 (x)b

x)3fsin(231 (x)b

x)fsin(2(x)b

x03

x02

x01

π

π

π

=

=

=

Page 134: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

134

••

• Addition der Grundschwingung b1(x) mit harmonischenOberschwingungen b2(x) und b3(x) ergibt das Summensignal b‘(x)

=++= )(3)(2)(1)(' xbxbxbxb

=−

3

1)0)12(2sin(

121

nxxfn

Page 135: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

135

••

•Fourierreihe

001 01

/1,)12(2sin12

1)()( x

K

n

K

nn fX

Xxn

nxbxb =−

−== ��

==

π

• Approximation eines Rechtecksignals ohnePhasenverschiebung

∞→K

Page 136: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

136

••

b(x) = b(x+kX0)• Beschreibung einer allgemein stückweise stetige periodischeFunktion durch eine Reihe von Sinus und Cosinus Gliedern

)2sin(0

xX

kπ )2cos(0

xX

Page 137: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

137

••

•Berücksichtigung der Phasenverschiebung

dxX

kxbX

kxaaxbk

kk

k ��∞

=

=

++=11 0

0 )0

2sin()2cos(2

)( ππ

•Die Amplituden der Cosinus und Sinusfunktion sind dieFourierkoeffizienten:

dxX

kxxbX

ax

xk �

=2/

2/ 00

0

0

)2cos()(2 π

Page 138: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

138

••

dxX

kxxbX

bx

xk �

=2/

2/ 00

0

0

)2sin()(2 π

• Bei bekannten Fourierkoeffizienten ist die Reiheb(x) definiert

Komplexe Schreibweise• Zum Vergleich der Fourierreihe mit der Fouriertransformation

�∞

−∞=

=k

xx

kj

k ecxb 0

2

)(π

Page 139: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

139

••

• Bei den Koeffizienten ck handelt es sich i.a. umkomplexe Zahlen

kjkk ecc φ=

)(21

kkk jbac −=

}{2}{2 kkkk cbca ℑ−=ℜ=

Page 140: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

140

••

Betrag Phase

k

kkkk a

bkbac arctan21 22 −=+= φ

•• KomplexeKomplexe FourierkoeffizientenFourierkoeffizienten::

dxexbX

cX

X

Xkj

k �−

−=

2/

2/

2

0

0

0

0)(1 π

Page 141: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

141

••

Übergang auf das kontinuierliche Spektrum

• Mit der Fourieranalyse können nur periodische Signalebeschrieben werden

•Die Fouriertransformation eignet sich für beliebigenichtperiodische Signale

• Hierzu ist eine mathematische Umformungerforderlich

� �→

→=

xx

xxk

fkfX

kdffSc

00

)(

Page 142: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

142

••

xxfj

x dfefSxb x�∞

∞−

= π2)()(

• Hierbei handelt es sich um die eindimensionale inverseFouriertransformation

• Aus dem Ortsfrequenzspektrum S(fx) wird die Ortsfunktion b(x)berechnet

• Die eindimensionale Fouriertransformation

dxexbfS xfjx

x�∞

∞−

−= π2)()(

Page 143: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

143

••

Zweidimensionale kontinuierliche Zweidimensionale kontinuierliche FouriertransformationFouriertransformation

•• Es erfolgt eine Erweiterung um die beidenEs erfolgt eine Erweiterung um die beiden OrtskoordinatenOrtskoordinaten x undx undyy•• Aus derAus der OrtsfunktionOrtsfunktion I(x,y) wird dieI(x,y) wird die OrtsfrequenzfunktionOrtsfrequenzfunktionS(S(ffxx,, ffyy) berechnet) berechnet

•• Dies geschieht mit der zweidimensionalenDies geschieht mit der zweidimensionalen FouriertransformationFouriertransformation

•• FFüür die Rr die Rüücktransformation descktransformation des FourierbildesFourierbildes in denin den OrtsraumOrtsraumverwendet man dieverwendet man die inverseinverse zweidimensionalezweidimensionale FouriertransformationFouriertransformation

Page 144: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

144

••

•• DerDer OrtsfrequenzbereichOrtsfrequenzbereich wird mit derwird mit der FouriertransformationFouriertransformationhergeleitethergeleitet

•• Bei einfachen Funktionen ist der Zusammenhang zwischen einemBei einfachen Funktionen ist der Zusammenhang zwischen einemSignal im Ortsbereich und imSignal im Ortsbereich und im OrtsfrequenzbereichOrtsfrequenzbereich aus Tabellen zuaus Tabellen zuentnehmenentnehmen

• Die zweidimensionale Fouriertransformation

� �∞

∞−

∞−

+−= dxdyeyxIffS yfxfjyx

yx )(2),(),( π

Page 145: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

145

••

� �∞

∞−

∞−

+= yxyfxfj

yx dfdfeffSyxI yx )(2),(),( π

• Die Rücktransformation geschieht mit der inversenzweidimensionalen Fouriertransformation

• Die komplexe Ortsfrequenzfunktion

),(),(),( yx ffjyxyx effSffS φ=

Page 146: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

146

••

mit

)}²,({)}²,({),( yxyxyx ffSffSffS ℑ+ℜ=

• Als Betrags- oder Amplitudenspektrum

Page 147: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

147

••

• Beim Quadrat des Amplitudenspektrums handelt es sich um dasPowerspektrum

²),(),( yxyx ffSffP =

• Das Phasenspektrum

���

���

ℜℑ

=)},({)},({

arctan),(yx

yxyx ffS

ffSffφ

Page 148: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

148

••

Darstellung von Bildern im Frequenzbereich•• Symbolische Darstellung fSymbolische Darstellung füür dier die FouriertransformationFouriertransformation

)},({),( yxIFffS yx =

)},({),( 1yx ffSFyxI −=

Page 149: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

149

••

• Beim Bild im Ortsbereich ist der Koordinatenursprung links oben

• Dies entspricht der Abtastrichtung eines Bildes (z.B.Fernsehkamera)

• S(fx,fy) ist das Spektrum eines Bildes

• fx und fy sind die Ortsfrequenzen• Die physikalische Dimension der Ortsfrequenzen ist Linien/mmoder Bildpunkte/mm• Bei der höchsten auf einem Trägermedium darstellbarenOrtsfrequenz handelt es sich um die Auflösung

Page 150: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

150

••

• Bei diskreten Bildsignalen handelt es sich um dieAbtastwerte einer kontinuierlichen Funktion

• Bei der Darstellung des zweidimensionalen Spektrums mussdas Abtasttheorem berücksichtigt werden:

fs = 2F

• fs ist die Abtastfrequenz• F ist die höchste Signalfrequenz oder Bandbreite• Bei gegebener fester Abtastfrequenz fs gilt:

2xs

xf

f =2

syy

ff =

Page 151: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

151

••

• fsx ist die Grenzfrequenz in x Richtung

• fsy ist die Grenzfrequenz in y Richtung

• Normierung der Ortsfrequenzen auf die Abtastfrequenzen fsxin x Richtung und fsy in y Richtung liefert:

5.0≤sy

y

ff

5.0≤fsxfx

Page 152: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

152

••

• Fourierbilder werden mit komplexen Funktionenbeschrieben

• Zur Darstellung verwendet man das Amplituden undPhasenbild

• Zur Beurteilung der Frequenzanteile reicht derAmplitudenanteil aus

• Der Phasenanteil beschreibt die relative Lage desObjekts zur Bildmitte

Page 153: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

153

••

• Herror ::fft_image(Hobject Image, Hobject* ImageFFT)

- Transformation von Image in den Frequenzbereich

- Anwendung der schnellen Fouriertransformation, um dasfouriertransformierte Bild zu ermitteln

- Die Bildgröße muss quadratisch sein

- Die Werte der Eigenschaften 'Width' and 'Height' müsseneine Potenz von 2 sein

Page 154: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

154

••

• Anwendung der schnellen Fouriertransformation auf ein Graubild,welches mit zoom_image_size auf die Größe 512x512 gebracht wurde

Ortsbild FouriertransformiertesBild

Page 155: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

155

••

Optimalfilter• Frequenzselektive Filter

• Tiefpaß- Durchlassen von niedrigen Frequenzen unterhalb einervorgegebenen Grenzfrequenz fx < fgx und fy < fgy

• Hochpaß- Durchlassen von hohen Frequenzen oberhalb einervorgegebenen Grenzfrequenz fx > fgx und fy > fgy

• Bandpaß- Durchlassen von Frequenzen, welche sich oberhalb einerunteren Grenzfrequenz befinden und unterhalb eineroberen Grenzfrequenz fx > fgxu und fx < fgxo sowie

fy > fgyu und fy < fgyo

• Entwicklung von optimalen Filtern erfolgt im Frequenzbereich

Page 156: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

156

••

Parameter zur Filterentwicklung• Filtergröße

- M Spalten und N Zeilen

• Filterform

-Rechteck- Die Größe des Rechtecks wird durch dieGrenzfrequenz fgx in x-Richtung und fgy in y-Richtung festgelegt

- Kreis- Die Grenzfrequenz fg legt den Radius des Kreises

um den Mittelpunkt fx =0 fy = 0 fest

Page 157: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

157

••

•Herror ::gen_bandfilter (Hobject *ImageFilter, const HTuple&MinFrequency, const HTuple &MaxFrequency, const HTuple &Size)

- Erzeugung eines Bandpassfilters 'ImageFilter'

- Es werden Frequenzen durchgelassen, die die Untergrenze'MinFrequency' nicht unterschreiten und die Obergrenze'MaxFrequency' nicht überschreiten

- Mit 'Size' wird die Größe von 'ImageFilter' festgelegt

- Die Größe des Filters muss der Größe des Frequenzbildesentsprechen, da beide Bilder miteinander multipliziertwerden

Page 158: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

158

••

• Bandpaßfilter der Größe 512x512

• Die untere Grenzfrequenz fgu beträgt 20 und die obereGrenzfrequenz fgo beträgt 60

Ortsbild Ortsfrequenzbild

Page 159: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

159

••

Faltung im Frequenzbereich• Die Faltung der Ortsfunktionen führt zu einer Multiplikation derOrtsfrequenzfunktionen

),(),(

ˆ),(),(),(**),(

21

2121

yxyx ffSffS

ddyxIIyxIyxI =−−= � �∞

∞−

∞−

ηξηξηξ

Legende:

hOrtsbereicimFaltungdentspricht2**

Page 160: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

160

••

• Herror ::convol_fft (Hobject ImageFFT, Hobject ImageFilter,Hobject *ImageConvol)

- Faltung von zwei Bildern im Frequenzbereich

- 'ImageFFT' ist die Fouriertransformierte

- Der Wert 0 bedeutet bei 'ImageFilter' vollständigeUnterdrückung der Frequenz und 255 keinerleiUnterdrückung

- Das Ergebnis der Faltung wird in 'ImageConvol'geliefert

Page 161: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

161

••

• Anwendung des Bandpaßfilters der Größe 512 auf dasfouriertransformierte Bild der FH

• Unterdrückung der Frequenzen im Bereich zwischen 20 und 60

Page 162: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

162

••

• Herror ::fft_image_inv (Hobject Image, Hobject *ImageFFTInv)

- Berechnung der Inversen ('ImageFFTInv') derFouriertransformierten ('Image')

- Rücktransformation vom Frequenzbereich in denOrtsbereich

- Alle Bilder müssen quadratisch sein

- 'Width' und 'Height' müssen eine Potenz von 2 sein

Page 163: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

163

••

• Darstellung des Ortsbildes zum gefilterten Ortsfrequenzbildder FH mit einem Bandpaßfilter

• Ortsbild wurde mit Hilfe der inversen Fouriertransformationgeneriert

Page 164: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

164

••

#include "HalconCpp.h"

class win

{HTuple Width, Height, WindowID;Hobject Im;char proceed;

public:win(Hobject Image, int standard = 0);

void change_image(Hobject Image);void display();void hold();void close();};

Page 165: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

165

••

win::win(Hobject Image, int standard = 0)

{Im = Image;

:

:

Page 166: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

166

••

class fourier

{protected:Hobject Image, Blau, ImageZoom, ImageFFT;

public:fourier(char file[]);void calculate();};

fourier::fourier(char file [])

{:

Page 167: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

167

••

:

:void fourier::calculate()

{::access_channel(Image,&Blau,HTuple(3));

:

}

Page 168: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

168

••

class bandfilter{protected:Hobject ImageFilter;

public:bandfilter();void calculate();

};

bandfilter::bandfilter(){

:}

Page 169: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

169

••

void bandfilter::calculate(){::gen_bandfilter(&ImageFilter,HTuple(20),HTuple(60),HTuple(512));}

class convolution : public fourier, bandfilter{protected:Hobject ImageConvol, ImageFFTInv;

public:convolution(char file []);void calculate();

};

Page 170: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

170

••convolution::convolution(char file []):fourier(file), bandfilter()

{:

}

void convolution::calculate(){::convol_fft(ImageFFT,ImageFilter,&ImageConvol);

:

:

}

Page 171: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

171

••

class segmentation

{private:

convolution* c;Hobject ImageFFTInv;Hobject Region, RegionFillUp;Hobject RegionErosion, RegionDilation, SelectedRegions;Hobject ConnectedRegions, bike;

public:segmentation(char file []);void go();~segmentation();

};

Page 172: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

172

••

segmentation::segmentation(char file []){c = new ... ;

:

}

void segmentation::go(){

Herror err = read_image(&ImageFFTInv,HTuple("ImageFFTInv"));if (err != H_MSG_TRUE)

{fprintf(stderr,"could not find image"); exit(1);

}

Page 173: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

173

••

::threshold(ImageFFTInv,&Region,HTuple(60),HTuple(120));::fill_up_shape(Region,&RegionFillUp,HTuple("area"),HTuple(1),HTuple(1000));

::erosion_circle(RegionFillUp,&RegionErosion,HTuple(9.5));::dilation_circle(RegionErosion,&RegionDilation,HTuple(12.5));

::connection(RegionDilation,&ConnectedRegions);::select_shape(ConnectedRegions,&SelectedRegions,HTuple("height"),HTuple("and"),HTuple(50),HTuple(80));

::select_shape(SelectedRegions,&bike,HTuple("width"),HTuple("and"),HTuple(40),HTuple(60));

Page 174: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

174

••

win w(bike,1);w.display();w.hold();w.close();

}

segmentation::~segmentation(){......

}

int main(int argc, char *argv[]){segmentation s(argv[1]);return 0;

}

Page 175: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

175

••

• Herror ::gen_gabor (Hobject *ImageFilter, const HTuple &Angle,const HTuple &Frequency, const HTuple &Bandwidth, const HTuple&Orientation, const HTuple &Size)

- Bereitstellung eines Gabor-Filters ('ImageFilter')

- Mit 'Frequency' werden die durchzulassenden Frequenzenangegeben

- Es handelt sich hierbei um die untere Grenzfrequenz desBandpaßfilters

- Je größer der Wert von 'Frequency', umso höhereFrequenzen werden durchgelassen

- Mit 'Orientation' wird ebenso wie mit 'Frequency' dasFilterzentrum festgelegt

- Ein Wert von 0 für 'Orientation' erzeugt einen Filter,mit einer horizontal orientierten Mondsichel

Page 176: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

176

••

- Die beiden Endpunkte der Mondsichel liegen also aufeiner horizontalen Linie, wobei die Sichel nach oben hingewölbt ist

- Diese Mondsichel wird durch Angabe von größeren Wertenfür 'Orientation' gegen den Uhrzeigersinn um dasBildzentrum rotiert

- Typischer Wertebereich: 0.0 ≤ 'Orientation' ≤ 3.1416

- Somit wird mit 'Orientation' bestimmt, welcheFrequenzanteile durchgelassen werden sollen, die derspezifizierten Richtung entsprechen

- 0.0 und 3.1416 lassen vertikale Frequenzanteile durch

- Mit dem Wert 1.6 werden dagegen nur die horizontalenFrequenzanteile durchgelassen

- Mit 'Angle' wird die Ausdehnung der Mondsichelfestgelegt

Page 177: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

177

••

- Je größer 'Angle' ist, umso mehr wird die Mondsichelsymmetrisch in Richtung ihres Zentrums zusammengeschoben

- Durch hohe Werte für 'Angle' können horizontaleFrequenzanteile herausgefiltert werden

- Mit 'Bandwith' wird die Breite der Mondsichel festgelegt- Niedrige Werte für 'Bandwith' bewirken eine schmaleMondsichel

- Eine schmale Mondsichel hat zur Folge, dass auch derFrequenzbereich der durchzulassenden Frequenzen niedrigist

- Hohe Werte für 'Bandwith' haben ein großes Frequenzbandzur Folge

- 'Size' legt die Größe von 'ImageFilter' fest

Page 178: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

178

••

• Gaborfilter der Größe 512

• Verwendung folgender Parameter:

- Angle: 1.2- Frequency: 0.4- Bandwith: 20- Orientation: 0.4

Page 179: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

179

••

• Fouriertransformiertes Bild des Gaborfilters

Page 180: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

180

••

• Herror ::convol_gabor (Hobject ImageFFT, Hobject GaborFilter,Hobject *ImageResultGabor, Hobject ImageResultHilbert)

- Faltung eines fouriertransformierten Bildes ('ImageFFT')mit einem Gaborfilter ('GaborFilter')

- Das Ergebnis der Gaborfilterung wird in'ImageResultGabor' geliefert

- Weiter kann auch eine Hilbertfilterung durchgeführtwerden

- In diesem Fall wird das Ergebnis in 'ImageResultHilbert'geliefert

Page 181: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

181

••

• Faltung des fouriertransformierten Bildes der FH mit demGaborfilter

• Es zeigt sich die richtungsfilternde Wirkung des Gaborfilters

• Hier wurden die horizontalen Frequenzanteile herausgefiltert

Page 182: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

182

••

• Herror ::dyn_threshold (Hobject OrigImage, HobjectThresholdImage, Hobject *RegionDynThresh, const HTuple &Offset,const HTuple &LightDark)

- Auswahl derjenigen Pixel, die einer Schwellwertbedingunggenügen:

OrigImage ≥ ThresholdImage + Offset

- Ein Pixel aus 'OrigImage' wird in 'RegionDynThresh'aufgenommen, sofern der Grauwert des entsprechendenPixel von 'ThresholdImage' erhöht um einen 'Offset'größer ist als der Grauwert des Pixels in 'OrigImage'

- Dies gilt, sofern die Option 'LightDark' auf 'light'eingestellt wird

Page 183: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

183

••

- Die folgende Ungleichung gilt bei LightDark = dark

OrigImage ≤ ThresholdImage – Offset

- 'LightDark' kann auch auf 'equal' gesetzt werden:

ThresholdImage-Offset ≤ OrigImage ≤ ThresholdImage+Offset

- Schließlich noch die Ungleichung für LightDark =not_equal:

- ThresholdImage-Offset > OrigImage

- In der Regel wird für ThresholdImage ein geglättetesBild von OrigImage verwendet

- Dies kann beispielsweise durch eine Mittelwertfilterungherbeigeführt werden

- Dadurch wird ein ähnlicher Effekt erreicht, als wenn einSchwellwertoperator auf ein hochpaßgefiltertes Bildangewendet wird

Page 184: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

184

••

- Wenn 'Offset' sehr klein gewählt wird, werden vielekleine Regionen gefunden

- Wird 'Offset' sehr groß gewählt, kann eventuellüberhaupt kein Pixel in die Lösung aufgenommen werden

Page 185: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

185

••

#include "HalconCpp.h"

class win

{HTuple Width, Height, WindowID;Hobject Im;char proceed;

public:win(Hobject Image, int standard = 0);

void change_image(Hobject Image);void display();void hold();void close();

:

:

Page 186: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

186

••

class fourier

{protected:Hobject Image, Blau, ImageZoom, ImageFFT;

public:fourier(char file[]);void calculate();};

Page 187: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

187

••

fourier::fourier(char file [])

{Herror err = read_image(&Image, HTuple(file));

:

}

Page 188: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

188

••

void fourier::calculate()

{::access_channel(Image,&Blau,HTuple(3));

:

}

Page 189: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

189

••

class gabor

{protected:Hobject Filter;

public:gabor();void calculate();

};

gabor::gabor()

{:

}

Page 190: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

190

••

void gabor::calculate()

{::gen_gabor(&Filter,HTuple(1.2),HTuple(0.4),HTuple(20),HTuple(0.4),HTuple(512));}

class convolution : public fourier, gabor

{protected:Hobject Hilbert, Gabor, GaborInv;

public:convolution(char file []);void calculate();

};

Page 191: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

191

••

class segmentation

{private:

convolution* c;Hobject GaborInv, ImageZoom;Hobject RegionDynThresh, RegionFillUp;Hobject RegionErosion, RegionDilation, SelectedRegions;Hobject ConnectedRegions, bike;

public:segmentation(char file []);void go();~segmentation();

};

Page 192: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

192

••

:

:

void segmentation::go(){

Herror err = read_image(&GaborInv, HTuple("GaborInv"));if (err != H_MSG_TRUE)

{fprintf(stderr,"could not find image"); exit(1);

}

err = read_image(&ImageZoom, HTuple("ImageZoom"));

Page 193: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

193

••

if (err != H_MSG_TRUE){fprintf(stderr,"could not find image"); exit(1);

}

::dyn_threshold(ImageZoom,GaborInv,&RegionDynThresh,HTuple(1),HTuple("dark"));::fill_up_shape(RegionDynThresh,&RegionFillUp,HTuple("area"),HTuple(1),HTuple(1000));::erosion_circle(RegionFillUp,&RegionErosion,HTuple(0.5));::dilation_circle(RegionErosion,&RegionDilation,HTuple(17));::connection(RegionDilation,&ConnectedRegions);::select_shape(ConnectedRegions,&SelectedRegions,HTuple("width"),HTuple("and"),HTuple(40),HTuple(50));::select_shape(SelectedRegions,&bike,HTuple("height"),HTuple("and"),HTuple(55),HTuple(66));

Page 194: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

194

••

win w(bike,1);w.display();w.hold();w.close();

}

segmentation::~segmentation(){

...

}

int main(int argc, char *argv[]){segmentation s(argv[1]);return 0;

}

Page 195: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

195

••

• Herror ::highpass_image (Hobject Image, Hobject *Highpass,const HTuple &Width, const HTuple &Height)

- Hochpassfilterung von 'Image' mit der Matrix (hier fürdie Größe 7x5):

111111111111111113511111111111111111

Page 196: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

196

••

- Auswahl von hochfrequenten Anteilen

- Mit zunehmender Größe der Matrix steigt derdurchzulassende Frequenzbereich in Richtung niedrigererFrequenz

- Größe der Filtermatrix wird mit 'Width' und 'Height'gesteuert

- Lieferung des gefilterten Bildes in 'Highpass'

Page 197: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

197

••

Ortsbild Ortsfrequenzbild

• Hochpassgefiltertes Bild des vorgestellten Blaukanals

• Größe der Filtermaske 3x3

Page 198: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

198

••

- Dadurch wird ein ähnlicher Effekt erreicht, als wenn einSchwellwertoperator auf ein hochpaßgefiltertes Bildangewendet wird

- Wenn 'Offset' sehr klein gewählt wird, werden vielekleine Regionen gefunden

- Wird 'Offset' sehr groß gewählt, kann eventuellüberhaupt kein Pixel in die Lösung aufgenommen werden

• Herror ::count_obj (Hobject Objects, long* Number)

- Übergabe einer Menge von Objekten im Array 'Objects'

- Anzahl der Objekte im Array wird ermittelt und mit'Number' geliefert

Page 199: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

199

••

• Herror ::count_obj (Hobject Objects, long* Number)

- Übergabe einer Menge von Objekten im Array 'Objects'

- Anzahl der Objekte im Array wird ermittelt und mit'Number' geliefert

Page 200: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

200

••

#include "HalconCpp.h"

class win

{HTuple Width, Height, WindowID;Hobject Im;char proceed;

public:win(Hobject Image, int standard = 0);

void change_image(Hobject Image);void display();void hold();void close();

:

:

Page 201: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

201

••

class highpass

{protected:Hobject Image, Blau, Highpass;

public:highpass(char file[]);void calculate();

};

Page 202: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

202

••

highpass::highpass(char file[])

{Herror err = read_image(&Image,HTuple(file));

:

:

}

Page 203: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

203

••

void highpass::calculate()

{::access_channel(Image,&Blau,HTuple(3));

:

:

}

Page 204: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

204

••

class segmentation

{private:

highpass* h;Hobject Highpass, Blau;Hobject RegionDynThresh, RegionFillUp;Hobject RegionErosion, RegionDilation, SelectedRegions;Hobject ConnectedRegions, blind_alley;HTuple Number;

public:segmentation(char file []);void go();~segmentation();

};

Page 205: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

205

••

segmentation::segmentation(char file []){h = new …

}

void segmentation::go(){

Herror err = read_image(&Highpass, HTuple("Highpass"));if (err != H_MSG_TRUE)

{fprintf(stderr,"could not find image"); exit(1);

}

Page 206: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

206

••

err = read_image(&Blau, HTuple("Blau"));if (err != H_MSG_TRUE){fprintf(stderr,"could not find image"); exit(1);

}

::dyn_threshold(Blau,Highpass,&RegionDynThresh,HTuple(1),HTuple("light"));::fill_up_shape(RegionDynThresh,&RegionFillUp,HTuple("area"),HTuple(1),HTuple(100));::erosion_circle(RegionFillUp,&RegionErosion,HTuple(1.5));::dilation_circle(RegionErosion,&RegionDilation,HTuple(4.5));::connection(RegionDilation,&ConnectedRegions);::select_shape(ConnectedRegions,&SelectedRegions,HTuple("height"),HTuple("and"),HTuple(15),HTuple(40));::select_shape(SelectedRegions,&blind_alley,HTuple("width"),HTuple("and"),HTuple(10),HTuple(20));::count_obj(blind_alley,&Number);

Page 207: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

207

••

win w(Blau,1);w.display();w.hold();w.change_image(blind_alley);w.display();w.hold();w.close();

cout<<"Number of blind alley signs: "<<Number<<"\n";}

segmentation::~segmentation()

{:

}

Page 208: Bildverarbeitung mit C++ - in.tum.de+.WS03/Folien_BV.pdf · 5 • • Grafikfenster - Anzeigen von Bildern - Anzeigen von Ergebnissen, die durch Anwendung von Bildverarbeitungsoperatoren

208

••

int main(int argc, char *argv[]){segmentation s(argv[1]);return 0;

}