|
- import numpy as np
- from PIL import Image
- from scipy.signal import convolve2d
- import math
- import os
-
- '''
- im1 = Image.open("results/LOLdataset_eval15/1_kindle.png").convert('L')
- im2 = Image.open("LOLdataset/eval15/high/1.png").convert('L')
-
- print(compute_ssim(np.array(im1),np.array(im2)))
- print(compute_psnr(np.array(im1), np.array(im2)))
- '''
-
- def matlab_style_gauss2D(shape=(3,3),sigma=0.5):
- """
- 2D gaussian mask - should give the same result as MATLAB's
- fspecial('gaussian',[shape],[sigma])
- """
- m,n = [(ss-1.)/2. for ss in shape]
- y,x = np.ogrid[-m:m+1,-n:n+1]
- h = np.exp( -(x*x + y*y) / (2.*sigma*sigma) )
- h[ h < np.finfo(h.dtype).eps*h.max() ] = 0
- sumh = h.sum()
- if sumh != 0:
- h /= sumh
- return h
-
- def filter2(x, kernel, mode='same'):
- return convolve2d(x, np.rot90(kernel, 2), mode=mode)
-
- def compute_ssim(im1, im2, k1=0.01, k2=0.03, win_size=11, L=255):
-
- if not im1.shape == im2.shape:
- raise ValueError("Input Imagees must have the same dimensions")
- if len(im1.shape) > 2:
- raise ValueError("Please input the images with 1 channel")
-
- M, N = im1.shape
- C1 = (k1*L)**2
- C2 = (k2*L)**2
- window = matlab_style_gauss2D(shape=(win_size,win_size), sigma=1.5)
- window = window/np.sum(np.sum(window))
-
- if im1.dtype == np.uint8:
- im1 = np.double(im1)
- if im2.dtype == np.uint8:
- im2 = np.double(im2)
-
- mu1 = filter2(im1, window, 'valid')
- mu2 = filter2(im2, window, 'valid')
- mu1_sq = mu1 * mu1
- mu2_sq = mu2 * mu2
- mu1_mu2 = mu1 * mu2
- sigma1_sq = filter2(im1*im1, window, 'valid') - mu1_sq
- sigma2_sq = filter2(im2*im2, window, 'valid') - mu2_sq
- sigmal2 = filter2(im1*im2, window, 'valid') - mu1_mu2
-
- ssim_map = ((2*mu1_mu2+C1) * (2*sigmal2+C2)) / ((mu1_sq+mu2_sq+C1) * (sigma1_sq+sigma2_sq+C2))
-
- return np.mean(np.mean(ssim_map))
-
-
- def compute_psnr(img1, img2):
- mse = np.mean((img1/1.0 - img2/1.0) ** 2 )
- if mse < 1.0e-10:
- return 100
- return 10 * math.log10(255.0**2/mse)
-
-
- def getfiles(file_path='LOLdataset/eval15/high', extension='.png'):
- file_names_list = []
- file_names = os.listdir(file_path)
- for file_name in file_names:
- if file_name.endswith(extension):
- file_names_list.append(file_name)
-
- return file_names_list
-
-
-
- file_names_list = getfiles(file_path='LOLdataset/eval15/high', extension='.png')
-
- ssim_sum = 0
- psnr_sum = 0
- for file_index in range(len(file_names_list)):
- result_image_path = os.path.join('results/LOLdataset_eval15', '%s_kindle.png' % (file_names_list[file_index][0:-4]))
- original_image_path = os.path.join("LOLdataset/eval15/high/", file_names_list[file_index])
-
- im1 = Image.open(result_image_path).convert('L')
- im2 = Image.open(original_image_path).convert('L')
-
- ssim = compute_ssim(np.array(im1),np.array(im2))
- psnr = compute_psnr(np.array(im1), np.array(im2))
-
- ssim_sum += ssim
- psnr_sum += psnr
-
- print(file_index, ": ", original_image_path, " & ", result_image_path)
- print(" SSIM: ", ssim, " PSNR: ", psnr)
-
- averg_ssim = ssim_sum / len(file_names_list)
- averg_psnr = psnr_sum / len(file_names_list)
- print("##### Test Average SSIM: ", averg_ssim, " #####")
- print("##### Test Average PSNR: ", averg_psnr, " #####")
-
|