PSNR
博客专区 > SVD 的博客 > 博客详情
PSNR
SVD 发表于1年前
PSNR
  • 发表于 1年前
  • 阅读 72
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

摘要: PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了。PSNR越高,压缩后失真越小。

为了进行视频处理,有必要对测量原始信号与处理信号的差别制定客观评价标准。这非常重要,比如在视频编码应用中必须测量由于压缩引起的失真。这样的理想测度应该与两个视频序列之间观察到的差别有很好的相关性。不过,寻找此类测度的过程证实这是异常困难的任务。尽管提出了多种质量测度,与感知到的视频质量相关性好的标准计算相当复杂。现在设计的大多数视频处理系统使两个视频序列和均方差(MSE)最小,对于彩色视频图像,MSE分别对每个彩色分量计算其MSE。
代替MSE,更常用峰值信噪比(peak signal-to-noise ratio,PSNR,单位dB)作为视频处理后质量测量标准。
对于大多数常见的8bit/彩色视频图像,
PSNR完全由MSE确定。PSNR较MSE更常用,因为人们想把图像质量与某个范围的PSNR相联系。根据实际经验,对于亮度像素分量,
PSNR高于40dB说明图像质量极好(即非常接近原始图像),在30—40dB通常表示图像质量是好的(即失真可以察觉但可以接受),在20—30dB说明图像质量差;最后,PSNR低于20dB图像不可接受。
计算两个序列间的PSNR没什么意义,计算每两个对应图像的PSNR然后把从各Frame获得的值取平均值是不正确的。以上主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下:

这里的MAX通常是图像的灰度级,一般就是255了。

这里就不用什么压缩算法了,就是将图像缩小再放大比较一下,下面是代码:

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;          %图像有多少灰度级
MES=sum(sum((img-imgn).^2))/(h*w);     %均方差
PSNR=20*log10(MAX/sqrt(MES));           %峰值信噪比

图像宽高分别缩小1/2再放大到原图,PSNR=30.2dB。

图像宽高分别缩小1/5再放大到原图,PSNR=24.5dB。

可以看出PSNR越高,图像和原图越接近。当然,这都是客观指标,实际评价还有主观指标,不过主观的东西就比较模糊了,每个人感觉都会不同的。

备注:

>> PSNR

PSNR(:,:,1) =

   39.5797


PSNR(:,:,2) =

   39.7485


PSNR(:,:,3) =

   39.3670
这是我求得的一张jpg图片的信噪比。

取得0.1的精度时,得到的结果如下:

>> PSNR

PSNR(:,:,1) =

   25.8999


PSNR(:,:,2) =

   27.1620


PSNR(:,:,3) =

   26.4491

取得0.2的精度时,得到的结果如下:

>> PSNR

PSNR(:,:,1) =

   29.8792


PSNR(:,:,2) =

   30.3280


PSNR(:,:,3) =

   29.9064

取得0.6的精度时,得到的结果如下:

val(:,:,1) =

   36.8631


val(:,:,2) =

   37.0826


val(:,:,3) =

   36.7029

取得0.6的精度时,得到的结果如下:

val(:,:,1) =

   42.8358


val(:,:,2) =

   43.0407


val(:,:,3) =

   42.6587

取得0.7的精度时,得到的结果如下:

val(:,:,1) =

   46.8471


val(:,:,2) =

   47.0110


val(:,:,3) =

   46.6243

取得0.8的精度时,得到的结果如下:

>> PSNR

PSNR(:,:,1) =

   53.1992


PSNR(:,:,2) =

   53.6231


PSNR(:,:,3) =

   53.3431

取得0.9的精度时,得到的结果如下:

PSNR(:,:,1) =

   66.8596


PSNR(:,:,2) =

   67.2335


PSNR(:,:,3) =

   64.1362
 

 

标签: MATLAB
共有 人打赏支持
粉丝 30
博文 185
码字总数 97009
×
SVD
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: