Projektaufbau – Entrauschungs-KI

Aus HSHL Mechatronik
Version vom 9. Dezember 2025, 11:14 Uhr von Adrian.klinspon@stud.hshl.de (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= 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 (<code>DnCnnTrain.m</code>)= Trainiert das neuronale Netz mit Bildern au…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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 & Test (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.},