图像处理之图像质量评价指标PSNR(峰值信噪比) | 您所在的位置:网站首页 › rgb颜色越大越好吗 › 图像处理之图像质量评价指标PSNR(峰值信噪比) |
一、PSNR基本定义 PSNR全称为“Peak Signal-to-Noise Ratio”,中文意思即为峰值信噪比,是衡量图像质量的指标之一。PSNR是基于MSE(均方误差)定义,对给定一个大小为m*n的原始图像I和对其添加噪声后的噪声图像K,其MSE可定义为: 方法一:计算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)); % 两个图像的峰值信噪比 end2、方法二: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)); end3、方法三: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)); end4、主函数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图像:
1、对于RGB图像计算的PSNR值最小,两个方法计算的灰度图像的PSNR基本一样,对于YCbCr图像的Y通道的PSNR值最大。 2、注意每次运行主函数main.m文件,输出的PSNR值都会有细微差别,可以对比上下两张图。 4、仅以高斯噪声的参数为讨论,我们将主函数main.m文件的高斯噪声的方差改为0.1,可以与上方得到方差为0.001的PSNR结果进行对比,可以看出得到的PSNR要小很多。 |
CopyRight 2018-2019 实验室设备网 版权所有 |