Projektaufbau – Entrasterungs-KI
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:
- Deep Learning Toolbox
- Image Processing Toolbox
- Parallel Computing Toolbox
- System Identification Toolbox
- Signal Processing Toolbox
Des weiteren sind Folgende Dateien wichtig und im SVN hochgeladen:
- Training.mlx
- Training_fortsetzen.mlx
- PatchDatastore.m
- combinedLoss.mlx
- Druckmuster_erstellen_function.mlx
- SynthetischeBilderErzeugen.mlx
- 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")
| zu Schwarz-Weiß konvertieren |
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. Details zur Funktionsweise der Funktion Druckraster_erstellen_function sind im entsprechenden Abschnitt dieses Artikels dokumentiert.
%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');
| zu einem Synthetischen AM-Raster konvertieren |
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
Die Anzahl der Abtastpunkte N in horizontaler (x-) und vertikaler (y-) Richtung ergibt sich ungefähr aus:
wobei
- und die Bildabmessungen in Pixeln,
- der Skalierungsfaktor,
- die Rasterperiode
repräsentieren.
Für die horizontale und vertikale Richtung gilt:
Damit repräsentieren etwa
Abtastpunkte das gesamte Bild.
Diese Anzahl ist offensichtlich zu gering, um das Bild angemessen darzustellen.
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. Dann könnte man noch den Ansatz in Erwägung ziehen einfach beide Werte sehr stark zu vergrößern.
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. Und wenn man die Werte einfach noch mehr vergrößert muss man im klaren sein, dass sich das Bild proportional ebenso vergrößert.
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.
Ein kleines Probelm
Eingangsbild = 481x321
RasterPerioden = 48; % Rasterzellengröße
FaktorRadius = 1; % Punktgroessen-Faktor
ScaleFaktor = 1; % Bildskalierung
Die Abtastung erfolgt mit einer Rasterperiode von 48 Pixeln. Da 48 kein Teiler der Bildabmessungen ist, ergeben sich keine ganzzahligen Abtastpunkte:
Diese Werte beschreiben lediglich die Anzahl der Rasterperioden über dem Bild. Eine direkte Interpretation als Anzahl diskreter Bildpunkte ist nicht zulässig, da am Bildrand partielle Rasterzellen entstehen.
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



