メインコンテンツ

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

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

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

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

Figure contains an axes object. The hidden 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 hidden 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 hidden 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 色空間に戻します。

参考

| | | | | |

トピック