峰值信噪比(PSNR), 一種評價影象的客觀標準。它具有侷限性,PSNR是“PeakSignaltoNoiseRatio”的縮寫。peak的中文意思是頂點。而ratio的意思是比率或比列的。整個意思就是到達噪音比率的頂點訊號,psnr一般是用於最大值訊號和背景噪音之間的一個工程專案。通常在經過影像壓縮之後,通常輸出的影像都會在某種程度與原始影像不同。為了衡量經過處理後的影像品質,我們通常會參考PSNR值來衡量某個處理程式能否令人滿意。它是原影象與被處理影象之間的均方誤差相對於(2^n-1)^2的對數值(訊號最大值的平方,n是每個取樣值的位元數),它的單位是dB。
本經驗將介紹使用opencv對psnr演算法的實現。
方法/步驟
引入標頭檔案、庫檔案:
#include
宣告psnr函式,這裡的imagePath為需要進行psnr檢測圖片的路徑:
int psnr(char * imagePath);
psnr函式體,將返回影象的psnr值:
int psnr(char * imagePath){ double t; t=getTickCount(); IplImage* img = cvLoadImage(imagePath,0); int height=img->height; int width=img->width; int step=img->widthStep; uchar *data=(uchar *)img->imageData; int i,j; double sum=0; for(i=0;i
注意事項
在函式體裡添加了計時函式,可以看到psnr的計算消耗非常低。