Projektaufbau – Entrasterungs-KI: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Fabian.babik@stud.hshl.de (Diskussion | Beiträge)
Fabian.babik@stud.hshl.de (Diskussion | Beiträge)
Zeile 58: Zeile 58:


===SynthetischeBilderErzeugen.mlx ===
===SynthetischeBilderErzeugen.mlx ===
In Schritt 2 ist der Pfad zum entsprechenden Bild anzugeben. Nach Abschluss des Prozesses wird das Bild mit dem generierten Druckmuster ausgegeben.
In Schritt 2 ist der Pfad zum entsprechenden Bild anzugeben. Nach Abschluss des Prozesses wird das Bild mit dem generierten Druckmuster ausgegeben.
<syntaxhighlight lang="matlab">
<syntaxhighlight lang="matlab">
%Synthetische Bilder erzeugen
%Synthetische Bilder erzeugen

Version vom 8. Januar 2026, 16:28 Uhr

Worum geht es in dem Projekt?

In diesem Projekt wird ein Denoising Convolutional Neural Network (DnCNN) in MATLAB implementiert, das zur Entfernung von Druckrastern eingesetzt wird. Anders als beim klassischen DnCNN-Ansatz wird kein Residual Learning verwendet. Stattdessen kommt ein Direct-Mapping-Ansatz zum Einsatz. Das Netzwerk wird direkt darauf trainiert, ein Bild, das durch ein amplitudenmoduliertes Raster (AM-Raster) geprägt ist, in ein sauberes, rasterfreies Bild zu überführen.

Damit dieser Ansatz funktioniert, müssen mehrere vorbereitende Schritte durchgeführt werden. Obwohl die KI die Transformation grundsätzlich kanonisch und bijektiv umsetzt (AM-Bild → normales Bild), ist ein Preprocessing erforderlich. Eine vollständig in die KI integrierte Lösung konnte bisher nicht gefunden werden, trotz intensiver Bemühungen.

Was ich damit genau meine, wird im weiteren Verlauf des Artikels noch ausführlich erläutert.

Technische Vorraussetzungen

Folgender Befehl in der Kommandozeile gibt immer alle Notwendigen Toolboxen zurueck.

[files, products] = matlab.codetools.requiredFilesAndProducts("Datei.mlx")

Stand 06.01.2026 sollten folgende Toolboxen installiert werden:

  1. Deep Learning Toolbox
  2. Image Processing Toolbox
  3. Parallel Computing Toolbox
  4. System Identification Toolbox
  5. Signal Processing Toolbox

Des weiteren sind Folgende Dateien wichtig und im SVN hochgeladen:

  1. Training.mlx
  2. Training_fortsetzen.mlx
  3. PatchDatastore.m
  4. combinedLoss.mlx
  5. Druckmuster_erstellen_function.mlx
  6. SynthetischeBilderErzeugen.mlx
  7. KI_Test_Fertig.mlx

Exemplarische Durchführung

KI Erzeugen

Hier wird erklärt wie man eine KI trainiert

Training.mlx

Hier wird das Training erklärt

PatchDatastore.m

Hier wird der PatchDatastore erklärt

combinedLoss.mlx

Hier wird die Loss Funktion nochmal erklärk

Druckmuster_erstellen_function und Druckmuster_erstellen_function2

Hier wird erklärt wie die Druckmuster erstellt werden

KI Anwenden

Zunächst muss aus einem beliebigen Bild ein synthetisches Bild erzeugt werden, das die Eigenschaften eines Druckrasters aufweist. Alternativ kann man auch ein Bild verwenden, das bereits ein Druckraster enthält. Am besten verwenden Sie ein buntes oder schwarz-weiß Bild. Wenn Sie ein buntes Bild verwenden, ist ein direkter Vergleich mit dem Endergebnis schwierig, da dieses ohnehin schwarz-weiß sein wird. Daher wird empfohlen, den Code zunächst mit dem gewählten Bild auszuführen, um die Ergebnisse zu überprüfen.

img = imread("Ergebnisse_VonSynthetischenDruckraster_ZuNormal\PommesPizza.jpg");
img = im2gray(img);
imwrite(img,"Ergebnisse_VonSynthetischenDruckraster_ZuNormal\BlackWhite_PommesPizza.jpg")
PommesPizza zu Schwarz-Weiß konvertieren PommesPizzaSchwarzWeiss

Dieses Schwarz-Weiß-Bild stellt das angestrebte Zielergebnis dar. Öffnen Sie anschließend die Datei SynthetischeBilderErzeugen.mlx, um aus diesem Bild ein synthetisches AM-Druckmuster zu erzeugen.

SynthetischeBilderErzeugen.mlx

