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

您所在的位置:网站首页 matlab计算误差的函数 图像处理之图像质量评价指标MSE(均方误差)

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

2024-07-09 07:06| 来源: 网络整理| 查看: 265

一、MSE基本定义

MSE全称为“Mean Square Error”,中文意思即为均方误差,是衡量图像质量的指标之一。计算原理为真实值与预测值的差值的平方然后求和再平均,公式如下: 在这里插入图片描述 其中, M为图像I的像素总数,N为图像K的像素总数。MSE值越小,说明图像越相似。计算MSE有四种方法:

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

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

方法三:判断图像的维度,若是三维即为RGB图像求其MSE,若是二维即为灰度图像求其MSE

方法四:同方法三,对MSE进行归一化处理

二、matlab实现MSE

1、方法一:rgbMSE.m

function msevalue = rgbMSE(image1,image2) % image1和image2大小相等 row=size(image1,1); % 图像的长 col=size(image1,2); % 图像的宽 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值相加,注意(:)的用法 msevalue=MSE_RGB/(row*col); % 求出三个通道的平均MSE值 end

2、方法二:grayMSE.m

function msevalue = grayMSE(image1,image2) % image1和image2大小相等 row=size(image1,1); % 图像的长 col=size(image1,2); % 图像的宽 image1=double(image1); image2=double(image2); msevalue=sum(sum((image1-image2).^2))/(row*col); end

3、方法三:rgbgrayMSE.m

function msevalue = rgbgrayMSE(image1,image2) % image1和image2大小相等 row=size(image1,1); % 图像的长 col=size(image1,2); % 图像的宽 % 一定要注意转为double类型 image1=double(image1); image2=double(image2); dim=length(size(image1));% 图像的维度 if dim==2 % 灰度图像只有二维,彩色图像有三维 sum_mse=sum(sum((image1-image2).^2));% 两次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加 else sum_mse=sum(sum(sum((image1-image2).^2)));% 三次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加,第三次使用sum将每个通道值的和再次相加 end msevalue=sum_mse/(row*col); end

4、方法四:NMSE.m

function nmsevalue = NMSE(image1,image2) % 在归一化MSE时,使用不到图像的长和宽,因为约分相消 % image1和image2大小相等 % row=size(image1,1); % 图像的长 % col=size(image1,2); % 图像的宽 % 一定要注意转为double类型 image1=double(image1); image2=double(image2); dim=length(size(image1));% 图像的维度 if dim==2 % 灰度图像只有二维,彩色图像有三维 sum_mse1=sum(sum((image1-image2).^2));% 两次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加 sum_mse2=sum(sum(image1.^2)); else sum_mse1=sum(sum(sum((image1-image2).^2)));% 三次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加,第三次使用sum将每个通道值的和再次相加 sum_mse2=sum(sum(sum(image1.^2))); end nmsevalue=sum_mse1/sum_mse2; end

5、主函数main.m

clc;clear;close all; rgbimage=imread('boy.jpg'); attack_rgbimage=imnoise(rgbimage,'salt & pepper',0.01); figure(1), subplot(121),imshow(rgbimage); title('原始图像'); subplot(122),imshow(attack_rgbimage); title('噪声攻击图像'); grayimage=rgb2gray(imread('boy.jpg')); attack_grayimage=imnoise(grayimage,'salt & pepper',0.01); figure(2), subplot(121),imshow(grayimage); title('原始图像'); subplot(122),imshow(attack_grayimage); title('噪声攻击图像'); % =============rgbMSE.m============= % msevalue1 = rgbMSE(rgbimage,attack_rgbimage); disp('RGB图像的均方误差:'); disp(msevalue1); % =============immse============= % msevalue2 = immse(rgbimage,attack_rgbimage);% immse函数为matlab内置函数,err = immse(X,Y)计算数组 X 和 Y 之间的均方误差 (MSE).其将所有图像当成灰度图像处理 disp('matlab函数的均方误差:'); disp(msevalue2); % =============grayMSE.m============= % msevalue3 = grayMSE(grayimage,attack_grayimage); disp('灰度图像的均方误差:'); disp(msevalue3); % =============rgbgrayMSE.m============= % msevalue4 = rgbMSE(rgbimage,attack_rgbimage); disp('RGB图像的均方误差:'); disp(msevalue4); msevalue5 = grayMSE(grayimage,attack_grayimage); disp('灰度图像的均方误差:'); disp(msevalue5); % =============NMSE.m============= % nmsevalue1 = NMSE(rgbimage,attack_rgbimage); disp('RGB图像的归一化均方误差:'); disp(nmsevalue1); nmsevalue2 = NMSE(grayimage,attack_grayimage); disp('灰度图像的归一化均方误差:'); disp(nmsevalue2);

三、实现结果分析

1、输出结果

RGB图像: 在这里插入图片描述 对应灰度图像: 在这里插入图片描述 各种方法输出的MSE值: 在这里插入图片描述 2、结果分析

1、注意每次运行主函数main.m文件,输出的MSE值都会有细微差别,可以对比上下两张图。 在这里插入图片描述 2、仅以椒盐噪声的参数为讨论,我们将主函数main.m文件椒盐噪声的方差改为0.001,可以与上方得到方差为0.01的MSE结果进行对比,可以看出得到的MSE要小很多,表示图像质量更好。

在这里插入图片描述 3、利用matlab的内置函数immse计算的灰度图像MSE比我们自己写的方法计算的灰度图像MSE要大一些。

4、本质上,方法三是方法一和方法二的结合体。

PS:MSE是我们机器学习中常使用的L2 损失



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3