Projektaufbau – Entrauschungs-KI: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
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…“
 
Adrian.klinspon@stud.hshl.de (Diskussion | Beiträge)
Zeile 31: Zeile 31:
net = trainnet(NoisyTrain, layer, 'mse', options);</syntaxhighlight>
net = trainnet(NoisyTrain, layer, 'mse', options);</syntaxhighlight>


= Evaluierung & Test (<code>DnCnnEval.m</code>) =
= Evaluierung (<code>DnCnnEval.m</code>) =
Wendet das trainierte Modell auf neue Bilder im Ordner <code>./Testbilder</code> an.
Wendet das trainierte Modell auf neue Bilder im Ordner <code>./Testbilder</code> an.



Version vom 9. Dezember 2025, 11:15 Uhr

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.},