在python中計(jì)算ssim的方法(與Matlab結(jié)果一致)
如下代碼可以計(jì)算輸入的兩張圖像的結(jié)構(gòu)相似度(SSIM),結(jié)果與matlab計(jì)算結(jié)果一致
// An highlighted block
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] # valid
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 ssim_map.mean()
def calculate_ssim(img1, img2):
'''calculate SSIM
the same outputs as MATLAB's
img1, img2: [0, 255]
'''
if not img1.shape == img2.shape:
raise ValueError('Input images must have the same dimensions.')
if img1.ndim == 2:
return ssim(img1, img2)
elif img1.ndim == 3:
if img1.shape[2] == 3:
ssims = []
for i in range(3):
ssims.append(ssim(img1, img2))
return np.array(ssims).mean()
elif img1.shape[2] == 1:
return ssim(np.squeeze(img1), np.squeeze(img2))
else:
raise ValueError('Wrong input image dimensions.')
img1 = cv2.imread("Test2_HR.bmp", 0)
img2 = cv2.imread("Test2_LR2.bmp", 0)
ss = calculate_ssim(img1, img2)
print(ss)
總結(jié)
以上所述是小編給大家介紹的在python中計(jì)算ssim的方法(與Matlab結(jié)果一致),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
對python中執(zhí)行DOS命令的3種方法總結(jié)
今天小編就為大家分享一篇對python中執(zhí)行DOS命令的3種方法總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助一起。一起跟隨小編過來看看吧2018-05-05
Selenium基于PIL實(shí)現(xiàn)拼接滾動截圖
這篇文章主要介紹了Selenium基于PIL實(shí)現(xiàn)拼接滾動截圖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
用Python將IP地址在整型和字符串之間輕松轉(zhuǎn)換
這篇文章主要給大家介紹了利用Python將IP在整型和字符串之間輕松轉(zhuǎn)換的相關(guān)資料,文中還跟大家分享了Python下利用正則表達(dá)式來匹配校驗(yàn)一個(gè)字符串是否為ip地址的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03
Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python異常繼承關(guān)系和自定義異常實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
pygame中blit()參數(shù)的使用及臟矩形動畫形成的說明
這篇文章主要介紹了pygame中blit()參數(shù)的使用及臟矩形動畫形成的說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
python中的json數(shù)據(jù)和pyecharts模塊入門示例教程
JSON是一種輕量級的數(shù)據(jù)交互格式。可以按照.JSON指定的格式去組織和封裝數(shù)據(jù),這篇文章主要介紹了python中的json數(shù)據(jù)和pyecharts模塊入門,需要的朋友可以參考下2022-12-12

