(python)计算图像峰值信噪比-PSNR、结构相似度-SSIM

计算峰值信噪比-PSNR和结构相似度-SSIM(python实现)

说明:

PSNR(Peak Signal to Noise Ratio),取值范围为:[0,100],PSNR值越大两张图片越相似,完全相同的图像,PSNR=100。

SSIM(Structural Similarity),取值范围为:[0,1],SSIM值越大两张图片越相似,完全相同的图像,SSIM=1。

一、公式计算法计算PSNR

psnr1:计算MSE后代入公式计算
psnr2:图像归一化后计算
import cv2
import math
import numpy
def psnr1(img1, img2):
 # compute mse
 # mse = np.mean((img1-img2)**2)
 mse = numpy.mean((img1 / 1.0 - img2 / 1.0) ** 2)
 # compute psnr
 if mse < 1e-10:
 return 100
 psnr1 = 20 * math.log10(255 / math.sqrt(mse))
 return psnr1
def psnr2(img1, img2):
 mse = numpy.mean((img1 / 255.0 - img2 / 255.0) ** 2)
 if mse < 1e-10:
 return 100
 psnr2 = 20 * math.log10(1 / math.sqrt(mse))
 return psnr2
imag1 = cv2.imread("baby_hr.png")
print("imag1.shap: {}".format(imag1.shape))
imag2 = cv2.imread("baby_bicubic_x4.png")
print("imag1.shap: {}".format(imag2.shape))
# image_size = [512, 512] # 将图像转化为512*512大小的尺寸
# imag1 = cv2.resize(imag1, image_size, interpolation=cv2.INTER_CUBIC)
# imag1 = cv2.cvtColor(imag1, cv2.COLOR_BGR2GRAY) # 将图像转化为灰度图像,不是必须转,也可以使用原始的彩色图像
# imag2 = cv2.resize(imag2, image_size, interpolation=cv2.INTER_CUBIC)
# imag2 = cv2.cvtColor(imag2, cv2.COLOR_BGR2GRAY) # 将图像转化为灰度图像,不是必须转,也可以使用原始的彩色图像
res1 = psnr1(imag1, imag2)
print("res1:", res1)
res2 = psnr2(imag1, imag2)
print("res2:", res2)

二、调用skimage库计算PSNR和SSIM

from skimage import metrics
import cv2
imag1 = cv2.imread("baby_hr.png")
print("imag1.shap: {}".format(imag1.shape))
imag2 = cv2.imread("baby_bicubic_x4.png")
print("imag1.shap: {}".format(imag2.shape))
psnr = metrics.peak_signal_noise_ratio(imag1, imag2)
print('PSNR:{}'.format(psnr))
# 计算结构相似度SSIM
#ssim = metrics.structural_similarity(imag1, imag2, multichannel=True)
#print('SSIM:{}'.format(ssim))
作者:加斯顿工程师原文地址:https://blog.csdn.net/hsdujdjrjrj/article/details/127863775

%s 个评论

要回复文章请先登录注册