-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
26 changed files
with
741 additions
and
0 deletions.
There are no files selected for viewing
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.
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.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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), :, :); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.