Sie sind auf Seite 1von 2

MT Übung 2

Bild-Grundlagen: Abtastung, Aliasing, Quantisierung

Zur Verdeutlichung der Vorgänge bei der digitalen Bildverarbeitung sollen verschiedene Manipulationen auf
dem digitalisierten Bild (in Form von unkomprimierten BMP-Dateien) programmiert werden. Dazu werden die
Java-Methoden read_bmp aus der Klasse BmpReader und write_bmp aus der Klasse BmpWriter zum Ein-und
Auslesen von BMP-Dateien zur Verfügung gestellt, die aus der main-Methode der Klasse bmp_io aufgerufen
werden. Diese Klasse bmp_io in der vorliegenden Form liest lediglich eine BMP-Datei ein und speichert sie ggf.
unter einem anderen Namen wieder ab. Lege für die Implementierung ein leeres Java-Projekt an, z.B. in Eclipse
und füge die Dateien hinzu. Unter "Run configurations" lassen sich dann die Übergabeparameter, d.h., Ein- aus
Ausgabedateinamen festlegen.

Argumente:
 input.bmp (BMP-Datei 'input.bmp' wird eingelesen und Header-Daten werden angezeigt)
 input.bmp output.bmp (BMP-Datei 'input.bmp' wird eingelesen und in die Datei 'output.bmp' kopiert)

1. Aufgabe – Bilder erstellen


a. Erzeuge zwei Bilder im Format 16 x 9 (Querformat) mit einer Kamera oder einem Handy (960 x 540 Pixel,
24Bit), davon eines mit einem, nicht nur, aber größtenteils flächigem Inhalt und eines mit feineren
Strukturen (z.B. Natur, farbenfroh). Achte auf eine gute Belichtung. Die Bilder müssen in einem Bitmap-
Format (.bmp) vorliegen. Falls die Kamera ein anderes Format oder eine andere Pixelzahl hat, müssen die
Bilder (z.B. im Paint (nicht GIMP!)) verändern bzw. konvertiert werden.
Benenne die Dateien in „Flaeche_Gruppenname.bmp" und Detail_Gruppenname.bmp". In den Übungen
wirst du die Dateien oft als Ursprungsbilder verwenden.
Schicke die BMP-Dateien unter Nennung deines Gruppennamens im Betreff an ahoenemann@beuth-
hochschule.de. Darauf werde ich dir zwei BMP-Dateien mit Testbildern (gratingHXX.bmp, gratingVXX.bmp)
zusenden, die du für diese Übungsaufgaben benötigst.
b. Wie erklärt sich die Dateigröße für die beiden Dateien, also wie wird die Dateigröße eines Bildes berechnet?
Abgabe: Eigene Bilder, Erläuterung Dateigröße

2. Aufgabe – Aliasing
a. Erläutere wie zeitliches und räumliches Aliasing beim Bild entstehen kann?
b. Ähnlich wie bei der 1. Übung am Audiosignal soll auf das Bild ein Down-Sampling angewendet, um Aliasing
zu erzeugen. Beim Audiosignal haben wir jedes zweite Sample verworfen und damit die Abtastfrequenz
halbiert. Beim Bild wird die räumliche Auflösung verringert, indem die Zahl der Bildzeilen bzw. Bildspalten
verringert wird. Dabei wird das Bild allerdings nicht verkleinern – was normalerweise die Folge wäre -
sondern einfach die Pixel der ungeradzahligen Spalten bzw. Zeilen durch die der geradzahligen Spalten bzw.
Zeilen ersetzen.
Modifiziere bmp_io dahingehend, dass in jeder Zeile des eingelesenen Bildes jedes ungeradzahliges Pixel
durch das davor liegende geradzahlige Pixel ersetzt wird (horizontales Down-Sampling). Mache das Gleiche
für jede Spalte (vertikales Down-Sampling). Falls du im Ergebnis keine Veränderung sehen kannst, ersetze
mehr Spalten bzw. Zeilen, also Spalte bzw. Zeile 1 und 2 durch Spalte bzw. Zeile 0, dann Spalte bzw. Zeile 1,
2 und 3 durch Spalte bzw. Zeile 0 usw.
c. Wende diese Manipulation auf die dir zugeschickten Testbilder an bis du eine Veränderung siehst. Bei
welcher Verringerung der Spalten bzw. Zeilen ist eine Veränderungen zu beobachten? Beschreibe die
Veränderungen!
d. Warum hat das horizontale bzw. vertikale Down-Sampling nur bei einem der Testbild Sinn?
Abgabe: Originale und downgesampelte Testbilder, Erläuterungen, Source Code ggf. mit Dokumentation
3. Aufgabe – Bitreduzierung
a. Modifiziere bmp_io dahingehend, dass die Bitzahl reduziert wird. Dazu werden alle RGB-Werte durch eine
Potenz von 2 geteilt (Integer-Division ohne Rest). Damit das resultierende Bild nicht dunkler wird als das
Original, wird dieses durch Multiplikation mit derselben Zweierpotenz kompensiert. Der Datentyp hat nach
wie vor eine Bittiefe von 24 Bit.
Mit dem entstandenen Programm sollen eure Flächen- und Detailbilder bitreduziert werden. Reduziere die
Bilder um 1 Bit. Führe weitere Reduzierungen durch, solange eine deutlich sichtbare Veränderung der
Bildqualität erreicht ist. Beachte, dass ein Bild drei Farbkanäle hat!
b. Ab welcher Bitzahl tritt bei den Bildern eine deutlich sichtbare Veränderung der Qualität ein? Wie erklärt
sich diese Veränderung?
c. Modifiziere dein Programm noch einmal so, dass auch das Differenzbild zwischen Original und
bitreduziertem Bild, d.h. das Fehlerbild ausgegeben werden kann. Bedenke, dass z.B. bei 1 Bit Reduzierung
der Fehler nur 0, 1 oder -1 wäre. Dieser Wertebereich wäre viel zu klein, als dass man ihn in der 8 Bit-Grafik
noch sehen könnte. Daher muss der Fehler durch Multiplikation mit einer 2er Potenz verstärkt werden. In
anderen Worten: Hat man vorher durch 2^n geteilt, sollte man das Differenzsignal vor dem Abspeichern mit
2^(8-n-1) multiplizieren. So ist sichergestellt, dass der Verstärkungsfaktor mit der Anzahl der gelöschten Bits
kleiner wird.
Beachte, dass bei der Differenzbildung negative und positive Werte auftreten können (ggf. auf der Konsole
ausgeben lassen!). Diese müssen in den erlaubten Wertebereich 0...255 transformiert werden. Benutze
dafür die Formel Farbwert/2 + 127, die alle Farbwerte in den positiven Bereich anhebt.
Ins Übungsprotokoll: 1 Bit reduzierte Bilder und bitreduziertes Bild (Fläche und Detail), bei denen eine deutliche
Verschlechterung sichtbar ist (Angabe der reduzierten Bitzahl), korrespondierende Differenzbilder,
Erläuterungen, Source Code ggf. mit Dokumentation