MATLAB Examples

CNNによるノイズ除去(縦線・横線)

Contents

初期化

clear; close all force; clc; rng('default');

数字画像データセット取り込み

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos',...
    'nndatasets','DigitDataset');
digitData = imageDatastore(digitDatasetPath,...
    'IncludeSubfolders',true,'LabelSource','foldernames');

画像読み込み

I = im2double(readimage(digitData,10));
figure; subplot(1,4,1);
imshow(I);
title('オリジナル画像'); shg;

ノイズ画像の作成

randrow = randi(size(I,1));
randcol = randi(size(I,2));
testI = I;
testI(randrow,:) = 1; % 横線の挿入
testI(:,randcol) = 1; % 縦線の挿入
subplot(1,4,2), imshow(testI);
title('ノイズ付加画像'); shg;

学習済みモデルの読み込み

if ~exist('trainednet_rowcol_minibatch.mat','file')
    error('d3_denoise_makeNet_rowcolnoize_custom_minibatch.m を実行して学習済みモデルを生成してください。');
end
d = load('trainednet_rowcol_minibatch.mat');
net = d.net;

ノイズ成分抽出

noiseI = predict(net,testI);
subplot(1,4,3), imshow(noiseI);
title('ノイズ成分'); shg;

ノイズ成分を除去

recoverI = testI - noiseI;
subplot(1,4,4), imshow(recoverI);
title('ノイズ除去画像'); shg;

Copyright 2018 The MathWorks, Inc.