互信息matlab源代码

时间:2013-06-01 12:54:11
【文件属性】:

文件名称:互信息matlab源代码

文件大小:1KB

文件格式:TXT

更新时间:2013-06-01 12:54:11

互信息 matlab

function mi = MI(a,b) %Caculate MI of a and b in the region of the overlap part %计算重叠部分 [Ma,Na] = size(a); [Mb,Nb] = size(b); M=min(Ma,Mb); N=min(Na,Nb); %初始化直方图数组 hab = zeros(256,256); ha = zeros(1,256); hb = zeros(1,256); %归一化 if max(max(a))~=min(min(a)) a = (a-min(min(a)))/(max(max(a))-min(min(a))); else a = zeros(M,N); end if max(max(b))-min(min(b)) b = (b-min(min(b)))/(max(max(b))-min(min(b))); else b = zeros(M,N); end a = double(int16(a*255))+1; b = double(int16(b*255))+1; %统计直方图 for i=1:M for j=1:N indexx = a(i,j); indexy = b(i,j) ; hab(indexx,indexy) = hab(indexx,indexy)+1;%联合直方图 ha(indexx) = ha(indexx)+1;%a图直方图 hb(indexy) = hb(indexy)+1;%b图直方图 end end %计算联合信息熵 hsum = sum(sum(hab)); index = find(hab~=0); p = hab/hsum; Hab = sum(sum(-p(index).*log(p(index)))); %计算a图信息熵 hsum = sum(sum(ha)); index = find(ha~=0); p = ha/hsum; Ha = sum(sum(-p(index).*log(p(index)))); %计算b图信息熵 hsum = sum(sum(hb)); index = find(hb~=0); p = hb/hsum; Hb = sum(sum(-p(index).*log(p(index)))); %计算a和b的互信息 mi = Ha+Hb-Hab; %计算a和b的归一化互信息 %mi = hab/(Ha+Hb);


网友评论

  • 代码运行没有问题,注释也很清晰。
  • 很清楚 非常不错
  • 下载了,在用中
  • 写的挺好的,但不是我需要的,仍然谢谢分享!
  • 谢谢分享,帮了很大忙!
  • 太棒了,帮我解决不小的问题
  • 帮师妹下载的,应该是比较使用的代码。。。支持楼主,谢谢楼主分享。。。。
  • 代码核心部分有了,亲测好用
  • 得出的结果不太满意,能运行出来还是不错的
  • 很好用,可以借鉴
  • 写的挺不错 很受用
  • 代码清楚易懂,但不是我要找的计算方法
  • 不是很全,但帮给了我很多
  • 代码不全 但是已经足够了
  • 还可以,值得学习
  • 一般吧,不太好用
  • 这应该是对图像的互信息计算,不是两个向量的,有点失望
  • 还行吧,不过最后没用上~
  • 代码简单易懂!
  • 代码简单易懂,方便上手 特别适合我这样的初学者
  • 可以借鉴~~ 代码比较简单
  • 代码简单易懂,简介十分清楚
  • 代码简单易懂,方便上手
  • 代码很简明,特别适合我这样的菜鸟……
  • 代码简单,结构清晰,运行效率也还不错!
  • 不错,写得比较明晰
  • 代码简单易懂,很不错,启发了思路
  • 貌似跟matlab central上相似。计算消耗很大。方法简单明了,入手学习。
  • 还不错 很简单
  • 貌似跟matlab central上相似。计算消耗很大。方法简单明了,入手学习。