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

通讯编程文档

开发平台:

Matlab

  1. function rmi = RMI(A, B, d)
  2. % % -- referrence:
  3. % %       "Image similarity using mutual information of regions", D B Russakoff
  4. % % -- Algorithm
  5. % % Given A and B, which are m*n images
  6. % %     1. create pi=vij for [Aij, Bij], then N = (m-2r)*(n-2r) is represented by P=[p1..pN]
  7. % %     2. P0 = P - mean(P);
  8. % %     3. C = P0*P0'/N, covariance matrix
  9. % %     4. Hg(C) = log( (2pie)^(d/2) * det(C)^(d/2) )
  10. % %     5. Hg(CA), Hg(CB), where CA is d/2*d/2 top left matrix of C, CB is bottom right
  11. % %     6. RMI = Hg(CA)+Hg(CB)- Hg(C)
  12. % % 
  13. % %  -- Our method
  14. % %     differrent in region, use only p[i+1,j] and p[i,j+1] for p[i,j]
  15. % % 
  16. % % % % test begins
  17. % load t2.mat;
  18. % % Is0 , It0
  19. % [rt ct]=size(It0);
  20. % [rs cs] = size(Is0);
  21. % if rt>rs || ct>cs
  22. %     x1 = (ct-cs)/2+1;
  23. %     x2 = cs+x1-1; 
  24. %     It0=It0([x1:x2],[x1:x2]);
  25. % end
  26. % A = Is0; 
  27. % B = It0;
  28. % % % % test ends
  29. % % ======================== main begins ======================
  30. [m n] = size(A);
  31. % % === 1. create pi=vij for [Aij, Bij], then N = (m-2r)*(n-2r) is represented by P=[p1..pN]
  32. if nargin <3
  33.     d = 9;  %default set
  34. end
  35. P = crP(A, B, d);
  36. N = size(P,2);
  37. % % === 2. P0 = P - mean(P);
  38. P0 = double(P) - repmat( mean(P,2), 1, N );    %sum(P(:))/N
  39. % % === 3. C = P0*P0'/N, covariance matrix
  40. C = P0*P0'/N;
  41. % % === 4. Hg(C) = log( (2pie)^(d/2) * det(C)^(d/2) )
  42. HgC = calHg(C, d*2);
  43. % % === 5. Hg(CA), Hg(CB), where CA is d/2*d/2 top left matrix of C, CB is bottom right
  44. CA = C(1:d, 1:d);
  45. [m1 n1] = size(C);
  46. CB = C((m1-d+1):m1, (n1-d+1):m1);
  47. HgCA = calHg(CA, d);
  48. HgCB = calHg(CB, d);
  49. % % === 6. RMI = Hg(CA)+Hg(CB)- Hg(C)
  50. rmi = HgCA + HgCB - HgC;
  51. % % ======================== main ends ===================================
  52. % % === subfunc1. create pi=vij for [Aij, Bij], then N = (m-2r)*(n-2r) is represented by P=[p1..pN]
  53. function P = crP(A, B, d)
  54. P = [];[m, n] = size(A);
  55. % % fast algrithm
  56. if d==3
  57.     i = [1:(m-1)]; j = [1:(n-1)];
  58.     Pa1 = A(i,   j)';
  59.     Pa2 = A(i+1, j)';
  60.     Pa3 = A(i,   j+1)';
  61.     Pb1 = B(i,   j)';
  62.     Pb2 = B(i+1, j)';
  63.     Pb3 = B(i,   j+1)';
  64.     P = [ Pa1(:)'; Pa2(:)'; Pa3(:)';...
  65.           Pb1(:)'; Pb2(:)';Pb3(:)'];
  66. end
  67. if d==4
  68.     i = [1:(m-1)]; j = [1:(n-1)];
  69.     Pa1 = A(i,   j)';
  70.     Pa2 = A(i+1, j)';
  71.     Pa3 = A(i,   j+1)';
  72.     Pa4 = A(i+1, j+1)';
  73.     
  74.     Pb1 = B(i,   j)';
  75.     Pb2 = B(i+1, j)';
  76.     Pb3 = B(i,   j+1)';
  77.     Pb4 = B(i+1, j+1)';
  78. %     
  79. %     Pa1 = A([1:(m-1)], [1:(n-1)])';
  80. %     Pa2 = A([2: m],    [1:(n-1)])';
  81. %     Pa3 = A([1:(m-1)], [2: n]   )';
  82. %     Pa4 = A([2: m],    [2: n]   )';
  83. %     Pb1 = B([1:(m-1)], [1:(n-1)])';
  84. %     Pb2 = B([2: m],    [1:(n-1)])';
  85. %     Pb3 = B([1:(m-1)], [2: n]   )';
  86. %     Pb4 = B([2: m],    [2: n]   )';
  87.     P = [ Pa1(:)'; Pa2(:)';Pa3(:)'; Pa4(:)';...
  88.           Pb1(:)'; Pb2(:)';Pb3(:)'; Pb4(:)'];
  89. end
  90. if d==9
  91.     i = [2:(m-1)]; j = [2:(n-1)];
  92.     
  93.     Pa1 = A(i-1, j-1)';
  94.     Pa2 = A(i,   j-1)';
  95.     Pa3 = A(i+1, j-1)';
  96.     Pa4 = A(i-1, j  )';
  97.     Pa5 = A(i,   j   )';
  98.     Pa6 = A(i+1, j  )';
  99.     Pa7 = A(i-1, j+1)';
  100.     Pa8 = A(i,   j+1)';
  101.     Pa9 = A(i+1, j+1)';
  102.         
  103.     Pb1 = B(i-1, j-1)';
  104.     Pb2 = B(i,   j-1)';
  105.     Pb3 = B(i+1, j-1)';
  106.     Pb4 = B(i-1, j  )';
  107.     Pb5 = B(i,   j   )';
  108.     Pb6 = B(i+1, j  )';
  109.     Pb7 = B(i-1, j+1)';
  110.     Pb8 = B(i,   j+1)';
  111.     Pb9 = B(i+1, j+1)';
  112.     P = [ Pa1(:)'; Pa2(:)';Pa3(:)'; Pa4(:)';...
  113.           Pa5(:)'; Pa6(:)';Pa7(:)'; Pa8(:)'; Pa9(:)';...
  114.           Pb1(:)'; Pb2(:)';Pb3(:)'; Pb4(:)';
  115.           Pb5(:)'; Pb6(:)';Pb7(:)'; Pb8(:)'; Pb9(:)'];
  116. end
  117. function HgC = calHg(C, d)
  118. det( C )
  119. (2*pi*exp(1))^(d/2)  *sqrt( det( C ) )
  120. HgC = log( (2*pi*exp(1))^(d/2)  *sqrt( det( C ) ) );