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 列表前加 *号