PSNR局域化計算

2021-10-03 14:23:38 字數 4040 閱讀 4947

前段時間對影象壓縮演算法的評價中涉及到對影象差異的衡量,選擇了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版本,隨後呼...