IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 图像处理之图像质量评价指标PSNR(峰值信噪比) -> 正文阅读

[人工智能]图像处理之图像质量评价指标PSNR(峰值信噪比)

一、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:row
    for j=1:col
        MSE_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:说明图像质量极好(即非常接近原始图像)
% 3040dB:通常表示图像质量是好的(即失真可以察觉但可以接受)
% 2030dB:说明图像质量差
% 低于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要小很多。
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:28:48  更:2022-11-05 00:32:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 0:29:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码