Einführung in die Computergrafik und Bildverarbeitung

Wintersemester 2021/22

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.

  • 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.
  • 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:
    1. Abgeben der Studienleistungen (max. 20 Punkte insgesamt)
    2. Bug Bounty: pro sachlichem Fehler in meinen Materialien 1 Punkt (FCFS)
    3. Teilen von guten Quellen (je 1 Punkt, max. 5 Punkte insgesamt)
  • 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
  • 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
  • Bücher, Skripte, Tutorials und Code lesen
  • Python lernen
  • am Ball bleiben
  • Kommilitonen unterstützen und ihnen Feedback geben
  • Fragen stellen

Klassische frontale Vorlesung zum Einstieg.

Themen heute:

  • Überblick über das Kurskonzept
  • Organisatorisches
  • Advance Organizer / Überblick über die Themen des Kurses

Voraussetzungen für die Teilnahme am Termin:

  • Schon einmal auf https://schlaubox.de eingeloggt (mit RZ-Account und RZ-Passwort)
  • (optional) Python-Dokumentation mal ein bisschen durchgelesen
  • (optional) lokale Installation von Python und JupyterLab (wir beschäftigen uns das nächste Mal damit)
  • 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
  • Übungsaufgaben und Videos
  • Peer-Support bei Installationsproblemen

(Details zu weiteren Terminen folgen)

  • 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

(live)

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

  • 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
  • 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
  • Anaconda: Python-Distribution für Scientific Computing (multi-platform)
  • Minimale Distribution: miniconda
  • conda: package manager für Anaconda (Intro)
  • pip und conda können parallel eingesetzt werden (1, 2)
  • Alternative: Mamba
  • 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
  • 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)
  • Viele IDEs unterstützen venv (VS Code, PyCharm)
  • Conda: conda create --name myenv / conda activate myenv

siehe Notebook

  • Übungsaufgaben und Videos (ab morgen in GRIPS)
  • Peer-Support bei Installationsproblemen
  • 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
  • Besprechung bisheriger Aufgaben
  • Überblick Studienleistung 1: Bitmap-Grafik
  • Überblick Lernlandkarte / Abhängigkeitsgraph
  • 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

(live)

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)

Verpflichtende Features:

  • Batch-Kommandozeilenbetrieb (python3 minigimp.py --threshold 90 --blur 3 --edges image.jpg)
  • Standardfilter (selbst implementiert)
    • Threshold
    • Brightness
    • Contrast
    • Blur
    • Sharpen

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)
  • bei Verwendung fremder Code-Beispiele: Quellenangabe im Text
  • keine weiteren Bibliotheken verwenden
  • Abgabe von Quellcode und kurzer Video-Demo (ca. 1 Minute)

Version 0.1: http://pro.mi.ur.de:8181

(technische Probleme werden noch behoben)

Schon da:

  • Plattform
  • Themen / Abhängigkeiten (noch nicht komplett)
  • Visualisierung

Zeitnah:

  • Login / Bearbeitungsmöglichkeiten
  • Links zu mehr Material
  • Pfad “Standardweg”
  • vorerst für Thema Bildverarbeitung
  • Einführung Morphologische Operatoren
  • Einführung Faltung
  • Bildfilter basierend auf Faltungen