图像处理之图像质量评价指标MSE(均方误差)
一、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值 end2、方法二: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); end3、方法三: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); end4、方法四: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; end5、主函數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 損失
總結
以上是生活随笔為你收集整理的图像处理之图像质量评价指标MSE(均方误差)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Practical.Vim(2012.
- 下一篇: 软考相关/初级程序员上午场