В этом примере показано, как удалить гауссовский шум из изображения RGB. Разбейте изображение на отдельные цветовые каналы, затем оскверните каждый канал с помощью предварительно обученной деноизирующей нейронной сети DnCNN.
Считывание цветного изображения в рабочую область и преобразование данных в double. Отображение нетронутого цветного изображения.
pristineRGB = imread('lighthouse.png'); pristineRGB = im2double(pristineRGB); imshow(pristineRGB) title('Pristine Image')

Добавьте нулевой средний гауссовский белый шум с дисперсией 0,01 к изображению. imnoise добавляет шум к каждому цветовому каналу независимо. Отображение шумного цветного изображения.
noisyRGB = imnoise(pristineRGB,'gaussian',0,0.01); imshow(noisyRGB) title('Noisy Image')

Разбейте шумное изображение RGB на отдельные цветовые каналы.
[noisyR,noisyG,noisyB] = imsplit(noisyRGB);
Загрузите предварительно обученную сеть DnCNN.
net = denoisingNetwork('dncnn');Используйте сеть DnCNN для удаления шума из каждого цветового канала.
denoisedR = denoiseImage(noisyR,net); denoisedG = denoiseImage(noisyG,net); denoisedB = denoiseImage(noisyB,net);
Рекомбинировать деноизолированные цветовые каналы для формирования деноизолированного изображения RGB. Выведите на экран цветное изображение.
denoisedRGB = cat(3,denoisedR,denoisedG,denoisedB);
imshow(denoisedRGB)
title('Denoised Image')
Вычислите пиковое отношение сигнал/шум (PSNR) для шумных и деноизолированных изображений. Больший PSNR указывает, что шум имеет меньший относительный сигнал и связан с более высоким качеством изображения.
noisyPSNR = psnr(noisyRGB,pristineRGB);
fprintf('\n The PSNR value of the noisy image is %0.4f.',noisyPSNR);The PSNR value of the noisy image is 20.6395.
denoisedPSNR = psnr(denoisedRGB,pristineRGB);
fprintf('\n The PSNR value of the denoised image is %0.4f.',denoisedPSNR);The PSNR value of the denoised image is 29.6857.
Рассчитайте индекс структурного подобия (SSIM) для шумных и деноизолированных изображений. Индекс SSIM, близкий к 1, указывает на хорошее согласие с опорным изображением и более высокое качество изображения.
noisySSIM = ssim(noisyRGB,pristineRGB);
fprintf('\n The SSIM value of the noisy image is %0.4f.',noisySSIM);The SSIM value of the noisy image is 0.7393.
denoisedSSIM = ssim(denoisedRGB,pristineRGB);
fprintf('\n The SSIM value of the denoised image is %0.4f.',denoisedSSIM);The SSIM value of the denoised image is 0.9507.
На практике цветовые каналы изображения часто имеют коррелированный шум. Чтобы удалить коррелированный шум изображения, сначала преобразуйте изображение RGB в цветовое пространство с каналом яркости, таким как цветовое пространство L * a * b *. Удалите шум только в канале яркости, а затем преобразуйте обозначенное изображение обратно в цветовое пространство RGB.
denoiseImage | denoisingNetwork | imnoise | lab2rgb | psnr | rgb2lab | ssim