Skip to content

Commit

Permalink
Init
Browse files Browse the repository at this point in the history
  • Loading branch information
cszn authored Dec 17, 2017
1 parent 2bd4a21 commit 803e737
Show file tree
Hide file tree
Showing 26 changed files with 741 additions and 0 deletions.
Binary file added figs/architecture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added figs/bicubic1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added figs/bicubic2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added figs/realSR1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added figs/realSR2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added models/SRMDNFx2.mat
Binary file not shown.
Binary file added models/SRMDNFx3.mat
Binary file not shown.
Binary file added models/SRMDNFx4.mat
Binary file not shown.
Binary file added models/SRMDx1_color.mat
Binary file not shown.
Binary file added models/SRMDx1_gray.mat
Binary file not shown.
Binary file added models/SRMDx2.mat
Binary file not shown.
Binary file added models/SRMDx3.mat
Binary file not shown.
Binary file added models/SRMDx4.mat
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
221 changes: 221 additions & 0 deletions utilities/Cal_PSNRSSIM.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
function [psnr_cur, ssim_cur] = Cal_PSNRSSIM(A,B,row,col)


[n,m,ch]=size(B);
A = A(row+1:n-row,col+1:m-col,:);
B = B(row+1:n-row,col+1:m-col,:);
A=double(A); % Ground-truth
B=double(B); %

e=A(:)-B(:);
mse=mean(e.^2);
psnr_cur=10*log10(255^2/mse);

if ch==1
[ssim_cur, ~] = ssim_index(A, B);
else
ssim_cur = (ssim_index(A(:,:,1), B(:,:,1)) + ssim_index(A(:,:,2), B(:,:,2)) + ssim_index(A(:,:,3), B(:,:,3)))/3;
end


function [mssim, ssim_map] = ssim_index(img1, img2, K, window, L)

%========================================================================
%SSIM Index, Version 1.0
%Copyright(c) 2003 Zhou Wang
%All Rights Reserved.
%
%The author is with Howard Hughes Medical Institute, and Laboratory
%for Computational Vision at Center for Neural Science and Courant
%Institute of Mathematical Sciences, New York University.
%
%----------------------------------------------------------------------
%Permission to use, copy, or modify this software and its documentation
%for educational and research purposes only and without fee is hereby
%granted, provided that this copyright notice and the original authors'
%names appear on all copies and supporting documentation. This program
%shall not be used, rewritten, or adapted as the basis of a commercial
%software or hardware product without first obtaining permission of the
%authors. The authors make no representations about the suitability of
%this software for any purpose. It is provided "as is" without express
%or implied warranty.
%----------------------------------------------------------------------
%
%This is an implementation of the algorithm for calculating the
%Structural SIMilarity (SSIM) index between two images. Please refer
%to the following paper:
%
%Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image
%quality assessment: From error measurement to structural similarity"
%IEEE Transactios on Image Processing, vol. 13, no. 1, Jan. 2004.
%
%Kindly report any suggestions or corrections to zhouwang@ieee.org
%
%----------------------------------------------------------------------
%
%Input : (1) img1: the first image being compared
% (2) img2: the second image being compared
% (3) K: constants in the SSIM index formula (see the above
% reference). defualt value: K = [0.01 0.03]
% (4) window: local window for statistics (see the above
% reference). default widnow is Gaussian given by
% window = fspecial('gaussian', 11, 1.5);
% (5) L: dynamic range of the images. default: L = 255
%
%Output: (1) mssim: the mean SSIM index value between 2 images.
% If one of the images being compared is regarded as
% perfect quality, then mssim can be considered as the
% quality measure of the other image.
% If img1 = img2, then mssim = 1.
% (2) ssim_map: the SSIM index map of the test image. The map
% has a smaller size than the input images. The actual size:
% size(img1) - size(window) + 1.
%
%Default Usage:
% Given 2 test images img1 and img2, whose dynamic range is 0-255
%
% [mssim ssim_map] = ssim_index(img1, img2);
%
%Advanced Usage:
% User defined parameters. For example
%
% K = [0.05 0.05];
% window = ones(8);
% L = 100;
% [mssim ssim_map] = ssim_index(img1, img2, K, window, L);
%
%See the results:
%
% mssim %Gives the mssim value
% imshow(max(0, ssim_map).^4) %Shows the SSIM index map
%
%========================================================================


if (nargin < 2 || nargin > 5)
ssim_index = -Inf;
ssim_map = -Inf;
return;
end

if (size(img1) ~= size(img2))
ssim_index = -Inf;
ssim_map = -Inf;
return;
end

[M N] = size(img1);

if (nargin == 2)
if ((M < 11) || (N < 11))
ssim_index = -Inf;
ssim_map = -Inf;
return
end
window = fspecial('gaussian', 11, 1.5); %
K(1) = 0.01; % default settings
K(2) = 0.03; %
L = 255; %
end

if (nargin == 3)
if ((M < 11) || (N < 11))
ssim_index = -Inf;
ssim_map = -Inf;
return
end
window = fspecial('gaussian', 11, 1.5);
L = 255;
if (length(K) == 2)
if (K(1) < 0 || K(2) < 0)
ssim_index = -Inf;
ssim_map = -Inf;
return;
end
else
ssim_index = -Inf;
ssim_map = -Inf;
return;
end
end

if (nargin == 4)
[H W] = size(window);
if ((H*W) < 4 || (H > M) || (W > N))
ssim_index = -Inf;
ssim_map = -Inf;
return
end
L = 255;
if (length(K) == 2)
if (K(1) < 0 || K(2) < 0)
ssim_index = -Inf;
ssim_map = -Inf;
return;
end
else
ssim_index = -Inf;
ssim_map = -Inf;
return;
end
end

