我在试着复现这个问题
https://github.com/cszn/IRCNN
目前进行到了最后一步了,可是有很大的问题
clear; clc;
addpath('utilities');
imageSets = {'Set18','Set24'}; % testing dataset
setTest = imageSets(1); % select the dataset
useGPU = 0;
folderTest = 'testsets';
folderResult = 'results';
folderModel = 'models';
if ~exist(folderResult,'file')
mkdir(folderResult);
end
setTestCur = cell2mat(setTest(1));
disp('--------------------------------------------');
disp(['----',setTestCur,'--Color Image Demosaiking--']);
disp('--------------------------------------------');
folderTestCur = fullfile(folderTest,setTestCur);
% folder to store results
folderResultCur = fullfile(folderResult, ['Demosaik_',setTestCur]);
if ~exist(folderResultCur,'file')
mkdir(folderResultCur);
end
%% Noise level
noiselevel = 0; % default; noiselevel = 10; Isigma = 10/255; Msigma = 8;
%% parameter setting in HQS (tune the following parameters to obtain the best results)
%% -------------------important!------------------
% Parameter settings of IRCNN
% (1) image noise level: Isigma
Isigma = 0.5/255; % default 0.5/255 for noise-free image, ****** from interval [1/255, 20/255] ******; e.g., 1/255, 2.55/255, 7/255, 11/255
% (2) noise level of the last denoiser: Msigma
Msigma = 2; % default 2 for noise-free image, ****** from {1 2 3 4 5 7 9 11 13 15} ******
%--------------------------------------------------------
%% load denoisers
load(fullfile(folderModel,'modelcolor.mat'));
%% default parameter setting in HQS
totalIter = 30; % default 30
lamda = (Isigma^2)/3; % default 3, ****** from {1 2 3 4} ******
modelSigma1 = 49; % default 49
modelSigmaS = logspace(log10(modelSigma1),log10(Msigma),totalIter);
rho = Isigma^2/((modelSigma1/255)^2);
ns = min(25,max(ceil(modelSigmaS/2),1));
ns = [ns(1)-1,ns];
ext = {'*.jpg','*.png','*.bmp','*.tif'};
filepaths = [];
for i = 1 : length(ext)
filepaths = cat(1,filepaths,dir(fullfile(folderTestCur, ext{i})));
end
PSNRs = zeros(1,length(filepaths));
SSIMs = zeros(1,length(filepaths));
for i = 1 : length(filepaths)
label = imread(fullfile(folderTestCur,filepaths(i).name));
[~, Iname, ext] = fileparts(filepaths(i).name);
label = im2single(label);
% generate mask
[B, y, mask] = mosaic_bayer(label, 'grbg', noiselevel);
y = single(y);
mask = single(mask);
z = linearlcc(B, 0);
z = single(z);
z0 = z;
if useGPU
z = gpuArray(z);
y = gpuArray(y);
end
for itern = 1:totalIter
% step 1
rho = lamda*255^2/(modelSigmaS(itern)^2);
z = (y+rho*z)./(mask+rho);
if ns(itern+1)~=ns(itern)
[net] = loadmodel(modelSigmaS(itern),CNNdenoiser);
net = vl_simplenn_tidy(net);
if useGPU
net = vl_simplenn_move(net, 'gpu');
end
end
% step 2
res = vl_simplenn(net, z,[],[],'conserveMemory',true,'mode','test');
residual = res(end).x;
z = z - residual;
% imshow(z)
% title(int2str(itern))
% drawnow;
end
if useGPU
output = im2uint8(gather(z));
y = im2uint8(gather(y));
end
%output(mask==1) = y(mask==1);
[PSNR_Cur,SSIM_Cur] = Cal_PSNRSSIM(im2uint8(label),output,10,10);
PSNRs(i) = PSNR_Cur;
SSIMs(i) = SSIM_Cur;
imshow(cat(2,y,output));
drawnow;
pause(0.001);
disp([filepaths(i).name,' -- ', num2str(PSNR_Cur,'%2.2f'),'dB -- ', num2str(SSIM_Cur,'%2.2f')]);
% imwrite(y,fullfile(folderResultCur,[Iname,'_mosaik.png']));
% imwrite(output,fullfile(folderResultCur,[Iname,'_ircnn.png']));
end
disp('Average PSNR and SSIM')
disp([mean(PSNRs),mean(SSIMs)]);