psnr python
时间: 2023-10-29 12:54:06 浏览: 143
PSNR(Peak Signal-to-Noise Ratio)是一种用于衡量图像质量的指标它可以用来评估压缩后的图像与原始图像之间的差异。在Python中计算PSNR有多种方法可以实现。
第一种方法是使用第三方库skimage中的封装好的psnr函数来计算。这个函数可以直接调用,只需要导入skimage.metrics中的peak_signal_noise_ratio并给出两张图像的路径,如下所示:
```python
from skimage.metrics import peak_signal_noise_ratio as psnr
from PIL import Image
import numpy as np
img1 = np.array(Image.open('original.jpg'))
img2 = np.array(Image.open('compress.jpg'))
print(psnr(img1, img2))
```
这种方法非常简单,直接调用封装好的函数即可得到PSNR的结果。
第二种方法是使用修改后的代码来计算PSNR。这段代码使用了PIL库来读取图像,并将图像转换为浮点数类型的数组。然后定义了一个psnr函数,计算图像的均方差(MSE),并根据MSE计算PSNR。最后,在主函数中调用psnr函数并打印结果。代码如下所示:
```python
from PIL import Image
import numpy as np
img1 = np.array(Image.open('original.jpg')).astype(np.float64)
img2 = np.array(Image.open('compress.jpg')).astype(np.float64)
def psnr(img1, img2):
mse = np.mean((img1-img2)**2)
if mse == 0:
return float('inf')
else:
return 20*np.log10(255/np.sqrt(mse))
print(psnr(img1, img2))
```
这种方法需要手动编写计算PSNR的代码,相比第一种方法更加灵活,可以根据需要进行修改和定制。
第三种方法是根据你最初提供的代码进行修改。这段代码与第二种方法类似,只是在计算MSE为0时返回的PSNR值不同。代码如下所示:
```python
from PIL import Image
import numpy as np
img1 = np.array(Image.open('original.jpg'))
img2 = np.array(Image.open('compress.jpg'))
def psnr(img1, img2):
mse = np.mean((img1-img2)**2)
if mse == 0:
return 100
else:
return 20*np.log10(255/np.sqrt(mse))
print(psnr(img1, img2))
```
这种方法是你最初的代码的修改版,只是在计算MSE为0时返回的PSNR值由无穷大改为100。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [【python】psnr原理简介及代码实现](https://blog.csdn.net/qq_42951560/article/details/115456471)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文