if (nargin == 5)
[H W] = size(window);
if ((H*W) < 4 || (H > M) || (W > N))
ssim_index = -Inf;
ssim_map = -Inf;
return
end
if (length(K) == 2)
if (K(1) < 0 || K(2) < 0)
ssim_index = -Inf;
ssim_map = -Inf;
return;
end
else
ssim_index = -Inf;
ssim_map = -Inf;
return;
end
end

C1 = (K(1)*L)^2;
C2 = (K(2)*L)^2;
window = window/sum(sum(window));
img1 = double(img1);
img2 = double(img2);

mu1 = filter2(window, img1, 'valid');
mu2 = filter2(window, img2, 'valid');
mu1_sq = mu1.*mu1;
mu2_sq = mu2.*mu2;
mu1_mu2 = mu1.*mu2;
sigma1_sq = filter2(window, img1.*img1, 'valid') - mu1_sq;
sigma2_sq = filter2(window, img2.*img2, 'valid') - mu2_sq;
sigma12 = filter2(window, img1.*img2, 'valid') - mu1_mu2;

if (C1 > 0 & C2 > 0)
ssim_map = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))./((mu1_sq + mu2_sq + C1).*(sigma1_sq + sigma2_sq + C2));
else
numerator1 = 2*mu1_mu2 + C1;
numerator2 = 2*sigma12 + C2;
denominator1 = mu1_sq + mu2_sq + C1;
denominator2 = sigma1_sq + sigma2_sq + C2;
ssim_map = ones(size(mu1));
index = (denominator1.*denominator2 > 0);
ssim_map(index) = (numerator1(index).*numerator2(index))./(denominator1(index).*denominator2(index));
index = (denominator1 ~= 0) & (denominator2 == 0);
ssim_map(index) = numerator1(index)./denominator1(index);
end

mssim = mean2(ssim_map);

return







9 changes: 9 additions & 0 deletions utilities/center_crop.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
function [iout] = center_crop(im,a,b)

[w,h,~] = size(im);
c1 = w-a-(w-a)/2;
c2 = h-b-(h-b)/2;
iout = im(c1+1:c1+a,c2+1:c2+b,:);

end

60 changes: 60 additions & 0 deletions utilities/data_augmentation.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
function image = data_augmentation(image, mode)

if mode == 1
return;
end

if mode == 2 % flipped
image = flipud(image);
return;
end

if mode == 3 % rotation 90
image = rot90(image,1);
return;
end

if mode == 4 % rotation 90 & flipped
image = rot90(image,1);
image = flipud(image);
return;
end

if mode == 5 % rotation 180
image = rot90(image,2);
return;
end

if mode == 6 % rotation 180 & flipped
image = rot90(image,2);
image = flipud(image);
return;
end

if mode == 7 % rotation 270
image = rot90(image,3);
return;
end

if mode == 8 % rotation 270 & flipped
image = rot90(image,3);
image = flipud(image);
return;
end

















12 changes: 12 additions & 0 deletions utilities/im_crop.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
function [im] = im_crop(im,w,h)


if mod(w,2)==1
im = im(1:end-1,:,:);
end
if mod(h,2)==1
im = im(:,1:end-1,:);
end

end

13 changes: 13 additions & 0 deletions utilities/im_pad.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
function [im] = im_pad(im)

[w,h,~] = size(im);

if mod(w,2)==1
im = cat(1,im, im(end,:,:)) ;
end
if mod(h,2)==1
im = cat(2,im, im(:,end,:)) ;
end

end

12 changes: 12 additions & 0 deletions utilities/modcrop.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
function imgs = modcrop(imgs, modulo)
if size(imgs,3)==1
sz = size(imgs);
sz = sz - mod(sz, modulo);
imgs = imgs(1:sz(1), 1:sz(2));
else
tmpsz = size(imgs);
sz = tmpsz(1:2);
sz = sz - mod(sz, modulo);
imgs = imgs(1:sz(1), 1:sz(2),:);
end

3 changes: 3 additions & 0 deletions utilities/shave.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function I = shave(I, border)
I = I(1+border(1):end-border(1), ...
1+border(2):end-border(2), :, :);
36 changes: 36 additions & 0 deletions utilities/vl_simplenn_mergebnorm.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
function [net1] = vl_simplenn_mergebnorm(net)

%% merge bnorm parameters into adjacent Conv layer

for i = 1:numel(net.layers)
if strcmp(net.layers{i}.type, 'conv')
net.layers{i}.weightDecay(2) = 1;
end
end

for i = 1:numel(net.layers)
if strcmp(net.layers{i}.type, 'bnorm')
ws = net.layers{i}.weights{1};
bs = net.layers{i}.weights{2};
mu_sigmas = net.layers{i}.weights{3};
for j = 1:numel(ws)
net.layers{i-1}.weights{1}(:,:,:,j) =single(double(net.layers{i-1}.weights{1}(:,:,:,j))*double(ws(j))/(double(mu_sigmas(j,2))));
net.layers{i-1}.weights{2}(j) =single(double(bs(j)) - double(ws(j))*double(mu_sigmas(j,1))/(double(mu_sigmas(j,2))));
end
net.layers{i-1}.learningRate(2) = 1;
end
end

net1 = net;
net1.layers = {};
net1 = rmfield(net1,'meta');
for i = 1:numel(net.layers)
if ~strcmp(net.layers{i}.type, 'bnorm')
net1.layers{end+1} = net.layers{i};
end
end

net1.layers = net1.layers(1:end-1);


end
Loading

0 comments on commit 803e737

Please sign in to comment.