Удаление шума из цветного изображения с помощью предварительно обученной нейронной сети

В этом примере показано, как удалить Гауссов шум из изображения RGB. Разделите изображение на отдельные цветовые каналы, затем денуризируйте каждый канал с помощью предварительно обученной обличающей нейронной сети, DnCNN.

Считайте цветное изображение в рабочую область и преобразуйте данные в double. Отобразите первозданное цветное изображение.

pristineRGB = imread('lighthouse.png');
pristineRGB = im2double(pristineRGB);
imshow(pristineRGB)
title('Pristine Image')

Figure contains an axes. The axes with title Pristine Image contains an object of type image.

Добавьте к изображению средний Гауссов белый шум с отклонением 0,01. imnoise добавляет шум каждому цветовому каналу независимо. Отобразите шумное цветное изображение.

noisyRGB = imnoise(pristineRGB,'gaussian',0,0.01);
imshow(noisyRGB)
title('Noisy Image')

Figure contains an axes. The axes with title Noisy Image contains an object of type 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')

Figure contains an axes. The axes with title Denoised Image contains an object of type 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.

См. также

| | | | | |

Похожие темы