이미지 처리를 위한 이미지 품질 평가 지표 RMSE(제곱 평균 오차)

1. RMSE의 기본 정의

MSE의 정식 명칭은 "Root Mean Square Error"로, 중국어로 Root Mean Square Error를 뜻하며, 이미지 품질을 측정하는 지표 중 하나입니다. 계산 원리는 실제 값과 예측 값의 차이를 제곱한 후 합산하고 평균을 낸 후 근을 구하는 것으로 공식은 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.
RMSE 값이 작을수록 이미지가 유사하다는 것을 의미합니다. RMSE를 계산하는 방법에는 네 가지가 있습니다.

방법 1 : RGB 영상의 3개 채널 각 채널의 MSE 값을 계산하고 평균을 낸 후 최종적으로 루트 부호를 구한다.

방법 2 : matlab의 내장 함수 immse()를 직접 사용한 다음(이 함수는 모든 이미지를 회색조 이미지로 처리함) 루트 기호를 엽니다.

방법 3 : 영상의 차원을 결정하며, 3차원 영상이면 RGB 영상으로 RMSE를 구하고, 2차원 영상이면 회색조 영상으로 RMSE를 계산한다.

방법 4 : 방법 3과 동일, RMSE 정규화

2. Matlab은 RMSE를 구현합니다.

1. 방법 1: rgbRMSE.m

function rmsevalue= rgbRMSE(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值相加,注意(:)的用法
rmsevalue=sqrt(MSE_RGB/(row*col)); % 在MSE的基础上开根号
end

2. 방법 2: greyRMSE.m

function rmsevalue = grayRMSE(image1,image2)
% image1和image2大小相等
row=size(image1,1); % 图像的长
col=size(image1,2); % 图像的宽
image1=double(image1);
image2=double(image2);
rmsevalue=sqrt(sum(sum((image1-image2).^2))/(row*col)); % 在MSE的基础上开根号
end

3. 방법 3: rgbrayRMSE.m

function rmsevalue = rgbgrayRMSE(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
rmsevalue=sqrt(sum_mse/(row*col));
end

4. 방법 4: NRMSE.m

function nrmsevalue = NRMSE(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_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
nrmsevalue=sqrt(sum_mse1/(row*col))/sqrt(sum_mse2/(row*col));
end

5. 주요 기능 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内置函数immse的基础上开根号
disp('matlab函数的均方误差:');
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);

3. 실현결과 분석

1. 결과 출력

RGB 이미지:
여기에 이미지 설명을 삽입하세요.
해당 그레이스케일 이미지:
여기에 이미지 설명을 삽입하세요.
다양한 방법으로 출력되는 RMSE 값:
여기에 이미지 설명을 삽입하세요.
2. 결과 분석

1. 메인 함수인 main.m 파일을 실행할 때마다 출력되는 RMSE 값이 조금씩 달라지니 참고하시고, 위 사진과 아래 사진을 비교하시면 됩니다.
여기에 이미지 설명을 삽입하세요.
2. 가우시안 노이즈의 매개변수만을 고려하여 주 함수 main.m 파일의 소금과 후추 노이즈의 분산을 0.001 로 변경 하고 위에서 얻은 분산 0.01의 RMSE 결과와 비교할 수 있습니다. 획득된 RMSE가 훨씬 작음을 알 수 있으며 이는 더 나은 이미지 품질을 나타냅니다.

여기에 이미지 설명을 삽입하세요.
3. matlab의 내장 함수 immse를 사용하여 계산한 회색조 이미지의 RMSE는 우리가 직접 작성한 방법으로 계산한 회색조 이미지의 RMSE보다 큽니다.

4. 본질적으로 방법 3은 방법 1과 방법 2를 결합한 것입니다.

추천

출처blog.csdn.net/qq_44111805/article/details/127705623