i

Vertiefung - SW-Bilder in Graustufenbilder

Implementierung - Herauslesen eines SW-Bildes

Max und Moritz haben herausgefunden, dass Tine ihr Geheimnis entdeckt hat und verschicken nun Bilder, die zu groß sind, um sie per Hand zu lösen. Jetzt möchte sie ein Programm schreiben, das als Eingabe das bearbeitete Bild (im PGM-Format) erwartet und das geheime Bild (PBM-Format) speichert.

Tine hat für Python das Modul Pillow (Bibliothek PIL) entdeckt, mit dem man Bilder einlesen und bearbeiten kann (du kannst das Modul hier herunterladen und installieren).

Einen Teil des Programmes hat sie schon geschrieben, kannst du ihr weiter helfen?

from PIL import Image

def swGeheimesBildLesen(oeffentlichesBild, geheimesBild):

    oBild = Image.open(oeffentlichesBild) # PGM
    gBild = Image.new('1',oBild.size)     # PBM

    for x in range (oBild.size[0]):
        for y in range (oBild.size[1]):
            # ...???


    gBild.save(geheimesBild)

Mit dem Befehl bild.putpixel( (x,y) ,f) kannst du in dem Objekt "bild" den Pixel an der Stelle (x,y) auf den Farbwert f setzen (bei s/w-Bildern also nur die Werte 0/1). Mit dem Befehl bild.getpixel( (x,y) ) erhältst du den Farbwert an der Stelle (x,y). Weiße Pixel bekommen den Wert 255, schwarze den Wert 0.

Aufgabe 1: Teste dein Programm

Die Jungs haben in folgendem Bild ihre Planung für den heutigen Nachmittag versteckt. Kannst du mit deinem Programm herausfinden was sie vor haben? Lade dazu "blume.pgm" herunter.

Blume [1]

blume.pgm

PBM und PGM Formate lassen sich mit IrfanView erstellen und anzeigen. Um PIL verwenden zu können, muss das Bild binär abgespeichert werden.

Aufgabe 2:

Was hat Max alles in seinem Urlaubsbild versteckt?

Urlaub[2]

urlaub1.pgm

urlaub2.pgm

Implementierung - Verstecken

Tine möchte jetzt auch selbst so große Bilder verstecken. Dazu möchte sie sich ein Programm schreiben.

Aufgabe 3: Programm zum Verstecken

In welchen Situationen muss der Grauwert des Pixels geändert werden? Vervollständige den Quellcode.

from PIL import Image

def swVerstecken(oeffentlichesBild, geheimesBild, ergebnisBild):
    
    oBild=Image.open(oeffentlichesBild) # PGM
    gBild=Image.open(geheimesBild)      # PBM
    groesse= gBild.size
    
    for x in range(groesse[0]):
        for y in range(groesse[1]):
            oPixel=oBild.getpixel((x,y))
            gPixel=gBild.getpixel((x,y))
            if ???   :
                oBild.putpixel((x,y),oPixel+1)
			# ???
			
    oBild.save(ergebnisBild) # PGM

Aufgabe 4: Bilder Verstecken

Erstelle dir selbst ein Bild im PGM- und PBM-Format und verstecke das PBM-Bild. Achte dabei auf die Größe der Bilder. Lasse anschließend deinen Nachbarn herausfinden, was du versteckt hast.

Quellen

  • [1]: Abbildung: Blume - Urheber: AB AS - Lizenz: Inf-Schule.de
    Abbildung: Verstecktes Bild in Blume - Lizenz:Wikimedia Commons
  • [2]: Abbildung: Urlaub - Urheber: AB AS - Lizenz: Inf-Schule.de
    Abbildung: 1. Verstecktes Bild in Urlaub - Lizenz:Wikimedia Commons
    Abbildung: 2. Verstecktes Bild in Urlaub - Urheber: AB AS - Lizenz: Inf-Schule.de

Suche

v
1.2.4.10.3
inf-schule.de/information/darstellunginformation/binaerdarstellungbilder/exkurs_steganografie/vertiefung_sw_grau
inf-schule.de/1.2.4.10.3
inf-schule.de/@/page/hPuKfFYNeAt3emDj

Rückmeldung geben