互信息的数学解释以及matlab编程
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>

浙公网安备 33010602011771号