Übung 4 zu Verteilte und Parallele Programmierung: Parallele Zelluläre Automaten (Teil 2, Bildverarbeitung) (PD Stefan Bosse) [5.2024]
Übung 4: Parallele Zelluläre Automaten mit Lua (Bildverarbeitung)
Vorbereitung
Lua Code Ausführen
ZA Simulation
Eine Partition
Mutiple Partitionen
Unterstütze Paritionsformate
Sensoren und Aktoren
Bilddaten
A. Rauchunterdrückung: Nachbarschaftsglättung
Zellenmodell
Simulationsmodell
B. Rauchunterdrückung: Regel- und Musterbasiert
Zellenmodell
Musterregeln
Simulationsmodell
Simulation erzeugen
Simulation/Ausführung
Evaluierung
Muster
Aufgaben

Übung 4: Parallele Zelluläre Automaten mit Lua (Bildverarbeitung)

Vorbereitung

Lua Code Ausführen

ZA Simulation

Wichtig: Da Shared Memory verwendet wird (intern über ein SM-Matrix Objekt) dürfen die Zustandsdatenvariablen der Zellen nur noch vom Typ number sein (Integer, Float)!

Eine Partition

Mutiple Partitionen

Unterstütze Paritionsformate

┌─────┐   ┌─────┐  ┌─────┬─────┐                           
│     │   │  1  │  │  1  │  2  │                           
│  1  │   ├─────┤  ├─────┼─────┤                           
│     │   │  2  │  │  3  │  4  │                           
└─────┘   └─────┘  └─────┴─────┘                           
                                                           
┌─────┬─────┐    ┌─────┬─────┐    ┌─────┬─────┬─────┬─────┐
│  1  │  2  │    │  1  │  2  │    │  1  │  2  │  3  │  4  │
├─────┼─────┤    ├─────┼─────┤    ├─────┼─────┼─────┼─────┤
│  3  │  4  │    │  3  │  4  │    │  5  │  6  │  7  │  8  │
├─────┼─────┤    ├─────┼─────┤    ├─────┼─────┼─────┼─────┤
│  5  │  6  │    │  5  │  6  │    │  9  │ 10  │ 11  │ 12  │
└─────┴─────┘    ├─────┼─────┤    ├─────┼─────┼─────┼─────┤
                 │  7  │  8  │    │ 13  │ 14  │ 15  │ 16  │
                 └─────┴─────┘    └─────┴─────┴─────┴─────┘

Wichtig: Die Paritionierung in x- und y-Richtung muss ganzahlig sein, d.h. die Größe der Automatenwelt muss durch die Anzahl Spalten und Zeilen ganzzahlig teilbar sein!

Sensoren und Aktoren

if model.neighbors == 4 then
    -- Neumann
    self.neighbors = {
      left    = {-1,0},
      right   = {1,0},
      bottom  = {0,1},
      top     = {0,-1}
    }
elseif model.neighbors == 8 then
    -- Moore
    self.neighbors = {
      left        = {-1,0},
      right       = {1,0},
      bottom      = {0,1},
      top         = {0,-1},
      topleft     = {-1,-1},
      topright    = {1,-1},
      bottomleft  = {-1,1},
      bottomright = {1,1}
    }
end
┌──────────┬──────────┬──────────┬────▶ x
│          │          │          │       
│ topleft  │   top    │ topright │       
│          │          │          │       
├──────────┼──────────┼──────────┤       
│          │          │          │       
│ left     │  pixel   │ right    │       
│          │          │          │       
├──────────┼──────────┼──────────┤       
│          │          │          │       
│ bottom-  │  bottom  │ bottom-  │       
│ left     │          │ right    │       
├──────────┴──────────┴──────────┘       
│                                        
│                                        
▼  y                                     

Bilddaten


Bilddaten und Rauschngenerator

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

A. Rauchunterdrückung: Nachbarschaftsglättung

Zellenmodell


A. Das Zellenmodell

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Simulationsmodell


A. Das Welt- und Simulationsmodell

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

B. Rauchunterdrückung: Regel- und Musterbasiert

Zellenmodell


B. Das Zellenmodell

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Musterregeln


B. Liste von Musterregeln (Nachbarn)

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Simulationsmodell


B. Das Welt- und Simulationsmodell

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Simulation erzeugen

Fehler während der Simulation werden hier angezeigt. Nach Erzeugung des Simulators das Konsolenfenster leeren!


Den Simulator erzeugen

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 


Simulation/Ausführung

ZA World
 ▸ 

 ✗ 


Die Simulation

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 


Simulation terminieren

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Evaluierung


Bestimmung der fehlerhaften Pixel

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Muster

Aufgaben

Aufgabe.
  1. Implementiere den Algorithmus (A). Verwende den RANDOM Scheduler. Simuliere schrittweise (Einzelschritt). Wie verändert sich das Ergebnis (Anzahl fehlerhafter Pixel) mit der Threshold und den Anzahl von Schritten (es kann auch zur Destruktion des Bidles bei weiteren Schritten kommen).
  1. Erweitere den Algorithmus (A) mit einer Regel für 0-Pixel (wasPixel==0). Verändert sich die Qualität des Algorithmus? Notiere die Rechenzeit für einen Simulationsschritt.
  1. Implementiere den Algorithmus (B). Verwende den RANDOM Scheduler. Simuliere schrittweise (Einzelschritt). Füge weitere Regeln hinzu (siehe Artikel) und untersuche die Qualität (Anteil fehlerhafter Pixel). Dokumentiere für jeden Regelsatz das Ergebnis (Fehlerrate im Bild) mit dem dazugehörigen Regelsatz (als 0/1 Vektor). Notiere die Rechenzeit für einen Simulationsschritt.



Hilfe



Einreichung (Assignment #2024-95956)



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.27.2 (c) Dr. Stefan Bosse (Wed May 15 2024 11:10:09 GMT+0200 (CET))