# Remove Noise from Color Image Using Pretrained Neural Network

This example shows how to remove Gaussian noise from an RGB image using a denoising convolutional neural network.

Read a color image into the workspace and convert the data to data type `double`. Display the pristine color image.

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

Add zero-mean Gaussian white noise with a variance of 0.01 to the image. The `imnoise` function adds noise to each color channel independently. Display the noisy color image.

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

The pretrained denoising convolutional neural network, DnCNN, operates on single-channel images. Split the noisy RGB image into its three individual color channels.

`[noisyR,noisyG,noisyB] = imsplit(noisyRGB);`

Load the pretrained DnCNN network.

`net = denoisingNetwork("dncnn");`

Use the DnCNN network to remove noise from each color channel.

```denoisedR = denoiseImage(noisyR,net); denoisedG = denoiseImage(noisyG,net); denoisedB = denoiseImage(noisyB,net);```

Recombine the denoised color channels to form the denoised RGB image. Display the denoised color image.

```denoisedRGB = cat(3,denoisedR,denoisedG,denoisedB); imshow(denoisedRGB) title("Denoised Image")```

Calculate the peak signal-to-noise ratio (PSNR) for the noisy and denoised images. A larger PSNR indicates that noise has a smaller relative signal, and is associated with higher image quality.

```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. ```

Calculate the structural similarity (SSIM) index for the noisy and denoised images. An SSIM index close to 1 indicates good agreement with the reference image, and higher image quality.

```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. ```

In practice, image color channels frequently have correlated noise. To remove correlated image noise, first convert the RGB image to a color space with a luminance channel, such as the L*a*b* color space. Remove noise on the luminance channel only, then convert the denoised image back to the RGB color space.