Symmetry is what we see at a glance; based on the fact that there is no reason for any difference...
― Blaise Pascal, Pensées
Auf diesem Übungsblatt werden wir uns mit Symmetrie befassen. Was wir darunter verstehen wollen können Sie in diesen Abschnitten nachlesen:
Unter einer Symmetrie (von altgriech. σύν syn „zusammen“, μέτρον métron „Maß“) versteht man in der Physik die Eigenschaften eines Systems, nach einer bestimmten Änderung (Transformation, insbesondere Koordinatentransformationen) unverändert zu bleiben (invariant zu sein).
— Wikipedia)
Bewertung: 30 Punkte
Aufgabe
Als erstes Versuchen wir uns an einer einfachen generierenden Struktur. Im Folgenden wollen wir ein Malprogramm schreiben, in dem wir mit der Maus malen können, und das Programm immer einen Kristall anzeigt, also alle Pixel symmetrisch kopiert.
Das Ergebnis könnte in etwa so aussehen.
Wikipedia: „Ebene kristallographische Gruppen“
Wikipedia: „Wallpaper groups (engl.)”
Bewertung: 70 Punkte
In der letzten Aufgabe haben wir Symmetrien erzeugt. In dieser Aufgabe möchten wir die Symmetrien eines Bildes erkennen. Abstrakt gesprochen werden wir die Symmetriegruppe vorgeben und testen, welche Gruppenelemente für Teile des Bildes zutreffen.
Das Ziel dieser Aufgabe ist es, die ähnlichen Teile eines Bildes automatisch zu erkennen. Entwickeln Sie einen Algorithmus, der automatisch (anhand gegebener Symmetrieeigenschaften) bestimmt, welches die wiederholenden Elemente im Datensatz sind.
Ein (eher) einfaches Beispiel sind hierbei Hausfassaden. Das schöne an diesen ist, dass die Fenster (als Symmetrische Objekte) auf einem regelmäßigen Gitter auftreten. Unser Ziel is es das Bild (links) einzugeben und die symmetrischen (im Bild rechts eingefärbten) Teile automatisch zu ermitteln.
Tipp:
Beginnen Sie in jeder Aufgabe mit dem einfachsten Datensatz und prüfen Sie bei Erfolg, ob der nächst schwierigere Datensatz auch „gelöst“ werden kann. Testen Sie ihr Programm ruhig immer wieder an einem der folgenden Datensätze.
numpy
zu verwenden, um die Ähnlichkeitsmaße der Patches zu implementieren. Dies ist sehr viel schneller.