→ Slide 1
Einführung in die Computergrafik und Bildverarbeitung
Dr. Raphael Wimmer
Sommersemester 2025
→ Slide 2
→ Slide 3
Konzept
Anstelle einer klassischen Vorlesung mit Übung gibt es:
einen interaktiven Präsenztermin (Di, 12:15 - 15:45 Uhr)
eine Sammlung an Lehrmaterial
einen Abhängigkeitsgraph, der zeigt, welche Themen man in welcher Reihenfolge lernen sollte
vier Milestones/Studienleistungen (2D-Bitmapgrafik, 2D-Vektorgrafik, 3D-Grafik, Computer Vision), zu denen Sie eine kleine Übungsaufgabe bearbeiten müssen/sollten.
eine Klausur (Präsenz), in der Sie am Rechner mehrere Programmieraufgaben bearbeiten
→ Slide 4
Organisatorisches
Anfangs gibt es einige Präsenz-Termine, in denen wir die Grundlagen frontal-interaktiv besprechen
Dann kriegen Sie eine Art Lernlandkarte / Abhängigkeitsgraph / Mindmap der Themen des Kurses inkl. Material und Aufgaben. Ca. 70% der Themen sind Kerninhalte. Diese können Sie in ihrer eigenen Geschwindigkeit bearbeiten. Aus den restlichen Themen wählen Sie dann diejenigen, die Sie am meisten interessieren und vertiefen diese.
Als Programmiersprache werden wir Python verwenden (zusätzlich: Jupyter Notebooks, OpenGL, GLSL, OpenCV).
Während der Präsenztermine schauen wir uns gemeinsam wichtige Themen und Anwendungen an. Das wird dann eher eine interaktive Übung als eine klassische Vorlesung (“Flipped Classroom”). Außerdem nutzen wir den Termin als Ort für Pair-Programming, Sprechstunde für Probleme, und um Feedback zu geben.
→ Slide 5
Leistungsnachweis
Es gibt einige Milestones zu festen Terminen im Semester, die sie einhalten sollten. Da müssen Sie dann jeweils eine kleine Studienleistung abgeben. Je früher Sie abgeben, und je besser Ihre Lösung, umso mehr Bonuspunkte für die Klausur erhalten Sie.
Am Ende des Semesters findet eine Klausur in Präsenz statt. Sie bearbeiten dort primär Programmieraufgaben zu Themen des Kurses. Dabei können Sie natürlich auf allen Code zurückgreifen, den Sie im Laufe des Kurses schon geschrieben haben. Außerdem kommen noch ein paar Theoriefragen dazu. Das Format “Klausur” ist in der Prüfungsordnung vorgegeben. Es dient in diesem Fall auch dazu, sicherzustellen, dass Sie selbst die ganzen Aufgaben während des Semesters bearbeitet haben. Die Klausur wird am Rechner stattfinden, nicht auf Papier. Für die Klausur gibt es 100 Punkte. Eine Notenstufe entspricht 5 Punkten, d.h. ab 50 Punkten bekommen Sie eine 4.0.
Bonuspunkte gibt es für:
Abgeben der Studienleistungen (max. 20 Punkte insgesamt)
Bug Bounty: pro sachlichem Fehler in meinen Materialien 1 Punkt (FCFS)
Teilen von guten Quellen (je 1 Punkt, max. 5 Punkte insgesamt)
→ Slide 6
Materialien
Sie erhalten von mir:
nicht: komplette Foliensätze für jeden Termin, aber:
Überblicksdokumente
einen interaktiven Abhängigkeitsgraphen der Inhalte der Vorlesung
Links und Tipps zu Material
Foliensätze zu bestimmten Themen
Screenshots / Fotos von wichtigen Zeichnungen
→ Slide 7
Feedback der letzten beiden Male
Aufwendiger Kurs, aber sehr praktisch weswegen es auch Spaß macht und die Zeit die man dafür aufwendet auch schnell verfliegt.
Interessante Vorlesung, die mir neue Themen und Anwendungsmöglichkeiten beigebracht hat. Die Einführungen in die OpenGL und OpenCV waren spannend und mir davor nur vom hören bekannt. Die Studienleistungen ließen sich auch gut bearbeiten. Waren am Anfang etwas überfordernd (da es bei mir kaum/kein Vorwissen gab), aber ließen sich meistens doch ganz gut durcharbeiten.
Sehr interessante Vorlesung, die viel praktisches Wissen mit sich bringt
Sehr interessant, aber man muss am Ball bleiben
Die Studienleistungen waren sehr interessant und anspruchsvoll, haben aber auch Spaß gemacht. Hab mir teilweise etwas schwer getan, auch weil mir die Erfahrung mit Python gefehlt hat. [...] Ansonsten sehr interessante und coole Veranstaltung, bei der man auch viel selber herumprobieren durfte (v.a. bei Studienleistungen) und gut erklärte Beispiele bekommen hat.
→ Slide 8
Zeitplan
↓ Slide 9
29. April 2025 - Einführung, Überblick
Klassische frontale Vorlesung zum Einstieg.
Themen heute:
Danach eine Übung mit:
↓ Slide 10
Ausblick: 6. Mai 2025 - Wiederholung Grundlagen, Praxis Rastergrafik
Grundlagen Farbräume, Rastergrafik
Welche Python-IDE soll ich verwenden?
apt, pip, conda, virtualeenv, docker - Environments und Paketmanager für Python
Bilder laden und modifizieren
→ Slide 11
Wichtige Veranstaltungen diese Woche
→ Slide 12
Advance Organizer
(kommt noch)
→ Slide 13
Einführung Python
Material:
↓ Slide 14
Voraussetzungen für Teilnahme am nächsten Termin
Lauffähige lokale Python-Installation und IDE
(optional) lokale JupyterLab-Installation
Alle Notebooks in GRIPS bearbeitet
Feedback vorbereitet: wo gibt es Probleme, welche Hilfestellung wäre gut?
Laptop dabei, um einige der gezeigten Dinge mal selbst auszuprobieren
→ Slide 15
↓ Slide 16
→ Slide 17
Überblick: 6. Mai 2025 - Wiederholung Grundlagen, Praxis Rastergrafik
GraphIT
Umgebungsvariablen und Pfade
Welche Python-IDE soll ich verwenden?
apt, pip, conda, virtualeenv (, docker) - Environments und Paketmanager für Python
uv - die eierlegende Wollmilchsau
Grundlagen Farbräume, Farbmodelle, Rastergrafik (Notebooks)
Bilder laden und modifizieren (Notebooks)
↓ Slide 18
→ Slide 19
PATH
Umgebungsvariablen: Key-Value-Paare, die vom
OS innerhalb einer Shell den Programmen zur Verfügung gestellt werden.
Anzeigen/setzen mit export
(Linux) bzw. SET
(Windows)
PATH-Umgebungsvariable: wo liegen die ausführbaren Dateien
Reihenfolge relevant - das erstbeste Executable mit passendem Namen wird genommen.
(auch später relevant: PYTHONPATH
)
→ Slide 20
→ Slide 21
PEP 8 - Style Guide für Python
PEP: Python Enhancement Proposal - ein Vorschlag, wie die Sprache weiterentwickelt werden soll
-
pycodestyle
: Kommandozeilentool, das Code auf PEP-8-Konformität prüft
Hier im Kurs: PEP-8-Regeln bitte einhalten (zwingend für Studienleistung), bis auf Regel zu max. Zeilenlänge
-
→ Slide 22
Paketmanagement in Python
Es gibt drei verbreitete Möglichkeiten, Python-Module zu installieren:
Paketmanagement des Betriebssystems (z.B. apt
unter Debian/Ubuntu Linux)
pip
- Pythons Paketmanager
conda
- Paketmanagement der Anaconda-Distribution
Um für jede Anwendung separate Module zu installieren: virtual environments
↓ Slide 23
Paketmanagement durch Betriebssystem
Primär bei Linux-Distributionen, z.B. Debian/Ubuntu
apt install python3-matplotlib
Vorteile: global verfügbar, sicher, vorkompilierte Binaries
Nachteile: nicht immer aktuell, nicht alle Python-Pakete verfügbar, immer nur eine Paketversion installierbar
↓ Slide 24
Paketmanagement mit pip
Pakete werden aus dem Python Package Index (PyPI) installiert (PyPI enthält quasi alle Pakete)
pip3 install matplotlib
pip3 install -r requirements.txt
: Textdatei mit Paketnamen und ggf. Versionen.
Vorteile: global oder (default) lokal installierbar, immer aktuellste Version, quasi alle Pakete verfügbar.
Nachteile: nicht zwingend robust/sicher, Kompilierungsschritt bei C-Erweiterungen notwendig
Tool
pipx
: installiert Python-
Programme in einer eigenen virtuellen Umgebung und fügt sie zum Pfad hinzu (
Repo / Anleitung)
↓ Slide 25
Paketmanagement mit conda
Anaconda: Python-Distribution für Scientific Computing (multi-platform)
-
conda
: package manager für Anaconda (
Intro)
pip und conda können parallel eingesetzt werden (
1,
2)
-
Vorteile: sicher, robust, vorkompilierte Binaries, integrierte Unterstützung von virtual environments
Nachteile: nicht immer aktuell, wenige Python-Pakete verfügbar, fügt Overhead (Ressourcen, Debugging) hinzu
↓ Slide 26
Virtual Environments
Grundidee: für jedes Projekt eine eigene Python-Installation (
Doku)
Funktionsweise: Überschreiben der Pfade zu Binaries, Bibliotheken in der aktuellen Shell
Virtualenv im Unterverzeichnis .env
anlegen: python3 -m venv .env
Virtualenv aktivieren: source .env/bin/activate
(Linux) / .env\Scripts\activate.bat
deaktivieren durch Beenden der Shell
-
Conda: conda create --name myenv
/ conda activate myenv
↓ Slide 27
uv - die eierlegende Wollmilchsau
→ Slide 28
13. Mai 2025 - Bildfilter, Studienleistung 1
Recap: Bildfilter, Bilder (live)
Rückblick: Bildfilter, Punktoperatoren, Morphologische Operationen, Faltungen (siehe Notebooks)
Python: mit Kommandozeilenparametern arbeiten
Studienleistung 1: ein simpler Bildeditor
↓ Slide 29
↓ Slide 30
Wiederholung: Bildfilter
Überblick: Typische Bildfilter
Überblick: Punktoperatoren, Geometrische Operatoren, Lokale Operatoren, Globale Operatoren
Faltungen
→ Slide 31
Studienleistung 1: Bitmap-Grafik (1)
Entwickeln Sie eine Anwendung filtertool, mit der man (destruktiv) Bilder bearbeiten kann.
Bilder liegen als RGB- oder Graustufenbild vor und können mit Pillow eingelesen und geschrieben werden.
Ansonsten sollen alle Bildoperationen selbst geschrieben werden.
Abgabe: Mi, 28. Mai 2025, 23:59 Uhr (5 Bonuspunkte - pro angefangener weiterer Woche 1 Punkt weniger)
→ Slide 32
Studienleistung 1: Bitmap-Grafik (2)
Verpflichtende Features:
Batch-Kommandozeilenbetrieb (python3 filtertool.py --threshold 90 --blur 3 --edges image.jpg
oder python3 filtertool.py --blend screen --opacity 50 image1.jpg image2.jpg
)
sinnvolle grafische Anzeige des Ergebnisses mit tkinter
Standardfilter (selbst implementiert)
Threshold
Brightness / Contrast
Blur / Sharpen
Blending von zwei Bildern mit min. zwei verschiedenen Blend-Modi
→ Slide 33
Studienleistung 1: Bitmap-Grafik (3)
Wahlpflichtfeatures (3 Features):
→ Slide 34
Studienleistung 1: Bitmap-Grafik (4)
bei Verwendung fremder Code-Beispiele: Quellenangabe im Quelltext
bei Verwendung von ChatGPT o.ä: formlose Angabe im Quelltext (Vorsicht: ChatGPT liefert manchmal subtil falsche Lösungen!)
keine weiteren (Grafik) Bibliotheken verwenden (Ausnahmen: PILs Image.point()
und Image.convert()
dürfen verwendet werden).
Abgabe von Quellcode und kurzer Video-Demo (ca. 1 Minute) über GRIPS
→ Slide 35
Aufgaben bis zum nächsten Mal
Registriert Euch in GraphIT
Markiert mindestens zehn Themen im Kurs, die Euch interessieren
Markiert mindestens zehn Themen im Kurs, die Ihr schon kennt
Bearbeitet die Notebooks des heutigen Termins fertig
Schaut die beiden Videos zu Pionieren der Computergrafik an
→ Slide 36
20. Mai 2025 - Image Filters, Tk-GUIs
↓ Slide 37
↓ Slide 38
Kommandozeilenparameter parsen
python3 app.py --mode simple -a file.txt
Mehrere Möglichkeiten in Python:
↓ Slide 39
Posterize
Ziel: Helligkeitswerte auf n unterschiedliche Helligkeitswerte runden.
Möglichkeiten: runden auf bestimmte Werte, Look-Up-Tables (LUTs)
-
-
↓ Slide 40
→ Slide 41
3. Juni 2025 - Fragen zur Studienleistung 1, Vektorgrafik
Studienleistung 1: Status, Feedback
Grundlagen Vektorgrafik
Beispiel Vektorgrafik in Python: rotating clock
Exkurs: Computational Geometry
Studienleistung 2: Vektorgrafik
↓ Slide 42
Aufgaben bis zum nächsten Mal
→ Slide 43
Studienleistung 2: Vektor-Grafik
↓ Slide 44
Aufgabenstellung
Entwickeln Sie eine Zeichenanwendung mini-draw, mit der man Vektorgrafiken erstellen und bearbeiten kann. Die Funktionsweise soll gängigen Vektorgrafikprogrammen wie z.B. Inkscape ähneln. Die Anwendung soll einen tkinter.Canvas verwenden, in dem über die create_rect()-Methode einzelne Pixel gesetzt werden. Alle weiteren Zeichenoperationen sollen auf dieser Basis implementiert werden.
Abgabe: Mi, 25.6. 2025 (5 Bonuspunkte - pro angefangener weiterer Woche 1 Punkt weniger)
↓ Slide 45
Verpflichtende Features
(Wenn nichts vorgegeben ist, einfach eine sinnvolle Lösung wählen)
Zeichnen von geraden Linien mit der linken Maustaste
Mittels der Taste 'b': Umwandeln von ausgewählten Linien in Bezier-Kurven, bei denen in der Mitte ein Kontrollpunkt gezeichnet wird, der gezogen werden kann
Alle End-/Eck-/Kontrollpunkte sollen als kleine Rechtecke (z.B. 5×5 px) dargestellt werden und mit der Maus verschoben werden können
Mittels der Taste 'x' kann man die End-/Eck-/Kontrollpunkte ein-/ausblenden
Mittels der Taste 'c' kann man den Canvas leeren
Mit der mittleren Maustaste oder “shift” und linker Maustaste kann der gesamte Canvas verschoben werden
↓ Slide 46
Wahlpflichtfeatures (3 Features)
Zoomen mit dem Scrollrad (Liniendicke darf konstant bleiben)
Zeichnen mit Farben (Auswahldialog von tkinter verwenden)
Füllen mit Mustern / Schraffuren
Speichern und Laden der Grafik
Zeichnen von Rechtecken oder Kreisen
effizientes Neuzeichnen des Bildschirms nur dort, wo sich etwas verändert hat
Antialiasing der Linien
(eigenes Feature vorschlagen)
→ Slide 47
17. Juni 2025 - Vektorgrafik 2
↓ Slide 48
Themen heute
Signed Distance Functions
Interaktives Zeichnen im Jupyter Notebook
Computational Geometry am Beispiel Shoelace Algorithm
Besprechung SL 1 / SL 2
↓ Slide 49
Signed Distance Functions
(algorithmische) Funktion, die ein 2D-/3D-Objekt beschreibt
Gibt für einen Punkt/Pixel p
die Distanz zur Objektkante zurück:
< 0, wenn er im Objekt liegt
0, wenn er auf der Kante des Objekts liegt
> 0, wenn er außerhalb des Objekts liegt
-
Beispiel Kreis: circle(point, radius) → distancetoorigin(point) - radius
Kombination von individuellen SDFs über Boolsche Operationen:
Union: min(sdf1, sdf2)
Intersection: max(sdf1, sdf2)
Difference: max(sdf1, -sdf2)
siehe Jupyter Notebook in GRIPS
↓ Slide 50
Computational Geometry
Computational Geometry: Forschungsfeld, das sich mit Algorithmen für geometrische Probleme beschäftigt, z.B.
Fläche, Umfang, Schwerpunkt eines Polygons berechnen (→ Shoelace Formula)
Boolsche Operationen auf Polygone
Überlappungen von Polygonen (→ GJK)
Ähnlichkeit von Polygonen berechnen (→ Hausdorff-Distanz)
↓ Slide 51
Übung: Bibliotheken für Computational Geometry (entfällt)
Eure Aufgabe: wählt eine der drei Python-Bibliotheken und erstellt ein Jupyter Notebook, das folgende Features demonstriert:
Python-Bibliotheken: sympy.geometry, scikit.geometry, shapely
Dreieck, Kreis und Linie definieren. Linie geht quer durch das Dreieck, ein Endpunkt ist im Kreis
Herausfinden, ob die Linie in Kreis oder Dreieck ist, bzw. diese schneidet.
Hausdorff-Distanz zwischen Linie und Dreieck berechnen
Fünf Punkte definieren und deren konvexe Hülle und Schwerpunkt/Centroid ermitteln
-
→ Slide 52
24. Juni 2025 - Einführung 3D-Grafik, Szenengraphen
↓ Slide 53
↓ Slide 54
Rückblick Grundlagen 3D-Grafik
↓ Slide 55
→ Slide 56
1. Juli 2025 - OpenGL, GLSL, ShaderToy
↓ Slide 57
↓ Slide 58
OpenGL
Offener, erweiterbarer Standard für 3D-Zeichen-
API
Standardisiert durch Khronos Group
Alternativen / Konkurrenz: DirectX (nur Windows), Metal (nur macos)
OpenGL 1.0 (1992): Immediate Mode
API
OpenGL 2.0 (2004): Shaders
OpenGL 3, 4 (ab 2008): Deprecation des Immediate Mode, Implementierung als Shader
Nachfolger: Vulkan (seit 2016, viel Hardware-näher als OpenGL)
Spin-Offs / Dialekte: WebGL (im Browser), EGL/GL ES (mobile Geräte)
Toolkits: GLU, GLUT/FreeGLUT, GLFW (Helferfunktionen)
Einbettung in viele Grafikframeworks (u.a. SDL, Qt, Tkinter) möglich
↓ Slide 59
Immediate Mode: Anwendung ist Eigentümer der Szene und ruft für jedes Frame Zeichenoperationen über
API auf
Retained Mode: Anwendung übergibt zu zeichnende Objekte und ggf. Verhalten an Grafikframework – dieses rendert dann eigenständig die Szene.
Vorteil Immediate Mode: Einfach zu verstehen
Vorteil Retained Mode: Deutlich bessere Performance
↓ Slide 60
OpenGL Basics
Matrixmultiplikation zur Transformation von Modell-/Kamerakoordinaten und für Projektion 3D → 2D
OpenGL 1/2: Immediate Mode Rendering, Vertices entweder in CPU- oder GPU-Speicher (DisplayLists, VBO), globaler Matrix-“Stack“
OpenGL 3/4: Rendering über Shader (Programme, die parallel in der GPU ausgeführt werden):
Vertex Shader: transformiert Vertices (Meshes, Kamera-Transformation, Projektion)
Fragment Shader: modifiziert Pixel-Werte (Farbe, Textur, Beleuchtung, Effekte)
C-ähnliche Programmiersprache: GL Shader Language (GLSL)
↓ Slide 61
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0)
glLoadIdentity()
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
glScalef(1.0, 2.0, 1.0)
glRotatef(45, 0, 1, 0)
glBegin(GL_QUADS)
glVertex3f(0.0, 0.0, 0.0)
glVertex3f(0.0, 1.0, 0.0)
glVertex3f(0.0, 1.0, 1.0)
glVertex3f(0.0, 0.0, 1.0)
glEnd()
glFlush()
↓ Slide 62
Hands-On: OpenGL zum Laufen bringen
→ Jupyter-Notebook simple_cube_immediate_mode.ipynb
↓ Slide 63
Recap: Signed Distance Functions
allgemeine Idee: finde eine Funktion, die eine geometrische Form definiert
Parameter: Koordinaten eines Punktes p (x- und y-Wert bei 2D)
Rückgabewert: 0, wenn Punkt auf Form, < 0 wenn innerhalb der Form > 0 wenn außerhalb
Beispiel Kreis an Position q mit Radius r:
f(p) => length(p-q) - r
Tolle Eigenschaften:
-
↓ Slide 64
↓ Slide 65
ShaderToy
-
WebGL-Anwendung zum Experimentieren mit GLSL-Shadern
-
Einstiegspunkt void mainImage( out vec4 fragColor, in vec2 fragCoord )
(= fragment shader)
Mausposition, Tastatur, Zeit, weitere Buffer/Bilder als weitere (globale) Parameter (
Beispiel: Tastatur)
Webcam-Bild als Eingabe möglich
Vertex-Shader nur indirekt unterstützt
-
-
-
↓ Slide 66
Fragment Shaders
werden einmal pro Pixel im Bild aufgerufen, geben Farbwert zurück
Eingabeparameter: Bildposition (vec2 fragCoord
)
Ausgabewert: Pixelfarbe (vec4 fragColor
, RGBA)
-
-
↓ Slide 67
Vertex Shaders
werden einmal pro Vertex aufgerufen
Eingabeparameter: Vertex-Koordinaten (vec3
)
Ausgabewert: Vertex-Koordinaten, indem globale Variable glPosition
gesetzt wird.
nicht direkt von ShaderToy unterstützt
-
↓ Slide 68
↓ Slide 69
Eure Aufgaben
Öffnet ein ShaderToy-Beispiel
Recherchiert in der GLSL-Dokumentation (s.o.), was die Keywords bedeuten
Modifiziert den Code, um zu verstehen, was er macht
Fügt Interaktion und/oder Animation hinzu.
↓ Slide 70
Beispiele Shading in GLSL
↓ Slide 71
↓ Slide 72
→ Slide 73
Studienleistung 3: 3D-Grafik
↓ Slide 74
Regeln
bei Verwendung fremder Code-Beispiele oder von LLM-Output: Quellenangabe im Text
als Framework PyOpenGL, glfw, glumpy, pyglet oder moderngl verwenden
Abgabe von Quellcode und kurzer Video-Demo (ca. 1 Minute) über GRIPS bis Dienstag, 30. Juli 2025, 23:59 Uhr um die volle Punktzahl zu erhalten
↓ Slide 75
Aufgabe 3a: 3D-Welt
Entwickeln Sie eine Anwendung, die eine 3D-Welt basierend auf Meshes darstellt. Sie können zur Implementierung den OpenGL Immediate Mode oder das DemoTool verwenden.
Verpflichtende Features
Anzeigen einer simplen 3D-Szene mit mindestens drei unterschiedlichen Objekten
Bewegen in der Szene mit Maus und Tastatur
Objekte haben unterschiedliche Farben
Wahlpflichtfeatures (3 Features)
Animation (z.B. Rotation) mindestens eines Objekts (abschaltbar)
Selektion von Objekten mit der Maus möglich (dann z.B. Farbänderung, Animation) (→ raycasting)
Laden von Modellen mittels externer Bibliothek, etc.
spezielle Effekte (Nebel, etc.)
zuschaltbarer Bildfilter (fragment shader), z.B. Weichzeichner
↓ Slide 76
Aufgabe 3b: WebGL / ShaderToy
Entwickeln Sie einen Shader in ShaderToy, der eine hübsche Animation erzeugt
Verpflichtende Features:
Wahlpflichtfeatures: keine
↓ Slide 77
Aufgabe 3c: Raytracer (entfällt)
→ Slide 78
Computer Vision 1: Grundlagen, OpenCV
↓ Slide 79
Überblick
Siehe separaten Foliensatz und Notebooks in GRIPS
→ Slide 80
Wrap-Up, Klausur, SL 4
↓ Slide 81
↓ Slide 82
Zusammenfassung CGBV
(interaktiv)
↓ Slide 83
Klausur
Dienstag, 5. August 2025, 12 - 14 Uhr (60 Minuten)
Raum: TechBase, VR4
Jupyter-Notebook mit Aufgaben, die bearbeitet werden müssen
Beispielklausur in GRIPS
Keine Online-Quellen / LLMs erlaubt
Eigenen Laptop mitbringen oder Laptop aus dem Rechenzentrum mitbringen
↓ Slide 84
Notwendige Python-Module
Bitte vorher installieren:
(Aufgaben zur 3D-Grafik werden keine 3D-Beschleunigung benötigen. Sie erhalten vorab ein Test-Notebook, um die Funktionalität zu prüfen.)
↓ Slide 85
→ Slide 86
Studienleistung 4: Computer-Vision
↓ Slide 87
Aufgabenstellung (1)
Entwickeln Sie eine Anwendung, die in einem Bild vorhandene Objekte identifiziert und Informationen dazu anzeigt.
Abgabe: Mo, 4. August 2024 (5 Bonuspunkte, Nachträgliche Abgabe bis zur Bewertung der Klausur möglich).
Zur Entwicklung der Anwendung gibt es mehrere Testbilder, für die die Anwendung optimiert werden soll. Sie soll aber auch für ähnliche Bilder funktionieren. Die Anwendung soll das eingelesene Bild anzeigen und alle zu zeigenden Informationen als Overlay im Bild markieren bzw. Text darüberlegen.
↓ Slide 88
Aufgabenstellung (2)
Verpflichtende Features:
Einlesen eines Bildes, das als Kommandozeilenparameter übergeben wird. Falls kein Bild angegeben wird, sollen Kamerabilder verwendet werden.
Erkennen und Markieren des ArUco-Markers im Bild (Größe: 6,5 cm)
Perspektivische Entzerrung des Bilds
Zählen und Markieren von Münzen im Testbild (Hough-Circles)
↓ Slide 89
Aufgabenstellung (3)
Wahlpflichtfeatures (3 Features):
Anzeigen des Blattrandes
Anzeige eines 3D-Würfels auf dem ArUco-Marker
Identifizieren der Lego-Steine im Testbild (Farbe, Größe)
Summe der Münzen berechnen
Robuste Erkennung auch der Bilder im Unterordner (“bad”)
eigener Vorschlag
↓ Slide 90
Regeln
bei Verwendung fremder Code-Beispiele oder von LLM-Output: Quellenangabe im Text
als Framework OpenCV verwenden
Abgabe von Quellcode und kurzer Video-Demo (ca. 1 Minute)