采用 PSNR(Peak Signal-to-Noise Ratio)和 SSIM(Structural Similarity Index)两个指标对一个算法进行评价,这个算法的功能是将黑白人像照片进行彩色化,给出完整的评价代码
时间: 2024-05-07 07:18:58 浏览: 16
以下是使用 Python 语言实现的 PSNR 和 SSIM 评价代码:
```python
import cv2
import numpy as np
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return float('inf')
max_pixel = 255.0
psnr = 20 * np.log10(max_pixel / np.sqrt(mse))
return psnr
def ssim(img1, img2):
C1 = (0.01 * 255) ** 2
C2 = (0.03 * 255) ** 2
img1 = img1.astype(np.float64)
img2 = img2.astype(np.float64)
kernel = cv2.getGaussianKernel(11, 1.5)
window = np.outer(kernel, kernel.transpose())
mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5]
mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5]
mu1_sq = mu1 ** 2
mu2_sq = mu2 ** 2
mu1_mu2 = mu1 * mu2
sigma1_sq = cv2.filter2D(img1 ** 2, -1, window)[5:-5, 5:-5] - mu1_sq
sigma2_sq = cv2.filter2D(img2 ** 2, -1, window)[5:-5, 5:-5] - mu2_sq
sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2
ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))
return np.mean(ssim_map)
# 读取原始黑白照片和彩色化后的照片
img1 = cv2.imread('grayscale_photo.jpg')
img2 = cv2.imread('colorized_photo.jpg')
# 将图像转换为 YUV 格式
img1_yuv = cv2.cvtColor(img1, cv2.COLOR_BGR2YUV)
img2_yuv = cv2.cvtColor(img2, cv2.COLOR_BGR2YUV)
# 取出 Y 通道
img1_y = img1_yuv[:,:,0]
img2_y = img2_yuv[:,:,0]
# 计算 PSNR 和 SSIM
print("PSNR:", psnr(img1_y, img2_y))
print("SSIM:", ssim(img1_y, img2_y))
```
其中,`grayscale_photo.jpg` 是原始的黑白人像照片,`colorized_photo.jpg` 是使用算法彩色化后的照片。可以将两张照片放在同一目录下,并将代码保存为 `.py` 文件,然后在命令行中运行该文件即可输出 PSNR 和 SSIM 的值。