File Exchange

a function with the simplest form to calculate the mutual information

version 1.0 (1.72 KB) by

Here is a function with the simplest form to calculate the mutual information between two images.

Updated

MI is a good approach to align two images from different sensor. Here is a function with the simplest form to calculate the mutual information between two images.
the function f=cal_mi(I1,I2) is in the test_mi.m file.
your comment or suggestion will be much appreciated.

Muzammil

Muzammil (view profile)

@HUxb, great work.

However, I think that the function can be optimized to speed up calculations. I have identified two such code portions.

1. Line 12
f = [ f cal_mi(p2,p3)]; can be easily replaced with f(t+51) = cal_mi(p2,p3);
This way array element is simply updated and matlab doesn't form new array every time.

2. Line 39 to 42
ht = zeros(N1,N2); % Joint histogram
for n = 1:length(I1);
ht(I1(n)-min1+1,I2(n)-min2+1) = ht(I1(n)-min1+1,I2(n)-min2+1) + 1;
end

Above piece of code can be replaced by just one line of code
ht = accumarray([I1 I2]+1,1);
Please note that loop slows down the function.

--------------------------------------------------
By making these two changes I was able to reduce the computation time on my laptop from 1.23s to 0.56s which corresponds to a gain of 2.2

Jorge

Jorge (view profile)

Hi HU xb,
thank you for the code. Is all I needed for understand the Mutual Information.

I think you are using the im2 twice in the input of the cal_mi function. In the line 11 the code is:
p3 = im2(h/2-50:h/2+50,t+w/2-50:t+w/2+50); % a patch around the middle of im3

p3 = im3(h/2-50:h/2+50,t+w/2-50:t+w/2+50); % a patch around the middle of im3

Eyal David

Eyal David (view profile)

Hi,

I think that there is a little mistake at the end of that function.
f = -(Hx+Hy)/h_xy; % Mutual information

I think it should be
f = -(Hx+Hy) + h_xy; % Mutual information

Soum

Soum (view profile)

Hi;
Thank you HU xb very much for your code ,I have a problem my images are grayscale 32 bits '.tif' I got this error when I used your code:

Undefined function 'cal_mi' for input arguments of type 'single'.

MATLAB 7 (R14)