Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

事前学習済みのニューラル ネットワークを使用した、カラー イメージからのノイズ除去

この例では、ノイズ除去畳み込みニューラル ネットワークを使用して RGB イメージからガウス ノイズを除去する方法を示します。

カラー イメージをワークスペースに読み取り、データをデータ型 double に変換します。初期状態のカラー イメージを表示します。

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

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

事前学習済みのノイズ除去畳み込みニューラル ネットワーク DnCNN は、シングル チャネル イメージで動作します。ノイズを含む RGB イメージを 3 つの個別のカラー チャネルに分割します。

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

ノイズの多いイメージとノイズ除去後のイメージのピーク S/N 比 (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 色空間に戻します。

参考

(Image Processing Toolbox) | (Image Processing Toolbox) | (Image Processing Toolbox) | (Image Processing Toolbox) | (Image Processing Toolbox) | (Image Processing Toolbox) | (Image Processing Toolbox)

関連するトピック