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