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

article/2025/11/7 2:25:34

一、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: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值相加,注意(:)的用法
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将每行值的和再次相加
elsesum_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));
elsesum_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)计算数组 XY 之间的均方误差 (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 损失


http://chatgpt.dhexx.cn/article/YKHDaS5H.shtml

相关文章

损失函数——均方误差(Mean Squared Error,MSE)

均方误差(Mean Squared Error,MSE):MSE是回归任务中常用的损失函数,它衡量模型预测值与实际值之间的平均平方误差。 具体来说,MSE的计算公式如下: 其中,n是样本数量,xi是…

已解决OSError: [WinError 6] 句柄无效。

已解决Exception ignored in: <bound method Popen.__del__ of <subprocess.Popen object at 0x00000194C27C4BE0>> Traceback (most recent call last): File “D:\ProgramData\Anaconda3\lib\subprocess.py”, line 768, in __del__ self._internal_poll(_deadst…

解决OSError: [Errno 98] Address already in use问题

学习python socket编程&#xff0c;运行服务器端时报错OSError: [Errno 98] Address already in use 1、使用命令sudo netstat -tunlp 查看绑定正在使用的端口号&#xff0c;可以看到12345端口号被963进程占用&#xff0c;这里需要加上sudo或者切换到管理员用户运行&#xff0…

oserror: .txt not found 解决方案

oserror: .txt not found 解决方案 等我彻底上手了我一定要做一个最最最适合新手菜鸟的教程啊啊啊 学习的过程真是踩坑无数啊 归根结底还是因为菜&#xff0c;使用习惯不好 说正事&#xff0c;最初用pytorch的时候访问txt文件&#xff0c;提示找不到文件或者路径&#xff0…

报错OSError: [Errno 22] Invalid argument 的一种解决方法

今天写作业的时候突然读不了txt文件了&#xff0c;查了很多地方&#xff0c;已开始写相对路径之后显示的是如下报错&#xff0c;仔细检查之后并没有发现代码问题。 查找资料仔细检查之后依旧无法解决&#xff0c;决定改用写绝对路径。 填写绝对路径时又报了如下错误&#xff1…

OSError[Errno 48]:Address already in use解决方法

Python flask OSError[Errno 48]:Address already in use 建立Flask项目filename.py后&#xff0c;运行该项目&#xff0c;报错内容如下&#xff1a; 意思是地址已被使用&#xff0c;搜索相关问题后发现是因为&#xff0c;你曾启动过相同或者类似的服务占用了这个端口&#x…

Python报错:OSError: cannot open resource

Python报错&#xff1a;OSError: cannot open resource 今天借助Python第三方库写了一个简单的生成词云的编程&#xff0c;但在使用wordcloud生成词云过程中&#xff0c;出现了OSError: cannot open resource错误&#xff0c;通过断点调试并查看了一些网上的解决方法 找到了原因…

【解决】OSError: cannot write mode F as PNG

问题: 将图像所表示的矩阵转换为图像并保存为 png 格式时报错: OSError: cannot write mode F as PNG&#xff0c;报错信息如下: 原因分析: 这里的 mode F 意思是图像中浮点类型的像素值&#xff0c;原因是我代码中的 img 数组是 float 类型的&#xff0c;而图像中每个像素的…

出现Python OSError: [Errno 22] Invalid argument的来龙去脉

参考解决办法&#xff1a;https://blog.csdn.net/weixin_44952395/article/details/105289460 问题描述&#xff1a; 今天我在读取文本文档txt内的文件路劲时总是报错&#xff0c;如下图所示 上网找了好几种解决办法&#xff0c;其中我在本文开头所述的参考办法比较有用。 发…

彻底解决 OSError: [WinError 127] 找不到指定的程序。

原创文章&#xff0c;转载请注明出处&#xff01; 在使用pip安装torch_geometric包时&#xff0c;运行时会发现报错&#xff1a; ModuleNotFoundError: No module named torch_sparse 于是当我又装了torch_sparse时&#xff0c;发现报错&#xff1a; OSError: [WinError 127…

ERROR: Could not install packages due to an OSError...解决方法

ERROR: Could not install packages due to an OSError…解决办法 ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: ‘c:\users\lenovo\python\lib\site-packages\~umpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_am…

Python OSError: [Errno 22] Invalid argument:的出现和解决

1、在学习从文件读取数据中&#xff0c;写了个示例代码&#xff0c;读取不在同一个目录的file.txt&#xff0c;运行后报这个Python OSError: [Errno 22] Invalid argument:错误&#xff1a; &#xff08;1&#xff09;、首先&#xff0c;在F盘的python_stu中新增了一个file.tx…

OSError: [Errno 22] Invalid argument错误解决方案

在做文件读取写入操作的时候遇见OSError: [Errno 22] Invalid argument: F:\\pythonProject\\Api\\common\\2022-03-11_15:37:23test.txt的报错&#xff0c;单独的打印出文件路径明明是正确&#xff0c;但使用python open()函数读写文件时就会报该错误 错误代码&#xff1a; …

OSError: [Errno 22] Invalid argument问题解决

OSError: [Errno 22] Invalid argument问题解决 问题描述解决方法那么问题出在哪了?总结 问题描述 在做SSD目标检测算法的时候&#xff0c;在predict.py文件中遇到了这么一个报错的问题。 // ERROR Traceback (most recent call last):File "D:/ssd-keras-fromCSDN-Par…

OSError解决办法

OSError: [WinError 1455] 页面文件太小&#xff0c;无法完成操作。 Error loading “E:\devInstall\pytorch\Anaconda3\envs\pytorch\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll” or one of its dependencies. 解决办法 在进行classSR训练的时候train.py报错…

已解决OSError: [Errno 22] Invalid argument

已解决OSError: [Errno 22] Invalid argument 文章目录 报错代码报错翻译报错原因解决方法千人全栈VIP答疑群联系博主帮忙解决报错 报错代码 粉丝群里面的一个粉丝用Python读取文件的时候&#xff0c;发生了报错&#xff08;跑来找我求助&#xff0c;然后顺利帮助他解决了&…

OSError: [WinError 1455] 解决方案

【问题描述】 当时重装了一下系统&#xff0c;后面在跑深度学习程序时&#xff0c;报了该错误。 【原因分析】 我的python、anaconda等装在D盘&#xff0c;而电脑默认情况下是没有给D盘分配虚拟内存的, 所以在跑程序时, 就报了OSError的错误。 【解决方法】 只要给D盘分配…

Python文件操作错误:OSError: [Errno 22] Invalid argument(关于Windows下文件名中的敏感字符)

记录一点小知识&#xff0c;如果有帮助&#xff0c;还请留下脚印~~ 为啥会写这篇文章呢&#xff0c;简单说一下&#xff0c;我在学习如何使用爬虫爬取小视频&#xff0c;然后将小视频进行持久化存储&#xff0c;最后发现报错了&#x1f62e;我一看&#xff0c;是OSError&#x…

HTTP请求幂等性

理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中&#xff0c;我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢&#xff1f;我认为很大程度上应归功于简单有效的HTTP协议。HTTP协…

HTTP幂等性及GET、POST、PUT、DELETE的区别

本文转载自&#xff1a;http://www.cnblogs.com/weidagang2046/archive/2011/06/04/2063696.html Programming.log - a place to keep my thoughts on programming 理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企…