Projektaufbau – Entrasterungs-KI: Unterschied zwischen den Versionen
| Zeile 59: | Zeile 59: | ||
%Schritt 3: Wichtige Parameter | %Schritt 3: Wichtige Parameter | ||
RasterPerioden = 15; % Rasterzellengröße | RasterPerioden = 15; % Rasterzellengröße | ||
FaktorRadius = 0.75; | FaktorRadius = 0.75; % Punktgroessen-Faktor | ||
ScaleFaktor = 5; % Bildskalierung | ScaleFaktor = 5; % Bildskalierung | ||
| Zeile 114: | Zeile 114: | ||
(Eingangsbild*ScaleFaktor)/Rasterperioden = 3000*5/15 = 1000 für x und (Eingangsbild*ScaleFaktor)/Rasterperioden = 4000*5/15 = 1333 für y. | (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 = | = Weiter Ergänzungen und Ideen = | ||
Hier ist ein Text | Hier ist ein Text | ||
= Schlusswort = | = Schlusswort = | ||
Version vom 8. Januar 2026, 16:11 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:
- 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
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 ist sozusagen unser gewünschtes Ergebnis. Nun öffne das SynthetischeBilderErzeugen.mlx damit wir aus dem Bild ein synthetisches Am Druckmsuter erstellen. In Schritt 2 muss dann der Pfad des Bildes eingegeben werden und am Ende bekommt man das Bild mit dem Druckmuster raus.
SynthetischeBilderErzeugen.mlx
%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
(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