赞
踩
一、MAE基本定义
MSE全称为“Mean Absolute Error”,中文意思即为平均绝对误差,是衡量图像质量的指标之一。计算原理为真实值与预测值的差值的绝对值然后求和再平均,公式如下:
MAE值越小,说明图像质量越好。计算MAE有三种方法:
方法一:计算RGB图像三个通道每个通道的绝对值再求平均值
方法二:计算灰度图像的MAE
方法三:判断图像的维度,若是三维即为RGB图像求其MAE,若是二维即为灰度图像求其MAE
二、matlab实现MAE
1、方法一:rgbMAE.m
function maevalue = rgbMAE(image1,image2) % image1和image2大小相等 row=size(image1,1); % 图像的长 col=size(image1,2); % 图像的宽 image1=double(image1); image2=double(image2); MAE_R=double(zeros(row,col)); MAE_G=double(zeros(row,col)); MAE_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 MAE_R(i,j)=abs(image1_R(i,j)-image2_R(i,j)); MAE_G(i,j)=abs(image1_G(i,j)-image2_G(i,j)); MAE_B(i,j)=abs(image1_B(i,j)-image2_B(i,j)); end end MAE_RGB=sum(MAE_R(:))+sum(MAE_G(:))+sum(MAE_B(:)); % 将RGB三个通道计算的MSE值相加,注意(:)的用法 maevalue=MAE_RGB/(row*col); % 求出三个通道的平均MSE值 end
2、方法二:grayMAE.m
function maevalue = grayMAE(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 图像的长
col=size(image1,2); % 图像的宽
image1=double(image1);
image2=double(image2);
maevalue=sum(sum(abs(image1-image2)))/(row*col); % 两次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加。否则命令行窗口疯狂输出
end
3、方法三:rgbgrayMAE.m
function maevalue = rgbgrayMAE(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_mae=sum(sum(abs(image1-image2)));% 两次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加 else sum_mae=sum(sum(sum(abs(image1-image2))));% 三次使用sum()函数,第一次使用sum将每行值相加,第二次使用sum将每行值的和再次相加,第三次使用sum将每个通道值的和再次相加 end maevalue=sum_mae/(row*col); end
4、主函数main.m
clc;clear;close all; rgbimage=imread('kid.jpg'); attack_rgbimage=imnoise(rgbimage,'gaussian',0,0.01); figure(1), subplot(121),imshow(rgbimage); title('原始图像'); subplot(122),imshow(attack_rgbimage); title('噪声攻击图像'); grayimage=rgb2gray(imread('kid.jpg')); attack_grayimage=imnoise(grayimage,'gaussian',0,0.01); figure(2), subplot(121),imshow(grayimage); title('原始图像'); subplot(122),imshow(attack_grayimage); title('噪声攻击图像'); % =============rgbMAE.m============= % maevalue1 = rgbMAE(rgbimage,attack_rgbimage); disp('RGB图像的平均绝对误差:'); disp(maevalue1); % =============grayMAE.m============= % maevalue2 = grayMAE(grayimage,attack_grayimage); disp('灰度图像的平均绝对误差:'); disp(maevalue2); % =============rgbgrayMAE.m============= % maevalue3 = rgbgrayMAE(rgbimage,attack_rgbimage); disp('RGB图像的平均绝对误差:'); disp(maevalue3); maevalue4 = rgbgrayMAE(grayimage,attack_grayimage); disp('灰度图像的平均绝对误差:'); disp(maevalue4);
三、实现结果分析
1、输出结果
RGB图像:
对应灰度图像:
各种方法输出的MAE值:
2、结果分析
1、注意每次运行主函数main.m文件,输出的MAE值都会有细微差别,可以对比上下两张图。
2、仅以高斯噪声的参数为讨论,我们将主函数main.m文件椒盐噪声的方差改为0.001,可以与上方得到方差为0.1的MSE结果进行对比,可以看出得到的MAE要小很多,表示图像质量更好。
3、本质上,方法三是方法一和方法二的结合体。
PS:MAE是我们机器学习中常使用的L1 损失
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。