互信息的数学解释以及matlab编程

时间:2024-04-16 17:30:11

1.互信息

互信息是信息论中的一个基本概念,通经常使用于描写叙述两个系统间的统计相关性。或者是一个系统中所包括还有一个系统中信息的多少

引入互信息对图像进行配准是由于:不须要假定两幅图像灰度的相应关系。不须要对图像进行切割。

可是这对Ct-MR配准、或者CT-PET配准是可行的。对于CT-US配准是不可行的。

在概率论中,两个随机变量A和B。他们的边缘概率分布为p_A (a)和p_B (b),他们的联合概率分布为p_AB (a,b)。当p_AB (a,b)=p_A (a)∙p_B (b)时A与B是相互独立的。


在多模医学图象配准问 题中 ,尽管两幅图象来源于不同的成像设备 ,可是它们基于共同的人体解剖信息 ,所以当两幅图象的空间位置全然一致时 ,当中一幅图象表达的关于另 一幅图象的信息 ,也就是相应象素灰度的互信息应为最大。互信息I(A,B)通过计算p_AB (a,b)和p_A (a)∙p_B (b)的差距来得到A和B的依赖程度


2.用熵来表示互信息

熵表达的是一个系统的复杂性或者是不确定性。
系统熵的定义:

两个系统的联合熵:

条件熵:

那么,互信息能够表示为:


对于离散的数字图像。联合概率分布P_AB(a,b)能够利用归一化的联合直方图来表示:


那么,边缘概率P_A(i)能够表示为:(即在联合直方图,沿着行或者列求和)

同理。边缘概率P_B(i)能够表示为:(即在联合直方图,沿着行或者列求和)

3.互信息分类

1.互信息:  MuInf = H_A+H_B-H_AB;
2.归一化互信息:MuInf = (H_A+H_B)/H_AB;

4.互信息的Matlab编程

<span style="font-size:18px;">function [MuInf] = MutualInfo(R,F,method)
% 互信息函数
%R/F:能够是二值图像,也能够是灰度图像
%method:互信息与归一化互信息选项。多採用归一化互信息
if size(F,3) == 3
    F = rgb2gray(F);
end
if size(R,3) == 3
    R = rgb2gray(R);
end;
% 计算互信息
Hist = JoinHist(R,F);
[rows,columns] = size(R);
N_Hist = Hist./(rows*columns);%联合直方图归一化
Marg_A = sum(N_Hist); %对全部列单独求和
Marg_B = sum(N_Hist,2); %对全部行单独求和
H_A = 0;
H_B = 0;
for i=1:1:size(N_Hist,1)   %计算熵H_A
    if Marg_A(i) ~= 0
        H_A = H_A+(-Marg_A(i)*log2(Marg_A(i)));
    end
end
for i=1:1:size(N_Hist,2)   %计算熵H_B
    if Marg_B(i) ~= 0
        H_B = H_B + (-Marg_B(i)*log2(Marg_B(i)));
    end
end
H_AB = sum(sum( -N_Hist.*log2(N_Hist+(N_Hist == 0)) ));
 if strcmp(method,\'MI\')
     MuInf = H_A+H_B-H_AB;
 end
 if strcmp(method,\'NMI\')
     MuInf = (H_A+H_B)/H_AB;     
 end;
end

%% 统计F、R两张图像的联合直方图
function Hist = JoinHist(R,F)
[rows,columns] = size(R);
Hist = zeros(256,256);
for i = 1:1:rows
    for j = 1:1:columns
        Hist(R(i,j)+1,F(i,j)+1) = Hist(R(i,j)+1,F(i,j)+1)+1;
    end
end
end</span>

5.实验仿真