Print

Print


Dear Mark,

I would like to use the transformed HiRes to register to other images of the second session. The -usesqform switch of flirt helps. This is the only reason to desire proper quaternion. You are saying that when reference in flirt has no orientation, then transformation matrix is used to compose it for the output?

Roman

________________________________
From: FSL - FMRIB's Software Library [[log in to unmask]] on behalf of Mark Jenkinson [[log in to unmask]]
Sent: Monday, March 19, 2012 11:34 AM
To: [log in to unmask]
Subject: Re: [FSL] flirt shrinks brain on interpolation

Hi,

These two steps are correct.
However, you will get the sform of the HiRes in the output, not a
transformed version of the LoRes one.  If you really want the
transformed LoRes sform (and I'm not sure why you would need
this) then you can achieve this by taking a copy of the HiRes
image and running:  fslorient  -deleteorient HiResCopy
then use this copy as the reference image in step 2.  This will
make flirt use the transformed LoRes sform in the output image.

All the best,
Mark


On 19 Mar 2012, at 03:49, Roman Fleysher wrote:

Dear Mark,

Could you confirm my interpretation of your proposal:

1. Register HiRes to LoRes using flirt and save transformation matrix

2. Use flirt to apply transformation to HiRes with HiRes as reference.

The output is HiRes registered to LoRes with orientation information (sform?) of LoRes and resolution of HiRes. (This is the kind of output I want.)

Thank you,

Roman



________________________________
From: FSL - FMRIB's Software Library [[log in to unmask]] on behalf of Mark Jenkinson [[log in to unmask]]
Sent: Sunday, March 18, 2012 8:34 PM
To: [log in to unmask]<mailto:[log in to unmask]>
Subject: Re: [FSL] flirt shrinks brain on interpolation

Hi,

Just to add to this.
If you want to get high resolution voxel size at your output, then just do the registration
as normal (don't interpolate first) and then use ApplyXFM on the output but specifying
either the existing highres as the reference (defining FOV and voxel size) or define your
own.  This should do what you want and not get you caught in problems associated with
the 0,0,0 alignment being an unwanted shift (since your matrix should have compensated).

If this isn't exactly what you want (either wrt the shift or qform/sform information) then let
us know.

All the best,
Mark



On 18 Mar 2012, at 09:07, Jesper Andersson wrote:

Dear Roman,

I would like to register hiresT1 to a loresT1 acquired in a different session for further processing. This is an intermediate step to bring hiresT1 to the same orientation as other images in the second scanning session. In doing so, I would like to preserve the original resolution of hiresT1.

To accomplish this, I considered two steps:

1. interpolate loresT1 to hiresT1 using ApplyXFM_gui (which is calling flirt with proper settings) and obtain loresT1_interpolated

2. register hiresT1 to  loresT1_interpolated to obtain desired result

However, when I look at loresT1_interpolated, I see that the brain got smaller!!

To investigate, I considered the following crude exercise.

I acquired 4 slice, 7 mm thickness data cutting through the brain. If I now use ApplyXFM_gui to interpolate to 1mm slice thickness and 28 slices to keep the same FOV and keeping in-plane resolution intact, the top 6 slices are empty! That is, the brain became 6mm thinner than the original! I also observe that the first slice of the interpolated set is exactly equal to the first slice of the original, only its thickness is 1 mm instead of 7mm. The last non-empty slice is identical to the last slice of the original. This contradicts to my intuition of what must happen on interpolation.

this is actually exactly what will happen with interpolation. When interpolating an images one assumes that the intensity in a voxel pertains to a point exactly at the middle of that voxel. When calculating an interpolated value for a point between two voxels it gets a wighted average of the intensities in those two voxels, the weights depending on the relative distances between the interpolated point and the original points.

That means that as soon as you move "outside" of the last voxel centre you have no way of knowing what the interpolated value should be. Therefore if you have 4 slices each with a thickness of 7mm you can only interpolate over the distance between the voxel centres of the ultimate slices, i.e. 3*7mm.

The reason you lose slices in one direction and not the other is that flirt assumes that the voxel centres of slice 0 (actually point 0,0,0) coincides in the two volumes.

Jesper