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

来源:互联网 发布:图片数字识别算法 编辑:程序博客网 时间:2024/06/05 18:24

图像融合质量评价方法

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

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});endendfunction 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    endendfor k=1:len    p(1,k)=p(1,k)/(m*n);  %求出每个不同元素出现的频率    p(1,k)=-p(1,k)*log2(p(1,k));endy=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});endendfunction 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;    endendr=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);

运行结果


阅读全文
0 0
原创粉丝点击