psnr和ssim的python实现
时间: 2023-06-16 21:02:18 浏览: 139
PSNR 和 SSIM 的 Python 实现可以使用现成的库,例如 scikit-image。
PSNR 的实现代码如下:
```
from skimage import metrics
import numpy as np
def psnr(img1, img2):
mse = metrics.mean_squared_error(img1, img2)
return 10 * np.log10(255**2 / mse)
```
SSIM 的实现代码如下:
```
from skimage import metrics
import numpy as np
def ssim(img1, img2):
return metrics.structural_similarity(img1, img2, multichannel=True)
```
请注意,img1 和 img2 必须是 NumPy 数组,且数据类型必须是 float32。
相关问题
psnr和ssim的python
实现代码可以通过使用OpenCV库来实现,以下是一个简单的示例代码:
```python
import cv2
# 读取两张图片
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 计算PSNR
psnr = cv2.PSNR(img1, img2)
# 计算SSIM
ssim = cv2.SSIM(img1, img2)
# 输出结果
print("PSNR:", psnr)
print("SSIM:", ssim)
```
请注意,这只是一个简单的示例代码,实际应用中可能需要进行更多的处理和优化。
psnr和ssim的python代码
下面是PSNR和SSIM的Python代码:
PSNR:
```python
import cv2
import numpy as np
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return 100
PIXEL_MAX = 255.0
return 20 * np.log10(PIXEL_MAX / np.sqrt(mse))
img1 = cv2.imread("image1.jpg")
img2 = cv2.imread("image2.jpg")
print("PSNR value is {}".format(psnr(img1, img2)))
```
SSIM:
```python
import cv2
import numpy as np
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("image1.jpg")
img2 = cv2.imread("image2.jpg")
print("SSIM value is {}".format(ssim(img1, img2)))
```