www.gusucode.com > 配准结果检验程序 gobad.m对图像进行“平移”和“旋转” > peizhun/MI.m
%Caculate MI of a and b in the region of the size(a) function mi = MI(a,b) % [M,N] = size(a); 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; % a = int16(a)+1; % b = int16(b)+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; hb(indexy) = hb(indexy)+1; end end hsum = sum(sum(hab)); index = find(hab~=0); p = hab/hsum; Hab = sum(sum(-p(index).*log(p(index)))); hsum = sum(sum(ha)); index = find(ha~=0); p = ha/hsum; Ha = sum(sum(-p(index).*log(p(index)))); hsum = sum(sum(hb)); index = find(hb~=0); p = hb/hsum; Hb = sum(sum(-p(index).*log(p(index)))); mi = Ha+Hb-Hab;