MATLAB Answers


Fusion of CT and MRI images, MI method

Asked by D C
on 14 Jan 2013

I've got theoretical question about fusing medical images. After Matlab calculate mutual information between CT and MRI images what should be the next step? I know that calculated value of mutual information should be parameter in certain function that should be minimized, but I don't know any details. Could you tell me what should I do after calculating MI?



No products are associated with this question.

3 Answers

Answer by Jurgen
on 14 Jan 2013
Edited by Jurgen
on 14 Jan 2013

Same as least squares, transform 1 of the images according to your criteria (e.g. rotate) then re-calculate MI. Try various transforms according to your algorithm, then choose the transform that had the hightest MI to get an optimal match.

The joint entropy should be minimized to maximize the MI.


Answer by D C
on 15 Jan 2013


You suggest to execute it in loop which works until MI has its maximum, but i do not know this maximum, so I should use something like fminsearch for joint entropy first?

could you present it on any example?


Answer by Jurgen
on 16 Jan 2013
Edited by Jurgen
on 16 Jan 2013

Alright, for a rotation and xtranslation example:

stepsize1 = pi/180; %e.g. 1 degree
stepsize2 = 1;      %e.g. 1 pixel
rotations    = 0:stepsize1:pi;   %vector of angles
translationx = -10:stepsize2:10; %vec. of x-shifts
a = 0; %index row
b = 0; %index col
M = zeros(length(rotations),length(translationsx)); %stores MI scores 
IM1 = rand(300); %reference image
IM2 = rand(300); %floating image
% Lets say mytransformfcn is a function taking inputs for 
% (rotation & xtranslation & image) and outputs a transformed image
% Lets also say MI is a function that calculates the mutual information
% (=scalar) between 2 images.
for ii = rotations
    a = a+1;
    for jj = translationx
        b = b+1;
        newIM  = mytransformfcn(ii,jj,IM2);
        M(a,b) = MI(newIM,IM1);
%------find max MI + corresponding parameters
[mx idx]            = max(M(:));
[angleidx transidx] = ind2sub(size(M),idx); clear idx;
max_angle           = rotations(angleidx); 
max_trans           = translationx(transidx);


Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!