updates
							parent
							
								
									39f830d6e5
								
							
						
					
					
						commit
						e8eed1ad73
					
				@ -0,0 +1,34 @@
 | 
			
		||||
import cv2
 | 
			
		||||
import numpy as np
 | 
			
		||||
from scipy import signal
 | 
			
		||||
import torch
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PIL_CONVERT_COLOR = {
 | 
			
		||||
    'RGB': lambda pil_image: pil_image.convert("RGB") if pil_image.mode != 'RGB' else pil_image,
 | 
			
		||||
    'full_YCbCr': lambda pil_image: pil_image.convert("YCbCr") if pil_image.mode != 'YCbCr'  else pil_image,
 | 
			
		||||
    'full_Y': lambda pil_image: pil_image.convert("YCbCr").getchannel(0) if pil_image.mode != 'YCbCr'  else pil_image.getchannel(0),
 | 
			
		||||
    'sdtv_Y': lambda pil_image: _rgb2ycbcr(np.array(pil_image))[:,:,0] if pil_image.mode == 'RGB' else NotImplementedError(f"{pil_image.mode} to Y"),
 | 
			
		||||
    'L': lambda pil_image: pil_image.convert("L") if pil_image.mode != 'L'  else pil_image,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
def _rgb2ycbcr(img, maxVal=255):
 | 
			
		||||
    O = np.array([[16],
 | 
			
		||||
                  [128],
 | 
			
		||||
                  [128]])
 | 
			
		||||
    T = np.array([[0.256788235294118, 0.504129411764706, 0.097905882352941],
 | 
			
		||||
                  [-0.148223529411765, -0.290992156862745, 0.439215686274510],
 | 
			
		||||
                  [0.439215686274510, -0.367788235294118, -0.071427450980392]])
 | 
			
		||||
 | 
			
		||||
    if maxVal == 1:
 | 
			
		||||
        O = O / 255.0
 | 
			
		||||
 | 
			
		||||
    t = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2]))
 | 
			
		||||
    t = np.dot(t, np.transpose(T))
 | 
			
		||||
    t[:, 0] += O[0]
 | 
			
		||||
    t[:, 1] += O[1]
 | 
			
		||||
    t[:, 2] += O[2]
 | 
			
		||||
    ycbcr = np.reshape(t, [img.shape[0], img.shape[1], img.shape[2]])
 | 
			
		||||
 | 
			
		||||
    return ycbcr
 | 
			
		||||
@ -0,0 +1,46 @@
 | 
			
		||||
import cv2
 | 
			
		||||
import numpy as np
 | 
			
		||||
from scipy import signal
 | 
			
		||||
import torch
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def PSNR(y_true, y_pred, shave_border=4):
 | 
			
		||||
    target_data = np.array(y_true, dtype=np.float32)
 | 
			
		||||
    ref_data = np.array(y_pred, dtype=np.float32)
 | 
			
		||||
 | 
			
		||||
    diff = ref_data - target_data
 | 
			
		||||
    if shave_border > 0:
 | 
			
		||||
        diff = diff[shave_border:-shave_border, shave_border:-shave_border]
 | 
			
		||||
    rmse = np.sqrt(np.mean(np.power(diff, 2)))
 | 
			
		||||
 | 
			
		||||
    return 20 * np.log10(255. / rmse)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def cal_ssim(img1, img2):
 | 
			
		||||
    K = [0.01, 0.03]
 | 
			
		||||
    L = 255
 | 
			
		||||
    kernelX = cv2.getGaussianKernel(11, 1.5)
 | 
			
		||||
    window = kernelX * kernelX.T
 | 
			
		||||
 | 
			
		||||
    M, N = np.shape(img1)
 | 
			
		||||
 | 
			
		||||
    C1 = (K[0] * L) ** 2
 | 
			
		||||
    C2 = (K[1] * L) ** 2
 | 
			
		||||
    img1 = np.float64(img1)
 | 
			
		||||
    img2 = np.float64(img2)
 | 
			
		||||
 | 
			
		||||
    mu1 = signal.convolve2d(img1, window, 'valid')
 | 
			
		||||
    mu2 = signal.convolve2d(img2, window, 'valid')
 | 
			
		||||
 | 
			
		||||
    mu1_sq = mu1 * mu1
 | 
			
		||||
    mu2_sq = mu2 * mu2
 | 
			
		||||
    mu1_mu2 = mu1 * mu2
 | 
			
		||||
 | 
			
		||||
    sigma1_sq = signal.convolve2d(img1 * img1, window, 'valid') - mu1_sq
 | 
			
		||||
    sigma2_sq = signal.convolve2d(img2 * img2, window, 'valid') - mu2_sq
 | 
			
		||||
    sigma12 = signal.convolve2d(img1 * img2, window, 'valid') - mu1_mu2
 | 
			
		||||
 | 
			
		||||
    ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))
 | 
			
		||||
    mssim = np.mean(ssim_map)
 | 
			
		||||
    return mssim
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue