MI.m
上传用户:xueli1969
上传日期:2022-07-27
资源大小:19k
文件大小:1k
源码类别:

通讯编程文档

开发平台:

Matlab

  1. %Caculate MI of a and b in the region of the size(a)
  2. function mi = MI(a,b)
  3. %
  4. [M,N] = size(a);
  5. hab = zeros(256,256);
  6. ha = zeros(1,256);
  7. hb = zeros(1,256);
  8. if max(max(a))~=min(min(a))
  9.     a = (a-min(min(a)))/(max(max(a))-min(min(a)));
  10. else
  11.     a = zeros(M,N);
  12. end
  13.  
  14. if max(max(b))-min(min(b))
  15.     b = (b-min(min(b)))/(max(max(b))-min(min(b)));
  16. else
  17.     b = zeros(M,N);
  18. end
  19. a = double(int16(a*255))+1;
  20. b = double(int16(b*255))+1;
  21. % a = int16(a)+1;
  22. % b = int16(b)+1;
  23. for i=1:M
  24.     for j=1:N
  25.        indexx =  a(i,j);
  26.        indexy = b(i,j) ;
  27.        hab(indexx,indexy) = hab(indexx,indexy)+1;
  28.        ha(indexx) = ha(indexx)+1;
  29.        hb(indexy) = hb(indexy)+1;
  30.    end
  31. end
  32. hsum = sum(sum(hab));
  33. index = find(hab~=0);
  34. p = hab/hsum;
  35. Hab = sum(sum(-p(index).*log(p(index))));
  36. hsum = sum(sum(ha));
  37. index = find(ha~=0);
  38. p = ha/hsum;
  39. Ha = sum(sum(-p(index).*log(p(index))));
  40. hsum = sum(sum(hb));
  41. index = find(hb~=0);
  42. p = hb/hsum;
  43. Hb = sum(sum(-p(index).*log(p(index))));
  44. mi = Ha+Hb-Hab;