一、PSNR基本定义

PSNR全称为“Peak Signal-to-Noise Ratio”,中文意思即为峰值信噪比,是衡量图像质量的指标之一。PSNR是基于MSE(均方误差)定义,对给定一个大小为m*n的原始图像I和对其添加噪声后的噪声图像K,其MSE可定义为:

则PSNR可定义为:

其中MAXI为图像的最大像素值,PSNR的单位为dB。若每个像素由8位二进制表示,则其值为2^8-1=255。但注意这是针对灰度图像的计算方法,若是彩色图像,通常可以由以下方法进行计算:

方法一:计算RGB图像三个通道每个通道的MSE值再求平均值,进而求PSNR

方法二:直接使用matlab的内置函数psnr()(注意该函数将所有图像当成灰度图像处理)。

方法三:将图像转为YCbCr格式,只计算Y分量即亮度分量的PSNR。

二、PSNR评价标准

PSNR值越大,表示图像的质量越好,一般来说:

(1)高于40dB:说明图像质量极好(即非常接近原始图像)
(2)30—40dB:通常表示图像质量是好的(即失真可以察觉但可以接受)
(3)20—30dB:说明图像质量差
(4)低于20dB:图像质量不可接受

三、matlab实现PSNR

1、方法一:rgbPSNR.m

