一、RMSE基本定義
MSE全稱為“Root Mean Square Error”,中文意思即為均方根誤差,是衡量圖像質(zhì)量的指標(biāo)之一。計(jì)算原理為真實(shí)值與預(yù)測(cè)值的差值的平方然后求和再平均,最后開根號(hào),公式如下:
RMSE值越小,說明圖像越相似。計(jì)算RMSE有四種方法:
方法一:計(jì)算RGB圖像三個(gè)通道每個(gè)通道的MSE值再求平均值,最后開根號(hào)即可
方法二:直接使用matlab的內(nèi)置函數(shù)immse()(注意該函數(shù)將所有圖像當(dāng)成灰度圖像處理),再開根號(hào)即可
方法三:判斷圖像的維度,若是三維即為RGB圖像求其RMSE,若是二維即為灰度圖像求其RMSE
方法四:同方法三,對(duì)RMSE進(jìn)行歸一化處理
二、matlab實(shí)現(xiàn)RMSE
1、方法一:rgbRMSE.m
function rmsevalue= rgbRMSE(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 圖像的長(zhǎng)
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);
% 計(jì)算RGB圖像三個(gè)通道每個(gè)通道的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三個(gè)通道計(jì)算的MSE值相加,注意(:)的用法
rmsevalue=sqrt(MSE_RGB/(row*col)); % 在MSE的基礎(chǔ)上開根號(hào)
end
2、方法二:grayRMSE.m
function rmsevalue = grayRMSE(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 圖像的長(zhǎng)
col=size(image1,2); % 圖像的寬
image1=double(image1);
image2=double(image2);
rmsevalue=sqrt(sum(sum((image1-image2).^2))/(row*col)); % 在MSE的基礎(chǔ)上開根號(hào)
end
3、方法三:rgbgrayRMSE.m
function rmsevalue = rgbgrayRMSE(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 圖像的長(zhǎng)
col=size(image1,2); % 圖像的寬
% 一定要注意轉(zhuǎn)為double類型
image1=double(image1);
image2=double(image2);
dim=length(size(image1));% 圖像的維度
if dim==2 % 灰度圖像只有二維,彩色圖像有三維
sum_mse=sum(sum((image1-image2).^2));% 兩次使用sum()函數(shù),第一次使用sum將每行值相加,第二次使用sum將每行值的和再次相加
else
sum_mse=sum(sum(sum((image1-image2).^2)));% 三次使用sum()函數(shù),第一次使用sum將每行值相加,第二次使用sum將每行值的和再次相加,第三次使用sum將每個(gè)通道值的和再次相加
end
rmsevalue=sqrt(sum_mse/(row*col));
end
4、方法四:NRMSE.m
function nrmsevalue = NRMSE(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 圖像的長(zhǎng)
col=size(image1,2); % 圖像的寬
% 一定要注意轉(zhuǎn)為double類型
image1=double(image1);
image2=double(image2);
dim=length(size(image1));% 圖像的維度
if dim==2 % 灰度圖像只有二維,彩色圖像有三維
sum_mse1=sum(sum((image1-image2).^2));% 兩次使用sum()函數(shù),第一次使用sum將每行值相加,第二次使用sum將每行值的和再次相加
sum_mse2=sum(sum(image1.^2));
else
sum_mse1=sum(sum(sum((image1-image2).^2)));% 三次使用sum()函數(shù),第一次使用sum將每行值相加,第二次使用sum將每行值的和再次相加,第三次使用sum將每個(gè)通道值的和再次相加
sum_mse2=sum(sum(sum(image1.^2)));
end
nrmsevalue=sqrt(sum_mse1/(row*col))/sqrt(sum_mse2/(row*col));
end
5、主函數(shù)main.m
clc;clear;close all;
rgbimage=imread('ultraman.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('ultraman.jpg'));
attack_grayimage=imnoise(grayimage,'gaussian',0,0.01);
figure(2),
subplot(121),imshow(grayimage);
title('原始圖像');
subplot(122),imshow(attack_grayimage);
title('噪聲攻擊圖像');
% =============rgbRMSE.m============= %
rmsevalue1 = rgbRMSE(rgbimage,attack_rgbimage);
disp('RGB圖像的均方根誤差:');
disp(rmsevalue1);
% =============immse============= %
rmsevalue2 = sqrt(immse(rgbimage,attack_rgbimage)); % 在使用matlab內(nèi)置函數(shù)immse的基礎(chǔ)上開根號(hào)
disp('matlab函數(shù)的均方誤差:');
disp(rmsevalue2);
% =============grayRMSE.m============= %
rmsevalue3 = grayRMSE(grayimage,attack_grayimage);
disp('灰度圖像的均方根誤差:');
disp(rmsevalue3);
% =============rgbgrayRMSE.m============= %
rmsevalue4 = rgbgrayRMSE(rgbimage,attack_rgbimage);
disp('RGB圖像的均方根誤差:');
disp(rmsevalue4);
rmsevalue5 = rgbgrayRMSE(grayimage,attack_grayimage);
disp('灰度圖像的均方根誤差:');
disp(rmsevalue5);
% =============NRMSE.m============= %
rmsevalue6 = NRMSE(rgbimage,attack_rgbimage);
disp('RGB圖像的歸一化均方根誤差:');
disp(rmsevalue6);
rmsevalue7 = NRMSE(grayimage,attack_grayimage);
disp('灰度圖像的歸一化均方根誤差:');
disp(rmsevalue7);
三、實(shí)現(xiàn)結(jié)果分析
1、輸出結(jié)果
RGB圖像:
對(duì)應(yīng)灰度圖像:
各種方法輸出的RMSE值:
2、結(jié)果分析
1、注意每次運(yùn)行主函數(shù)main.m文件,輸出的RMSE值都會(huì)有細(xì)微差別,可以對(duì)比上下兩張圖。
2、僅以高斯噪聲的參數(shù)為討論,我們將主函數(shù)main.m文件椒鹽噪聲的方差改為0.001,可以與上方得到方差為0.01的RMSE結(jié)果進(jìn)行對(duì)比,可以看出得到的RMSE要小很多,表示圖像質(zhì)量更好。
3、利用matlab的內(nèi)置函數(shù)immse計(jì)算的灰度圖像RMSE比我們自己寫的方法計(jì)算的灰度圖像RMSE要大一些。文章來源:http://www.zghlxwxcb.cn/news/detail-441274.html
4、本質(zhì)上,方法三是方法一和方法二的結(jié)合體。文章來源地址http://www.zghlxwxcb.cn/news/detail-441274.html
到了這里,關(guān)于圖像處理之圖像質(zhì)量評(píng)價(jià)指標(biāo)RMSE(均方根誤差)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!