====== 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: - Überblick über das Kurskonzept - Organisatorisches - Advance Organizer / Überblick über die Themen des Kurses ==== 20. Oktober 2021 (online) - Einführung Python / Jupyter Notebooks ==== - Beispiel-Notebook (Link kommt noch) - [JupyterHub-Installation des Lehrstuhls für Informationswissenschaft](https://www.schlaubox.de) - Einführung Python 3 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) ==== 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 ==== - Übungsaufgaben und Videos - Peer-Support bei Installationsproblemen --- (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 ===== - jeder beliebige Text-Editor - vim (Anleitungen: [1](https://www.vimfromscratch.com/articles/vim-for-python), [2](http://liuchengxu.org/posts/use-vim-as-a-python-ide/)) - [Jetbrains PyCharm](https://www.jetbrains.com/pycharm/) (umfangreiche IDE speziell für Python) - [VisualStudio Code](https://code.visualstudio.com/) ([Tutorial](https://code.visualstudio.com/docs/python/python-tutorial)) - [repl.it](https://replit.com/) (kollaborative browser-basierte IDE) ===== PEP 8 - Style Guide für Python ===== - **PEP**: *Python Enhancement Proposal* - ein Vorschlag, wie die Sprache weiterentwickelt werden soll - PEP 8 -- Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/) - 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 - Link-Tipp: Vortrag von Raymond Hettinger: [Beyond PEP 8 -- Best practices for beautiful intelligible code](https://www.youtube.com/watch?v=wf-BqAjZb8M&t=2s) ===== 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) - Minimale Distribution: [miniconda](https://docs.conda.io/en/latest/miniconda.html) - ``conda``: package manager für Anaconda ([Intro](https://conda.io/projects/conda/en/latest/user-guide/getting-started.html)) - pip und conda können parallel eingesetzt werden ([1](https://www.anaconda.com/blog/understanding-conda-and-pip), [2](https://pythonspeed.com/articles/conda-vs-pip/)) - Alternative: [Mamba](https://github.com/mamba-org/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 ==== 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) - Viele IDEs unterstützen venv ([VS Code](https://code.visualstudio.com/docs/python/environments), [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)) - Conda: ``conda create --name myenv`` / ``conda activate myenv`` ===== Python zur Bildbearbeitung ===== siehe Notebook ===== Ausblick 27. Oktober 2021 (online) - ohne RW ===== - Übungsaufgaben und Videos (ab morgen in GRIPS) - Peer-Support bei Installationsproblemen ===== 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 ===== {{ :courses:cgbv_21ws:slides:pasted:20211102-103735.png?nolink&600 |}} ===== Rückblick Python-Quiz/Aufgaben ===== (live) ===== Wieviele Stunden bisher investiert? ===== {{ :courses:cgbv_21ws:slides:pasted:20211102-103735.png?nolink&600 |}} ===== 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: - Batch-Kommandozeilenbetrieb (``python3 minigimp.py --threshold 90 --blur 3 --edges image.jpg``) - Standardfilter (selbst implementiert) - Threshold - Brightness - Contrast - Blur - Sharpen ===== 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: - Plattform - Themen / Abhängigkeiten (noch nicht komplett) - Visualisierung ===== Überblick Lernlandkarte / Abhängigkeitsgraph (2) ===== Zeitnah: - Login / Bearbeitungsmöglichkeiten - Links zu mehr Material - Pfad "Standardweg" - vorerst für Thema Bildverarbeitung ===== Ausblick 3. November 2021 - Morphologische Operatoren, Faltung ===== - Einführung Morphologische Operatoren - Einführung Faltung - Bildfilter basierend auf Faltungen