前段時間對影象壓縮演算法的評價中涉及到對影象差異的衡量,選擇了psnr指標,但是實踐中發現細小的差異僅出現於區域性,全域性的差異不夠敏感,故改進到在區域性影象上計算,**很簡單,記錄如下:
#coding=utf-8
import numpy as np
import math
from pil import image
import datetime as dt
class
psnr
(object):
def__init__
(self,size,gridsize)
: self.size=size
self.gridsize=gridsize
self.widemount=self.size[0]
self.highmount=self.size[1]
self.gridcount=self.widemount*self.highmount
defimg2regular
(self,img)
:#將原始影象轉化為規則內影象
img_ori=img.resize(self.size)
img_regular=img_ori.convert(
'rgb'
)return img_regular
defimg2grid
(self,img)
:#分割影象
wide,high=self.size
gridwide,gridhigh=self.gridsize
wideremain=self.size[0]
%self.gridsize[0]
highremain=self.size[1]
%self.gridsize[1]
wide=wide-wideremain
high=high-highremain
gridimg=
for i in
range(0
,self.widemount+1)
:for j in
range(0
,self.highmount+1)
:if i<=self.widemount and j<=self.highmount:
localimg=img.crop(
(i*self.gridsize[0]
,j*self.gridsize[1]
,(i+1)
*self.gridsize[0]
,(j+1)
*self.gridsize[1]
)).copy(
)elif i==self.widemount+
1and j<=self.highmount:
localimg=img.crop(
(self.size[0]
-self.gridsize[0]
,j*self.gridsize[1]
,self.size[0]
,(j+1)
*self.gridsize[1]
)).copy(
)elif i<=self.widemount and j==self.highmount+1:
localimg=img.crop(
(i*self.gridsize[0]
,self.size[1]
-self.gridsize[1]
,(i+1)
*self.gridsize[0]
,self.size[1]
)).copy(
)elif i==self.widemount+
1and j==self.highmount+1:
localimg=img.crop(
(self.size[0]
-self.gridsize[0]
,self.size[1]
-self.gridsize[1]
,self.size[0]
,self.size[1]
)).copy(
)return gridimg
defpsnr
(self,img1,img2)
:#計算影象psnr
mse=np.mean(
(np.array(img1)
-np.array(img2))**
2)if mse<
1.0e-10
:return
100 psnr=
10*math.log10(
255.0**2
/mse)
return psnr
defpsnrsimilarity
(self,image1,image2)
:#計算相似性
psnrmean=
sum(self.psnr(img1,img2)
for img1,img2 in
zip(self.img2grid(image1)
,self.img2grid(image2)))
/self.gridcount
psnrmin=
min(self.psnr(img1,img2)
for img1,img2 in
zip(self.img2grid(image1)
,self.img2grid(image2)))
return
(psnrmean,psnrmin)
defreadimg
(self,path1,path2)
:#從硬碟讀取資料,並進行psnr計算
超解析度中PSNR的計算與bicubic插值
正確計算psnr對於做超解析度研究是很重要的,因為psnr是被廣泛使用的metric之一。同時bicubic插值演算法也很重要,因為目前主流的有監督超解析度演算法中,需要構成hr lr訓練對,而這個對的構成方法需要使用到bicubic插值。psnr的定義很簡單,m se 1h w i 1h j 1w...
計算psnr函式 一些損失函式的奇淫怪想
公式 以單個樣本舉例 假設a z where z wx b 利用sgd演算法優化損失函式,通過梯度下降法改變引數從而最小化損失函式 鏈式原則對兩個引數權重和偏置進行求偏導 mse作為畫素級的損失函式,只考慮了畫素之前的差距,而並沒有考慮整張影象的特徵分布,比如在影象超解析度任務中,可能得到很高的ps...
區域網內檢索計算機
本例實現的是檢索區域網內的計算機。程式設計思路 首先,由於本例實現的是檢索區域網內的計算機,所以首先加入網路的支援,在對框類的標頭檔案中包含 winsock2.h 在工程設定對話方塊中連線ws2 32.lib和mpr.lib.其次,呼叫wsastarup,載入所需要的winsockdll版本,隨後呼...