1. 程式人生 > >matlab 實現影象PSNR的小程式

matlab 實現影象PSNR的小程式

PSNR,峰值信噪比,通常用來評價一幅影象壓縮後和原影象相比質量的好壞,當然,壓縮後圖像一定會比原影象質量差的,所以就用這樣一個評價指標來規定標準了。PSNR越高,壓縮後失真越小。這裡主要定義了兩個值,一個是均方差MSE,另一個是峰值信噪比PSNR,公式如下:


這裡的MAX通常是影象的灰度級,一般就是256了。 
這裡就不用什麼壓縮演算法了,就是將影象縮小再放大比較一下,下面是程式碼

<pre name="code" class="html">close all;
clear all; 
clc;  
img=imread('lena.jpg'); 
[h,w]=size(img); 
imgn=imresize(img,[floor(h/2) floor(w/2)]);
imgn=imresize(imgn,[h w]); 
img=double(img); 
imgn=double(imgn);  
B=8;    %編碼一個畫素用多少二進位制位 
MAX=2^B-1;       %影象有多少灰度級 
MSE=sum(sum((img-imgn).^2))/(h*w);     %均方差 
PSNR=20*log10(MAX/sqrt(MSE));     %峰值信噪比 
figure,imshow(imgn,[0,255]);title(sprintf(' PSNR: %.3f dB ', PSNR));



程式很簡單,是做為其他影象處理,如去噪、修復、壓縮等演算法優劣的一個驗證指標。