In Schritt 2 ist der Pfad zum entsprechenden Bild anzugeben. Nach Abschluss des Prozesses wird das Bild mit dem generierten Druckmuster ausgegeben.
%Synthetische Bilder erzeugen
%Schritt 1: 
clear; clc; close all;

%Schritt 2: Bild laden
img = imread('E:\MATLAB_Vorkurs\Signalverarbeitung_mit_Kuenstlicher_Intelligenz\mFiles\DruckrasterEntfernen\2026\1\Ergebnisse_VonSynthetischenDruckraster_ZuNormal\PommesPizza.jpg');   % <-- HIER dein Bild einsetzen

%Schritt 3: Wichtige Parameter
RasterPerioden = 15;     % Rasterzellengröße
FaktorRadius   = 0.75;   % Punktgroessen-Faktor
ScaleFaktor    = 5;      % Bildskalierung

%Schritt 4: AM-Druckraster erzeugen mit einer custom Funktion
AM = Druckmuster_erstellen_function( ...
        img, RasterPerioden, FaktorRadius, ScaleFaktor);

%Schritt 5: Speichern
imwrite(AM, 'Synthetisches_PommesPizza.png');
PommesPizza zu einem Synthetischen AM-Raster konvertieren PommesPizzaSynthetisch

Die Parameter sind das Wichtigste Maß, damit die KI erfolgreich das Raster entfernen kann. Die Rasterperiode gibt an bis zu wie viel Platz jeder Dot zu verfügung hat. Der FaktorRadius manipuliert nochmal die Größe der Dots und der Scale Faktor bestimmt wie sehr ein Bild skaliet werden soll. Das Netzwerk wurde darauf trainiert mit 16 Dots Minimum das Schwarz-Weiß Bild zu rekonstruiren. Betrachte folgende Rechnung:

Eingangsbild = 500x500 
RasterPerioden = 50;     % Rasterzellengröße
FaktorRadius   = 1;      % Punktgroessen-Faktor
ScaleFaktor    = 1;      % Bildskalierung

(Eingangsbild*ScaleFaktor)/Rasterperioden = 500/50 = 10. D.h 10x10 Punkte repräsentieren das Gesamtbild. Jetzt könnte man meinen, mann könnte die Werte wie folgt wählen

Eingangsbild = 500x500 
RasterPerioden = 5;     % Rasterzellengröße
FaktorRadius   = 1;      % Punktgroessen-Faktor
ScaleFaktor    = 1;      % Bildskalierung

(Eingangsbild*ScaleFaktor)/Rasterperioden = 500/5 = 100. D.h 100x100 Punkte repräsentieren das Gesamtbild. Dadurch würde man an sich mehr Rasterpunkte erhalten aber die einzelnen Dots wären nicht mehr so vielfältig und genau.

Eingangsbild = 500x500 
RasterPerioden = 50;     % Rasterzellengröße
FaktorRadius   = 1;      % Punktgroessen-Faktor
ScaleFaktor    = 10;      % Bildskalierung

(Eingangsbild*ScaleFaktor)/Rasterperioden = 5000/50 = 100. Hier würde man wieder die gleiche Anzahl an Dots erhalten aber die Dots selber würden eine größere Varriation aufweisen. Trotzdem sind 100 dots für ein 5000x5000 relativ wenig.

Das sind Beispielhafte gute Werte:

Eingangsbild = 3000x4000 
RasterPerioden = 15;     % Rasterzellengröße
FaktorRadius   = 0.75;      % Punktgroessen-Faktor
ScaleFaktor    = 5;      % Bildskalierung

(Eingangsbild*ScaleFaktor)/Rasterperioden = 3000*5/15 = 1000 für x und (Eingangsbild*ScaleFaktor)/Rasterperioden = 4000*5/15 = 1333 für y.

KI_Test_Fertig.mlx

Mit dieser Datei lässt sich ein feines AM-Raster zuverlässig entfernen. Dazu muss in Schritt 2 lediglich der entsprechende Pfad angegeben werden. Um den Arbeitsspeicher effizient zu nutzen, wird beim Anwendungsbild ebenfalls mit Patches gearbeitet.

Dabei ist zu berücksichtigen, wie viele Rasterzellen bei der Erstellung verwendet wurden. Entscheidend ist, dass die Patchgröße mindestens Rasterzellen × 16 beträgt.

Der Hintergrund ist, dass das Netzwerk während des Trainings stets mit einer ausreichenden Anzahl an Bildpunkten („Dots“) gearbeitet hat. Bei zu wenigen Punkten stehen dem Modell nicht genügend Informationen zur Verfügung, um verlässlich zu lernen und zu generalisieren.

Weiter Ergänzungen und Ideen

Hier ist ein Text

Schlusswort