function psnrvalue = rgbPSNR(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 图像的长
col=size(image1,2); % 图像的宽
% 注意不加下面两行代码,得出的最终PSNR值将比加上偏大
image1=double(image1);
image2=double(image2);MSE_R=double(zeros(row,col));
MSE_G=double(zeros(row,col));
MSE_B=double(zeros(row,col));
image1_R=image1(:,:,1);  % R通道
image1_G=image1(:,:,2);  % G通道
image1_B=image1(:,:,3);  % B通道
image2_R=image2(:,:,1);
image2_G=image2(:,:,2);
image2_B=image2(:,:,3);
% 计算RGB图像三个通道每个通道的MSE值再求平均值
for i=1:rowfor j=1:colMSE_R(i,j)=(image1_R(i,j)-image2_R(i,j))^2;MSE_G(i,j)=(image1_G(i,j)-image2_G(i,j))^2;MSE_B(i,j)=(image1_B(i,j)-image2_B(i,j))^2;end
end
MSE_RGB=sum(MSE_R(:))+sum(MSE_G(:))+sum(MSE_B(:)); % 将RGB三个通道计算的MSE值相加,注意(:)的用法
MSE=MSE_RGB/(row*col);
B=8;         % 编码一个像素所用二进制位数
MAX=2^B-1;   % 图像的灰度级数
psnrvalue=20*log10(MAX/sqrt(MSE)); % 两个图像的峰值信噪比
end

2、方法二:grayPSNR.m

function psnrvalue = grayPSNR(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 图像的长
col=size(image1,2); % 图像的宽
image1=double(image1);
image2=double(image2);
B=8;         % 编码一个像素所用二进制位数
MAX=2^B-1;   % 图像的灰度级数
MSE=sum(sum((image1-image2).^2))/(row*col);     % 均方差
psnrvalue=20*log10(MAX/sqrt(MSE));
end

3、方法三:ycbcrPSNR.m

function psnrvalue = ycbcrPSNR(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 图像的长
col=size(image1,2); % 图像的宽
% rgb2ycbcr函数将 RGB 颜色值转换为 YCbCr 颜色空间
ycbcrimage1=rgb2ycbcr(image1);
ycbcrimage2=rgb2ycbcr(image2);
% 取出Y通道
ycbcrimage1_y=ycbcrimage1(:,:,1);
ycbcrimage2_y=ycbcrimage2(:,:,1);ycbcrimage1_y=double(ycbcrimage1_y);
ycbcrimage2_y=double(ycbcrimage2_y);B=8;         % 编码一个像素所用二进制位数
MAX=2^B-1;   % 图像的灰度级数
MSE=sum(sum((ycbcrimage1_y-ycbcrimage2_y).^2))/(row*col);     % 均方差
psnrvalue=20*log10(MAX/sqrt(MSE));
end

4、主函数main.m

clc;clear;close all;
rgbimage=imread('boy.jpg');
attack_rgbimage=imnoise(rgbimage,'gaussian',0,0.001);
figure(1),
subplot(121),imshow(rgbimage);
title('原始图像');
subplot(122),imshow(attack_rgbimage);
title('噪声攻击图像');grayimage=rgb2gray(imread('boy.jpg'));
attack_grayimage=imnoise(grayimage,'gaussian',0,0.001);
figure(2),
subplot(121),imshow(grayimage);
title('原始图像');
subplot(122),imshow(attack_grayimage);
title('噪声攻击图像');% =====================PSNR Test===================== %
% 高于40dB:说明图像质量极好(即非常接近原始图像)
% 30—40dB:通常表示图像质量是好的(即失真可以察觉但可以接受)
% 20—30dB:说明图像质量差
% 低于20dB:图像质量不可接受% 注意每次运行产生的PSNR值都会一点点差别psnrvalue = rgbPSNR(rgbimage,attack_rgbimage);% 方法一disp('RGB图像的峰值信噪比:');disp(psnrvalue);psnrvalue1 = psnr(rgbimage,attack_rgbimage);% 方法二(psnr函数为matlab内置函数,但其将所有图像当成灰度图像处理,得出的PSNR值偏大)disp('matlab函数的峰值信噪比:');disp(psnrvalue1);psnrvalue2 = grayPSNR(grayimage,attack_grayimage);% 方法二disp('灰度图像的峰值信噪比:');disp(psnrvalue2);psnrvalue3 = ycbcrPSNR(rgbimage,attack_rgbimage);% 方法三disp('YCbCr图像Y通道的峰值信噪比:');disp(psnrvalue3);

四、实现结果分析

1、输出结果

RGB图像:


对应灰度图像:

各种方法输出的PSNR值:

2、结果分析

1、对于RGB图像计算的PSNR值最小,两个方法计算的灰度图像的PSNR基本一样,对于YCbCr图像的Y通道的PSNR值最大。

2、注意每次运行主函数main.m文件,输出的PSNR值都会有细微差别,可以对比上下两张图。

3、对于以上提出的三种方法,不论使用哪种方法计算PSNR都无所谓,只要保持实验部分都使用同一种方法即可。但是一般方法一和方法三使用比较多。

4、仅以高斯噪声的参数为讨论,我们将主函数main.m文件的高斯噪声的方差改为0.1,可以与上方得到方差为0.001的PSNR结果进行对比,可以看出得到的PSNR要小很多。

图像处理之图像质量评价指标PSNR(峰值信噪比)相关推荐

  1. 图像的评价指标之PSNR——峰值信噪比

    图像的评价指标之PSNR--峰值信噪比 文章目录: 以及Python的实现 参考: https://blog.csdn.net/szfhy/article/details/49615833 https ...

  2. PSNR峰值信噪比matlab实现

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

  3. 【图像相关】图像质量评价指标 PSNR 和 SSIM

    文章目录 PSNR SSIM 参考链接 PSNR PSNR 是 "Peak Signal to Noise Ratio" 的缩写,即峰值信噪比,是一种评价图像的客观标准,它具有局限 ...

  4. 图像质量评价指标PSNR和SSIM

    由于是从Word文档直接复制过来,其中格式如果乱码或者不通顺,请评论区告知我 参考链接: https://blog.csdn.net/dxpqxb/article/details/85071338 h ...

  5. 【图像处理】——图像质量评价指标信噪比(PSNR)和结构相似性(SSIM)(含原理和Python代码)

    目录 一.信噪比(PSNR) 1.信噪比的原理与计算公式 2.Python常规代码实现PSNR计算 3.TensorFlow实现PSNR计算 4.skimage实现PSNR计算 5.三种方法计算的结果 ...

  6. 图像处理之图像质量评价指标MSE(均方误差)

    一.MSE基本定义 MSE全称为"Mean Square Error",中文意思即为均方误差,是衡量图像质量的指标之一.计算原理为真实值与预测值的差值的平方然后求和再平均,公式如下 ...

  7. 图像处理之图像质量评价指标RMSE(均方根误差)

    一.RMSE基本定义 MSE全称为"Root Mean Square Error",中文意思即为均方根误差,是衡量图像质量的指标之一.计算原理为真实值与预测值的差值的平方然后求和再 ...

  8. matlab snr mse,MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM...

    今天的作业是求两幅图像的MSE.SNR.PSNR.SSIM.代码如下: clc; close all; X = imread('q1.tif');% 读取图像 Y=imread('q2.tif'); ...

  9. 数字图像处理,若干图像质量评价指标的实现

    首先几个最基本的指标: a)灰度图的均值 即一幅图像所有像素的均值,它表明了该图像是否偏暗或者偏亮,比较小的话就偏暗,较大则亮. b)灰度图的标准差 首先从图像质量大的分类方法来看,可分为主管评价和客 ...

  10. 两幅相同大小图像的相似程度的两个评价指标-PSNR和SSIM

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像相似度主要是对两幅图像内容的相似程度进行打分 ...

最新文章

  1. debian 9/ ubuntu 添加swap分区
  2. how to write academic english well?
  3. QT入门安装篇+helloworld(辛酸血泪)
  4. logstash redis kafka传输 haproxy日志
  5. C#中Monitor和Lock的用法区别
  6. Oracle常用存储过程写法
  7. 点击编辑table变为可编辑状态
  8. Python破解协议密码
  9. pytorch搭建LSTM神经网络预测电力负荷
  10. c语言实现 字符串替换函数,C语言函数实现 字符串替换
  11. 鼠标移动到指定行会变色
  12. One Pixel Attack(对抗攻击) —— 使用差分进化算法寻找最优解
  13. 【c语言进阶】大家是否对数据的存储不甚了解?本篇将揭开数据存储的神秘面纱*^____^*数据的存储(一)知识点讲解
  14. 谷歌搜索留痕组合工具,批量生成
  15. NetApp AFF C190 利用经济实惠的全闪存存储打造现代化 IT
  16. “爱心银行”让爱心增值(转自中国文明网)
  17. [Software]Vivado 2018.2 安装及激活教程
  18. 关于QXDM的安装,解决Win7下QIK报错的问题
  19. 基于微信小程序的教务管理系统(教务管理小程序)
  20. 【D3.js数据可视化系列教程】(二十八)--弦图

热门文章

  1. 清风数学建模学习笔记——层次分析法(AHP)
  2. Halcon基础操作
  3. 歌谷服务套件gms_谷歌gms框架安装器下载-安卓9谷歌服务框架app安装-游戏大玩家...
  4. hightopo六面体贴图
  5. UReport2初体验
  6. 深度学习实现代码汇总
  7. win10跳过计算机密码,Win10怎么取消开机密码?Win10如何跳过开机密码?
  8. 打印机外接无线服务器,打印机配置外接网卡实现网络打印,请问怎样设置,越祥细越好,很急希望多帮忙...
  9. 如何Ping特定端口号
  10. Windows Server 启用或关闭ping端口