Projektaufbau – Entrauschungs-KI
Aufbau
Dieses Projekt implementiert ein Denoising Convolutional Neural Network (DnCNN) in MATLAB. Es dient dazu, Bildrauschen aus digitalen Bildern zu entfernen. Das System besteht aus drei Hauptmodulen: Training, Evaluierung und Datensatz-Verrauschung.
Technische Voraussetzungen
MATLAB mit folgenden Toolboxen:
- Deep Learning Toolbox
- Image Processing Toolbox
Training (DnCnnTrain.m)
Trainiert das neuronale Netz mit Bildern aus dem Ordner ./BSDS500.
Funktionsweise & Code
Es werden saubere Bilder geladen, bei denen dynamisch beim Training Rauschen hinzugefügt wird. Des Weiteren wird die GPU-Kompatibilität erzwungen, damit auch GPUs ab der 30er-Serie von NVIDIA verwendet werden können.
% GPU-Kompatibilität für RTX 30er/40er/50er
parallel.gpu.enableCUDAForwardCompatibility(true);
% Laden der sauberen Bilder
CleanImages = imageDatastore('./BSDS500', 'IncludeSubfolders', true);
% Dynamische Rausch-Generierung (keine festen verrauschten Dateien nötig)
NoisyTrain = denoisingImageDatastore(CleanImages, 'ChannelFormat', 'grayscale');
% Konfiguration (SGDM Optimizer)
options = trainingOptions('sgdm', ...
'InitialLearnRate', 1e-3, ...
'MaxEpochs', 1, ...
'MiniBatchSize', 128, ...
'ExecutionEnvironment', 'auto'); % Nutzt GPU automatisch
% Training starten
net = trainnet(NoisyTrain, layer, 'mse', options);
Evaluierung (DnCnnEval.m)
Wendet das trainierte Modell auf neue Bilder im Ordner ./Testbilder an.
Funktionsweise & Code
Da das DnCNN auf Graustufenbildern trainiert wurde, werden RGB-Bilder zunächst in ihre Rot-, Grün- und Blaukanäle zerlegt, separat entrauscht und anschließend wieder zu einem Farbbild zusammengeführt.
% Modell laden
loadNet = load('./KIs/Name.mat');
net = loadNet.net;
% Farbbilder verarbeiten (RGB Split)
[h, w, c] = size(img);
if c == 3
% Kanäle trennen
R = img(:, :, 1); G = img(:, :, 2); B = img(:, :, 3);
% Einzeln entrauschen
RDenoise = denoiseImage(R, net);
GDenoise = denoiseImage(G, net);
BDenoise = denoiseImage(B, net);
% Zusammenfügen
dImg = cat(3, RDenoise, GDenoise, BDenoise);
else
dImg = denoiseImage(img, net);
end
% Vergleich erstellen (Collage)
collage = imtile({img, dImg}, 'GridSize', [1 2]);
imwrite(collage, outPath);
Rausch-Generator Tool (DnCNNNoise.m)
Ein Hilfsskript, um einen kompletten Ordner von Bildern permanent zu verrauschen, falls Testdaten benötigt werden.
Funktionsweise & Code
Nutzt eine grafische Oberfläche (GUI) zur Ordnerauswahl und die Image Processing Toolbox (imnoise), um mathematisch exaktes Rauschen hinzuzufügen.
% User Interface für Auswahl
noiseChoice = questdlg('Which noise for ALL images?', 'Noise Type', ...
'Salt & Pepper', 'Gaussian', 'Speckle', 'Gaussian');
% Rauschen anwenden
switch noiseChoice
case 'Salt & Pepper'
% Fügt "Salz und Pfeffer"-Rauschen hinzu (Dichte: 0.05)
imgNoisy = imnoise(img, 'salt & pepper', 0.05);
case 'Gaussian'
% Fügt Gaußsches Rauschen hinzu (Mittelwert 0, Varianz 0.01)
imgNoisy = imnoise(img, 'gaussian', 0, 0.01);
case 'Speckle'
% Fügt multiplikatives Rauschen hinzu (Varianz 0.04)
imgNoisy = imnoise(img, 'speckle', 0.04);
end
Quellen
- P. Arbeláez, M. Maire, C. Fowlkes and J. Malik, "Contour Detection and Hierarchical Image Segmentation," in IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 33, no. 5, pp. 898-916, May 2011, doi: 10.1109/TPAMI.2010.161. keywords: {Image segmentation;Pixel;Detectors;Image edge detection;Humans;Histograms;Benchmark testing;Contour detection;image segmentation;computer vision.},