Einführung in die Computergrafik und Bildverarbeitung
Wintersemester 2021/22
Konzept
Anstelle einer klassischen Vorlesung mit Übung gibt es:
eine Sammlung an Lehrmaterial
einen Abhängigkeitsgraph, der zeigt, welche Themen man in welcher Reihenfolge lernen sollte
einen interaktiven Präsenztermin (Di, 14:15 - 16:00 Uhr, H9)
eine Online-Übung in Gather.town (Mi, 18:15 - 20:00 Uhr)
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
Peer-Feedback
Dieser Kurs ist ein Experiment.
Manches wird gut klappen, manches weniger gut.
Feedback nehme ich gerne an.
Viele Details passe ich während des Semesters an.
Organisatorisches
Anfangs gibt es einige Präsenz-Termine, in denen ich die Grundlagen frontal-interaktiv bespreche
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 wohl: OpenGL, OpenCV, Jupyter Notebooks, PyQtGraph).
Während der Präsenztermine (Dienstag, 14-16 Uhr) schauen wir uns gemeinsam wichtige Themen und Anwendungen an. Das wird dann eher eine interaktive Übung als eine klassische Vorlesung (“Flipped Classroom”).
Die Übung am Mittwochabend findet virtuell in Gather.town statt. Sie dient als Ort für Pair-Programming, Sprechstunde für Probleme, und um Feedback zu geben.
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. Diese wird vermutlich zwei bis drei Stunden dauern. Sie entwickeln dort eine Anwendung zu einem vorgegebenem Thema. Dabei können Sie natürlich auf allen Code zurückgreifen, den Sie im Laufe des Kurses schon geschrieben haben. Vermutlich 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 soll auf jeden Fall 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)
Wer macht was (nicht)?
Was ich beitrage:
Strukturierung der Themen
Material bereitstellen
sagen, was wichtig ist
initiale Einführung zu allen Themenfeldern geben
Feedback während der Präsenztermine geben und dort bei Problemen helfen
Erwartungshorizont für Studienleistungen und Klausur vorgeben
Was ich nicht machen werde:
asynchron via Mail/Discord/etc. bei Problemen helfen
in größerem Umfang neues Material erstellen
Studienleistungen ausführlich bewerten
Grundlagen erklären, die in EIMI/MMT/OOP behandelt wurden
Was Sie selbst machen müssen:
Bücher, Skripte, Tutorials und Code lesen
Python lernen
am Ball bleiben
Kommilitonen unterstützen und ihnen Feedback geben
Fragen stellen
Zeitplan / Log
19. Oktober 2021 - Einführung, Überblick
Klassische frontale Vorlesung zum Einstieg.
Themen heute:
20. Oktober 2021 (online) - Einführung Python / Jupyter Notebooks
Voraussetzungen für die Teilnahme am Termin:
26. Oktober 2021 - Python in der Praxis, erste Bildbearbeitungsschritte
Welche Python-IDE soll ich verwenden?
apt, pip, conda, virtualeenv, docker - Environments und Paketmanager für Python
Bilder laden und modifizieren
Voraussetzungen für Teilnahme am Termin:
Python-Quiz in GRIPS erfolgreich beantwortet
(optional) Laptop dabei, um einige der gezeigten Dinge mal selbst auszuprobieren
27. Oktober 2021 (online) - ohne RW
(Details zu weiteren Terminen folgen)
26. Oktober 2021 - Python in der Praxis, erste Bildbearbeitungsschritte
Welche Python-IDE soll ich verwenden?
apt, pip, conda, virtualeenv, docker - Environments und Paketmanager für Python
Bilder laden und modifizieren
Voraussetzungen für Teilnahme am Termin:
Python-Quiz in GRIPS erfolgreich beantwortet
(optional) Laptop dabei, um einige der gezeigten Dinge mal selbst auszuprobieren
Rückblick Python-Quiz/Aufgaben
(live)
Python IDEs
PEP 8 - Style Guide für Python
PEP: Python Enhancement Proposal - ein Vorschlag, wie die Sprache weiterentwickelt werden soll
-
pep8: 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
-
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
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
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
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
Virtual Environments
Grundidee: für jedes Projekt eine eigene Python-Installation
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
(deaktivieren durch Beenden der Shell)
-
Conda: conda create --name myenv
/ conda activate myenv
Python zur Bildbearbeitung
siehe Notebook
Ausblick 27. Oktober 2021 (online) - ohne RW
Ausblick 2. November 2021 (Präsenz)
Besprechung bisheriger Aufgaben
Überblick Lernlandkarte / Abhängigkeitsgraph
Überblick Studienleistung 1: Bitmap-Grafik
Voraussetzungen für Teilnahme am 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?
(optional) Laptop dabei, um einige der gezeigten Dinge mal selbst auszuprobieren
2. November 2021 - Recap, Bitmap-Grafik
Besprechung bisheriger Aufgaben
Überblick Studienleistung 1: Bitmap-Grafik
Überblick Lernlandkarte / Abhängigkeitsgraph
Voraussetzungen für Teilnahme am 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?
(optional) Laptop dabei, um einige der gezeigten Dinge mal selbst auszuprobieren
Umfrage Aufgaben
Rückblick Python-Quiz/Aufgaben
(live)
Wieviele Stunden bisher investiert?
Studienleistung 1: Bitmap-Grafik (1)
Entwickeln Sie eine Anwendung Mini-Gimp, 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: Di, 16. November 2021 (5 Bonuspunkte - pro angefangener weiterer Woche 1 Punkt weniger)
Studienleistung 1: Bitmap-Grafik (2)
Verpflichtende Features:
Studienleistung 1: Bitmap-Grafik (3)
Wahlpflichtfeatures (3 Features):
sinnvolle grafische Anzeige des Ergebnisses (Empfehlung: Tk)
interaktive Auswahl der Filter
Linien zeichnen mittels Bresenham-Algorithmus
Canny Edge Detection
Erode/Dilate
Entfernen von Störungen durch Inpainting
(eigenes Feature vorschlagen)
Studienleistung 1: Bitmap-Grafik (4)
bei Verwendung fremder Code-Beispiele: Quellenangabe im Text
keine weiteren Bibliotheken verwenden
Abgabe von Quellcode und kurzer Video-Demo (ca. 1 Minute)
-
Überblick Lernlandkarte / Abhängigkeitsgraph (1)
Version 0.1: http://pro.mi.ur.de:8181
(technische Probleme werden noch behoben)
Schon da:
Überblick Lernlandkarte / Abhängigkeitsgraph (2)
Zeitnah:
Ausblick 3. November 2021 - Morphologische Operatoren, Faltung