Print

Print


|     I am having some problems with the MI coregistration.  I have run it
| on several data sets, with no change in the orientation of the data.  To
| look into this further, I took an epi data set, and rotated the entire
| volume 15 degrees in the x-y plane, simulating a head tilt.  I then
| applied the mutual information coregistration between the original data
| set and the rotated data set.  The MI algortithm ran through it's
| various iterations, however, at the end, the output was still in rotated
| space, and there was no difference between the volumes after subtracting
| the two. Any help would be appreciated.

What happens in the line minimisation plot?  Does the function always find
the best solution at exactly zero?  If so, then it is probably something
to do with the very rough and problematic error surface that you get with
images with large voxels.

This is something I have been looking at recently, which I think I have
fixed by simplifying the way that the joint histograms are created.  What was
happening was that when a point was sampled between the centres of a group
of 8 voxels, a small amount was added to the bins of the histograms
corresponding to the intensity of the 8 neighbours.  The amount added was
related to the distance from the point to the voxel.  When sampling an equal
distance from all the points, 1/8 was added to all the relevent bins.  When
sampling exactly at the centre of a voxel, then 1 was added to the bin for
that voxel.  The effect that this had was that the mutual information cost
function was related to the amount of interpolation done.  When all points
were sampled at the voxel centres, the mutual information was higher because
the histograms were more spikey.  The whole thing resulted in lots of local
minima at positions where there was less interpolation.  It is particularly
bad when the images have relatively large voxels, as in the case of registering
functional images.

It should work better now.  There is a fix in:
        ftp://ftp.fil.ion.ucl.ac.uk/spm/spm99_updates/spm_hist2.c

For Solaris machines, there is a compiled spm_hist2.mexsol that should
make life easier.  Otherwise, you need to recompile the mex file with
a command something like:
        mex spm_hist2.c -O

As always, feedback is useful.

best regards,
-John