SRGAN的常用的判别函数代码
其中S表示相似度,这个算子应当满足作为度量的基本性质,即
SSIM具有对称性,即交换x和y顺序不影响结果;
有界,小于等于1.;
最大值为1,只有当 x = y 时候取到,此时效果最好。
import tensorflow as tf
from keras import backend as K
def tf_log10(x):
numerator = tf.log(x)
denominator = tf.log(tf.constant(10, dtype=numerator.dtype))
return numerator / denominator #lg(x)
def PSNR(y_true, y_pred):
y_true = (y_true * 0.5 + 0.5) * 255 #反标准化,因为之前图像进行标准化,(imag/255-0.5)/0.5
y_pred = (y_pred * 0.5 + 0.5) * 255
max_pixel = 255.0
y_pred = K.clip(y_pred, 0.0, 255.0)
return 10.0 * tf_log10((max_pixel ** 2) / (K.mean(K.square(y_pred - y_true)))) #峰值信噪比 PSNR=10*lg(max^2/mse),在图像中max=255,PSNR越大,重建质量越好
def SSIM(y_true, y_pred):
y_true = (y_true * 0.5 + 0.5) * 255
y_pred = (y_pred * 0.5 + 0.5) * 255
ssim = tf.image.ssim(y_pred, y_true, 255)
return ssim #SSIM表示结构相似性