-
Notifications
You must be signed in to change notification settings - Fork 131
/
Demo_REAL_Color.m
133 lines (102 loc) · 4.07 KB
/
Demo_REAL_Color.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
% This is the testing demo of FFDNet for denoising real noisy (color) images.
%
% To run the code, you should install Matconvnet first. Alternatively, you can use the
% function `vl_ffdnet_matlab` to perform denoising without Matconvnet.
%
% "FFDNet: Toward a Fast and Flexible Solution for CNN based Image Denoising"
% 2018/03/23
% If you have any question, please feel free to contact with me.
% Kai Zhang (e-mail: [email protected])
% clear; clc;
format compact;
global sigmas; % input noise level or input noise level map
addpath(fullfile('utilities'));
folderModel = 'models';
folderTest = 'testsets';
folderResult= 'results';
imageSets = {'RNI15'}; % testing datasets
setTestCur = imageSets{1}; % current testing dataset
showResult = 1;
useGPU = 0;
pauseTime = 0;
inputNoiseSigma = 15; % input noise level (Sigma_RGB)
% -****************************************************-
% Audrey_Hepburn.jpg (inputNoiseSigma = 10); i = 1
% Bears.png (inputNoiseSigma = 15); i = 2
% Boy.png (inputNoiseSigma = 45); i = 3
% Dog.png (inputNoiseSigma = 28); i = 4
% Flowers.png (inputNoiseSigma = 70); i = 5
% Frog.png (inputNoiseSigma = 15); i = 6
% Movie.png (inputNoiseSigma = 12); i = 8
% Pattern1.png (inputNoiseSigma = 12); i = 9
% Pattern2.png (inputNoiseSigma = 40); i = 10
% Pattern3.png (inputNoiseSigma = 25); i = 11
% Postcards.png (inputNoiseSigma = 15); i = 12
% Singer.png (inputNoiseSigma = 30); i = 13
% Stars.png (inputNoiseSigma = 18); i = 14
% Window.png (inputNoiseSigma = 15); i = 15
% -****************************************************-
folderResultCur = fullfile(folderResult, [setTestCur,'_',num2str(inputNoiseSigma(1))]);
if ~isdir(folderResultCur)
mkdir(folderResultCur)
end
load(fullfile('models','FFDNet_color.mat'));
net = vl_simplenn_tidy(net);
% for i = 1:size(net.layers,2)
% net.layers{i}.precious = 1;
% end
if useGPU
net = vl_simplenn_move(net, 'gpu') ;
end
% read images
ext = {'*.jpg','*.png','*.bmp','*.tif'};
filePaths = [];
for i = 1 : length(ext)
filePaths = cat(1,filePaths, dir(fullfile(folderTest,setTestCur,ext{i})));
end
for i = 6
%% read images
disp([filePaths(i).name])
label = imread(fullfile(folderTest,setTestCur,filePaths(i).name));
[w,h,c]=size(label);
if c == 3
[~,nameCur,extCur] = fileparts(filePaths(i).name);
input = im2single(label);
if mod(w,2)==1
input = cat(1,input, input(end,:,:)) ;
end
if mod(h,2)==1
input = cat(2,input, input(:,end,:)) ;
end
if useGPU
input = gpuArray(input);
end
% set model noise level map
sigmas = inputNoiseSigma/255; % see "vl_simplenn.m".
% perform denoising
res = vl_simplenn(net,input,[],[],'conserveMemory',true,'mode','test'); % matconvnet default
% res = vl_ffdnet_concise(net, input); % concise version of vl_simplenn for testing FFDNet
% res = vl_ffdnet_matlab(net, input); % use this if you did not install matconvnet; very slow
% output = input -res(end).x; % for 'model_color.mat'
output = res(end).x;
if mod(w,2)==1
output = output(1:end-1,:,:);
input = input(1:end-1,:,:);
end
if mod(h,2)==1
output = output(:,1:end-1,:);
input = input(:,1:end-1,:);
end
if useGPU
output = gather(output);
input = gather(input);
end
if showResult
imshow(cat(2,im2uint8(input),im2uint8(output)));
title([filePaths(i).name])
imwrite(im2uint8(output), fullfile(folderResultCur, [nameCur,'_' num2str(inputNoiseSigma(1),'%02d'), '.png'] ));
drawnow;
pause(pauseTime)
end
end
end