设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2208|回复: 1

matlab实现PSNR

[复制链接]

10

主题

101

金钱

149

积分

入门用户

发表于 2019-12-16 15:47:23 | 显示全部楼层 |阅读模式

1.PSNR原理
PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了。PSNR越高,压缩后失真越小。这里主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下:
1.png
这里的MAX通常是图像的灰度级,一般就是255了。

2.PSNR的matlab实现代码
将图像缩小再放大比较一下,下面是代码:
  1. close all;
  2. clear all;
  3. clc;

  4. img=imread('lena.jpg');
  5. [h w]=size(img);
  6. imgn=imresize(img,[floor(h/2) floor(w/2)]);
  7. imgn=imresize(imgn,[h w]);
  8. img=double(img);
  9. imgn=double(imgn);

  10. B=8;                %编码一个像素用多少二进制位
  11. MAX=2^B-1;          %图像有多少灰度级
  12. MES=sum(sum((img-imgn).^2))/(h*w);     %均方差
  13. PSNR=20*log10(MAX/sqrt(MES));           %峰值信噪比
复制代码

PSNR越高,图像和原图越接近。

3.针对彩色图像的PSNR的matlab代码
(a)可以将分别计算R,G,B三个通道总和,最后MSE直接在原公式上多除以3就行(opencv官方代码是这么做的,与matlab直接计算结果是一样的)。
(b)将R,G,B格式转换为YCbCr,只计算Y分量(亮度分量),结果会比直接计算要高几个dB。
贴代码,这里是将图片格式转成YCbCr(只计算Y分量):
  1. function [PSNR, MSE] = psnr(X, Y)
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. %
  4. % 计算峰值信噪比PSNR
  5. % 将RGB转成YCbCr格式进行计算
  6. % 如果直接计算会比转后计算值要小2dB左右(当然是个别测试)
  7. %
  8. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  9. if size(X,3)~=1   %判断图像时不是彩色图,如果是,结果为3,否则为1
  10.    org=rgb2ycbcr(X);
  11.    test=rgb2ycbcr(Y);
  12.    Y1=org(:,:,1);
  13.    Y2=test(:,:,1);
  14.    Y1=double(Y1);  %计算平方时候需要转成double类型,否则uchar类型会丢失数据
  15.    Y2=double(Y2);
  16. else              %灰度图像,不用转换
  17.      Y1=double(X);
  18.      Y2=double(Y);
  19. end

  20. if nargin<2   
  21.    D = Y1;
  22. else
  23.   if any(size(Y1)~=size(Y2))
  24.     error('The input size is not equal to each other!');
  25.   end
  26. D = Y1 - Y2;
  27. end
  28. MSE = sum(D(:).*D(:)) / numel(Y1);
  29. PSNR = 10*log10(255^2 / MSE);
复制代码


然后写主函数
  1. X= imread('C:\Users\Administrator\Desktop\noise_image.jpg');
  2. Y= imread('C:\Users\Administrator\Desktop\actruel_image.jpg');
  3. psnr(X, Y)
复制代码

2

主题

2万

金钱

3万

积分

专家用户

发表于 2019-12-16 17:10:39 | 显示全部楼层
很好例子,感谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表