【图像融合】评价方法(熵、均方根误差)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013165921/article/details/78158344

图像融合质量评价方法

  一般分为主观和客观两类:

1、主观方法主要是观察者来评价融合结果的质量。

2、客观方法又分为两类:

   (1)无参考图像评价方法(如信息熵)。

    1)单一图像统计特征评价。

    2)融合图像和原图像关系评价。

  (2)有参考图像评价方法(如均方根误差)。


  说明:L表示图像灰度级别。Pi表示灰度值i像素占总像素比例。E越大表示融合图像信息量越大。

代码示例

function varargout= msg(varargin)
%函数功能:
%     函数msg求出输入图像的熵
%----------------------------------%

if nargin<1         %判断输入变量的个数
    error('输入参数必须大于等于1.');
elseif nargin==1
    varargout{1}=f(varargin{1});
end
end

function y= f(x)
%函数功能:
%      函数y=f(x)的功能是求出图像x的熵
%输入参数:
%      x----输入的原图像
%输出参数:
%      y----原图像的熵
%-------------------------------------------------%
x=uint8(x);
temp=unique(x);   %temp就是x中全部不同的元素,例如x=[1,1,3,4,1,5];那么temp=[1;3;4;5]
temp=temp';
len=length(temp); %求出x矩阵中不同元素的个数
p=zeros(1,len);   %p向量用来存储矩阵x中每个不同元素的个数
[m,n]=size(x);
for k=1:len
    for i=1:m
        for j=1:n
            if x(i,j)==temp(1,k)
                p(1,k)=p(1,k)+1;
            end
        end
    end
end
for k=1:len
    p(1,k)=p(1,k)/(m*n);  %求出每个不同元素出现的频率
    p(1,k)=-p(1,k)*log2(p(1,k));
end
y=sum(p);
end

函数调用

x1 = imread('lena.jpg');
x2 = imread('lena1.jpg');
x3 = imread('lena2.jpg');

subplot(1,3,1);imshow(x1);title('源图像');
subplot(1,3,2);imshow(x2);title('左模糊');
subplot(1,3,3);imshow(x3);title('右模糊');

out{1}= msg(x1);
out{2}= msg(x2);
out{3}= msg(x3);

fprintf('\n图像1的熵:%f\n',out{1});
fprintf('\n图像2的熵:%f\n',out{2});
fprintf('\n图像3的熵:%f\n',out{3});

运行结果


均方根误差

  说明:均方误差越小,表示融合图像和参考图差异越小,融合效果越好。

代码示例

function varargout= rmse(varargin)

if nargin<2
    error('输入参数必须大于等于2.');
elseif nargin==2
    varargout{1}=h(varargin{1},varargin{2});
end
end

function r=h(f,g)
%函数功能:
%      函数r=h(f,g)求出两幅图像的均方根误差r
%输入参数:
%      f----标准图像
%      g----融合后的图像
%-------------------------------------%

f=double(f);
g=double(g);
[m,n]=size(f);

temp=[];
for i=1:m
    for j=1:n
        temp(i,j)=(f(i,j)-g(i,j))^2;
    end
end

r=sqrt(sum(sum(temp))/(m*n));

end

函数调用

x1 = imread('lena.jpg');
x2 = imread('lena1.jpg');
x3 = imread('lena2.jpg');

subplot(1,3,1);imshow(x1);title('源图像');
subplot(1,3,2);imshow(x2);title('左模糊');
subplot(1,3,3);imshow(x3);title('右模糊');

out1= rmse(x1,x2);
out2= rmse(x1,x3);

fprintf('\n图像1、2的均方根误差:%f\n',out1);
fprintf('\n图像1、3的均方根误差:%f\n',out2);

运行结果


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页