В этом примере показано, как удалить Гауссов шум из изображения RGB. Разделите изображение в отдельные цветовые каналы, затем denoise каждый канал с помощью предварительно обученной нейронной сети шумоподавления, 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);
Повторно объедините denoised цветовые каналы, чтобы сформировать denoised изображение RGB. Отобразите denoised цветное изображение.
denoisedRGB = cat(3,denoisedR,denoisedG,denoisedB);
imshow(denoisedRGB)
title('Denoised Image')
Вычислите пиковое отношение сигнал-шум (PSNR) для изображений denoised и шумного. Больший 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) индекс для изображений denoised и шумного. Индекс 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.7397.
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.9509.
На практике каналы цвета изображения часто коррелировали шум. Чтобы удалить коррелируемый шум изображения, сначала преобразуйте изображение RGB в цветовое пространство с каналом яркости, таким как L*a*b* цветовое пространство. Удалите шум на канале яркости только, затем преобразуйте изображение denoised назад в цветовое пространство RGB.
denoiseImage
| denoisingNetwork
| imnoise
| lab2rgb
| psnr
| rgb2lab
| ssim