Python 实现图片质量比较之PSNR和SSIM
图片质量评价
- Python 实现图片质量比较之PSNR和SSIM
- PSNR
- skimge 实现
- 完示例代码
- TensorFlow 实现
- SSIM
- 代码实现
Python 实现图片质量比较之PSNR和SSIM
PSNR
PSNR,Peak Signal-to-Noise Ratio,峰值信噪比,是一个表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值的工程术语。由于许多信号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。
PSNR 是用于衡量图像质量的指标,比如在图像压缩、超分辨率重建图像等领域,其是一种重要的指标.
PSNR 常简单的通过均方误差(MSE)来定义. 比如,对于两张单色图像 I 和 K,如果一个为另外一个的噪声近似,则二者之间的均方误差定义为:
而峰值信噪比PSNR 的定义为:
其中,MAXIMAX_IMAXI 表示图像点颜色的最大数值,如果每个采样点用 8 位表示,则最大数值为 255.
更通用的表示是,如果每个采样点用 B 位线性脉冲编码调制表示,则 MAXI=2B−1MAX_I = 2^B - 1MAXI=2B−1,即:
类似地,对于每点有 RGB 三个值的彩色图像来说,PSNR 的定义也是类似的,只是均方误差是所有方差之和除以图像尺寸再除以3。
MSE 越小,则 PSNR 越大;PSNR越大,代表着图像质量越好。
skimge 实现
安装 skimage 库
pip install scikit-imageskimage 库也提供了相关的计算实现.
skimage.measure.compare_psnr
完示例代码
import cv2 from skimage.metrics import mean_squared_error from skimage.metrics import peak_signal_noise_ratioimg1 = cv2.imread('imgPred0.png') img2 = cv2.imread('imgPred01.png')MSE = mean_squared_error(img1, img2) PSNR = peak_signal_noise_ratio(img1, img2)print('MSE: ', MSE) print('PSNR: ', PSNR)TensorFlow 实现
TensorFlow 中已经包含 PSNR 计算的函数,可直接采用.
tf.image.psnr
SSIM
SSIM,Structural Similarity,结构相似性. 也是衡量两幅图片相似性的指标.
结构相似性的基本原理是,认为自然图像时高度结构化的,即相邻像素间具有很强的关联性,而这种关联性表达了场景中物体的结构信息. 人类视觉系统对于图像已经具有很强的理解与信息抽取能力,所以在衡量图像质量时,结构性失真是很重要的考量.
代码实现
同样还是使用 skimage 库进行代码的实现
import cv2 from skimage.measure import compare_ssimimg1 = cv2.imread('imgPred0.png') img2 = cv2.imread('imgPred01.png')SSIM = structural_similarity(img1, img2, multichannel=True)print('SSIM: ', SSIM)Ref
总结
以上是生活随笔为你收集整理的Python 实现图片质量比较之PSNR和SSIM的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: PyTorch 读取图像图片数据
- 下一篇: Python 列表前加 *号