做一个结算ssim的函数
时间: 2024-03-12 16:45:39 浏览: 128
好的,下面是一个可以计算两张图像之间SSIM相似度的Python函数:
```python
import cv2
import numpy as np
def calculate_ssim(img1, img2):
# 计算SSIM相似度
ssim = cv2.compare_ssim(img1, img2)
return ssim
def calculate_mssim(img1, img2, win_size=11, sigma=1.5, k1=0.01, k2=0.03, L=255):
# 计算MSSIM相似度
C1 = (k1 * L) ** 2
C2 = (k2 * L) ** 2
img1 = img1.astype(np.float64)
img2 = img2.astype(np.float64)
mu1 = cv2.GaussianBlur(img1, (win_size, win_size), sigma)
mu2 = cv2.GaussianBlur(img2, (win_size, win_size), sigma)
mu1_mu2 = mu1 * mu2
mu1_sq = mu1 ** 2
mu2_sq = mu2 ** 2
sigma1_sq = cv2.GaussianBlur(img1 ** 2, (win_size, win_size), sigma) - mu1_sq
sigma2_sq = cv2.GaussianBlur(img2 ** 2, (win_size, win_size), sigma) - mu2_sq
sigma12 = cv2.GaussianBlur(img1 * img2, (win_size, win_size), sigma) - mu1_mu2
num = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2))
den = ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))
ssim = np.mean(num / den)
return ssim
```
上面的代码中,calculate_ssim函数使用了cv2.compare_ssim计算两张图像之间的SSIM相似度,而calculate_mssim函数则是基于MSSIM算法实现的相似度计算函数,其中win_size表示滑动窗口的大小,sigma表示高斯核的标准差,k1和k2分别是控制相似度计算的常数,L表示像素值的范围。可以根据需要调整这些参数的值。
这两个函数的输入是待比较的两张图像,输出是它们之间的相似度分数。
阅读全文