DWI_b0 to hires slab coregistration

Hi all,

I want to coregister an averaged DWI b0 image (left side in attachment) to a high-resolution image slab, that only covers the brainstem (right side in attachment) within subject. I unsuccessfully tried a combination of align_epi_anat and 3dresample.
align_epi_anat.py -overwrite -dset1 hires+orig. -dset2 anat+orig. -dset1to2 -dset1_strip None -edge -cost lpa
align_epi_anat.py -overwrite -dset1 b0+orig. -dset2 anat+orig. -dset1to2 -dset1_strip None -edge -cost lpa
3dresample -master hires_al+orig. -prefix b0_2_hires -input b0_al+orig.
align_epi_anat.py -overwrite -dset1 hires+orig. -dset2 b0+orig. -dset1to2 -partial_axial -dset1_strip None -dset2_strip None -edge -cost lpa
3dresample -master hires_al+orig. -prefix b0_2_hires -input b0+orig.

But the resulting coregistered b0 image was always misaligned on the hires image after the resampling.

Your help here is highly appreciated.


Hi, I am bringing up my problem described above again, since it still persists.



Partial volumes are tricky… You shouldn’t need 3dresample. Are the results aligned before the 3dresample step?

A few other ideas if the results are misaligned before 3dresample:

  1. If your DWI image lacks good contrast/detail/texture, you can try the mutual information cost function.

  2. try and nudge the volumes closer and use 3dAllineate directly.

  3. use ITK-SNAP for more manual alignment. See this helpful YouTube tutorial from Renzo Huber.

align_epi_anat.py has -partial_… options that might help. Still, it can be difficult depending on how much spatial structure there is in the anatomical datasets. It’s usually best to acquire partial coverage datasets with a full brain dataset, and then use alignment of that full brain dataset to pull the partial one as a kind of follower dataset.

There was a recent thread here too on the available manual tools:

Hi Peter and Daniel,

thank you for your helpful suggestions!
Based on your feedback, I finally managed to successfully coregister the b0 image to the hires space via the anat using the align_eip_anat.py, 3dQwarp and 3dNwarpApply commands (cf. attached image top 2 rows vs bottom 3 rows).

For some reason I was under the impression that you have to go through MNI space, which very much complicates the process with more affine transformation matrices and warps to integrate into 3dNwarpApply, which I was not able to do. Thankfully that was not necessary after all.


Great! Thanks for keeping us posted.