Image Processing Toolbox™ and Deep Learning Toolbox™ provide many options to remove noise from images. The simplest and fastest solution is to use the built-in pretrained denoising neural network, called DnCNN. However, the pretrained network does not offer much flexibility in the type of noise recognized. For more flexibility, train your own network using predefined layers, or train a fully custom denoising neural network.
You can use the built-in pretrained DnCNN network to remove Gaussian noise without the challenges of training a network. Removing noise with the pretrained network has these limitations:
Noise removal works only with 2-D single-channel images. If you have multiple color channels, or if you are working with 3-D images, remove noise by treating each channel or plane separately. For an example, see Remove Noise from Color Image Using Pretrained Neural Network.
The network recognizes only Gaussian noise, with a limited range of standard deviation.
To load the pretrained DnCNN network, use the
denoisingNetwork function. Then, pass the DnCNN network and a noisy
2-D single-channel image to
denoiseImage. The image shows the workflow to denoise an image using
the pretrained DnCNN network.
You can train a network to detect a larger range of Gaussian noise standard deviations from grayscale images, starting with built-in layers provided by Image Processing Toolbox. To train a denoising network using predefined layers, follow these steps. The diagram shows the training workflow in the dark gray box.
that stores pristine images.
denoisingImageDatastore object that generates noisy
training data from the pristine images. To specify the range of the
Gaussian noise standard deviations, set the
GaussianNoiseLevel property. You must use the
default value of
that the size of the training data matches the input size of the
Get the predefined denoising layers using the
Define training options using the
trainingOptions (Deep Learning Toolbox)
Train the network, specifying the denoising image datastore as the
data source for
trainNetwork (Deep Learning Toolbox). For each
iteration of training, the denoising image datastore generates one
mini-batch of training data by randomly cropping pristine images from
ImageDatastore, then adding randomly generated
zero-mean Gaussian white noise to each image patch. The standard
deviation of the added noise is unique for each image patch, and has a
value within the range specified by the
GaussianNoiseLevel property of the denoising
After you have trained the network, pass the network and a noisy grayscale image
denoiseImage. The diagram shows the denoising workflow in the light
To train a denoising neural network with maximum flexibility, you can use a custom datastore to generate training data or define your own network architecture. For example, you can:
Train a network that detects a larger variety of noise, such as
non-Gaussian noise distributions, in single-channel images. You can
define the network architecture by using the layers returned by the
dnCNNLayers function. To generate training images
compatible with this network, use the
combine functions to batches of noisy images and the
corresponding noise signal. For more information, see Preprocess Images for Deep Learning (Deep Learning Toolbox).
After you train a denoising network using the DnCNN network
architecture, you can use the
denoiseImage function to remove image noise.
The DnCNN network can also detect high-frequency image artifacts caused by other types of distortion. For example, you can train the DnCNN network to increase image resolution or remove JPEG compression artifacts. The JPEG Image Deblocking Using Deep Learning example shows how to train a DnCNN network to remove JPEG compression artifacts
Train a network that detects a range of Gaussian noise distributions
for color images. To generate training images for this network, you can
denoisingImageDatastore and set the
ChannelFormat property to
'rgb'. You must define a custom convolutional
neural network architecture that supports RGB input images.
After you train a denoising network using a custom network
architecture, you can use the
activations (Deep Learning Toolbox) function to isolate the noise or
high-frequency artifacts in a distorted image. Then, subtract the noise
from the distorted image to obtain a denoised image.
trainingOptions (Deep Learning Toolbox) |
trainNetwork (Deep Learning Toolbox) |
activations (Deep Learning Toolbox) |