add noise funktion to simulate errors

This commit is contained in:
2025-04-16 10:31:29 +02:00
parent 2b8222cbc5
commit 6934527cd9

87
fehler.py Normal file
View File

@@ -0,0 +1,87 @@
import os
import random
from PIL import Image
def bild_verarbeiten(bild_ordner, ausgabe_ordner, transformierungsfunktion):
"""
Veraarbeitet alle Bilder in einem Ordner und speichert die Ergebnisse in einem anderen Ordner.
Verwendet eine übergebene Funktion zur Bildtransformation.
"""
for dateiname in os.listdir(bild_ordner):
if dateiname.lower().endswith(('png', 'jpg', 'jpeg')):
bild_pfad = os.path.join(bild_ordner, dateiname)
try:
bild = Image.open(bild_pfad)
neues_bild = transformierungsfunktion(bild)
neues_bild_pfad = os.path.join(ausgabe_ordner, dateiname)
neues_bild.save(neues_bild_pfad)
print(f"Bild '{dateiname}' erfolgreich verarbeitet und gespeichert in '{neues_bild_pfad}'")
except Exception as e:
print(f"Fehler beim Verarbeiten von '{dateiname}': {e}")
def bild_verarbeiten_einzelbild(bild, zufalls_pixel_chance=0.1):
return bild
def bild_rauschen(bild, zufalls_pixel_chance=0.01):
"""
Verarbeitet ein einzelnes Bild, indem es zufällig ausgewählte Pixel
mit einer gegebenen Wahrscheinlichkeit durch weiße Pixel ersetzt.
Args:
bild (PIL.Image.Image): Das zu verarbeitende Bild-Objekt.
zufalls_pixel_chance (float): Die Wahrscheinlichkeit (zwischen 0.0 und 1.0),
dass ein einzelnes Pixel durch Weiß ersetzt wird.
Standardmäßig 0.1 (10%).
Returns:
PIL.Image.Image: Das verarbeitete Bild mit zufällig ersetzten weißen Pixeln.
Das Originalbild wird direkt modifiziert.
"""
# Lade die Pixeldaten für effizienten Lese-/Schreibzugriff.
# .load() gibt ein PixelAccess-Objekt zurück, das direkten Zugriff erlaubt.
pixel_data = bild.load()
width, height = bild.size
# Definiere die Farbe Weiß. Wir müssen den Bildmodus berücksichtigen.
# Einfacher Ansatz: Konvertiere zu RGB, dann ist Weiß immer (255, 255, 255).
# Alternativ: Prüfe den Modus und setze Weiß entsprechend (z.B. 255 für 'L').
# Wir wählen hier die Konvertierung zu RGB für Konsistenz.
if bild.mode != 'RGB':
# Konvertiere das Bild zu RGB. Achtung: Dies kann Alphakanäle entfernen
# oder Graustufenbilder farbig machen (wenn auch nur in Grautönen).
# Wenn der Originalmodus wichtig ist, muss die Logik angepasst werden.
bild = bild.convert('RGB')
pixel_data = bild.load() # Pixeldaten nach Konvertierung neu laden
width, height = bild.size # Größe könnte sich theoretisch ändern (selten)
white_color = (255, 255, 255) # Weiß im RGB-Format
# Gehe durch jedes Pixel im Bild
for x in range(width):
for y in range(height):
# Generiere eine Zufallszahl zwischen 0.0 und 1.0
# Wenn die Zahl kleiner als die gewünschte Chance ist, ersetze das Pixel
if random.random() < zufalls_pixel_chance:
# Ersetze das Pixel an Position (x, y) durch Weiß
pixel_data[x, y] = white_color
# Gib das modifizierte Bild zurück
return bild
# Hauptteil des Skripts
if __name__ == "__main__":
bild_ordner = "./bilder"
ausgabe_ordner = "./fehler"
# Hier kannst du die transformierungsfunktion definieren oder importieren
transformierungsfunktion = bild_rauschen # Standardmäßig die Farbtransformation
if not os.path.exists(bild_ordner):
print(f"Ordner '{bild_ordner}' nicht gefunden. Bitte erstellen Sie ihn.")
exit()
if not os.path.exists(ausgabe_ordner):
os.makedirs(ausgabe_ordner)
bild_verarbeiten(bild_ordner, ausgabe_ordner, transformierungsfunktion)
print("Verabeitung abgeschlossen.")