I would like to your expert opinion on what’s can be wrong in the following case.
One sample in our dataset gave me strange result in dwi2response tournier (similar result created by dwi2response fa).
Not sure what’s going on, but using the -sf_voxels option to output the final single-fibre mask should at least give us an idea as to whether the voxels used to estimate the response make anatomical sense (they should consist of voxels containing coherent white matter).
Not too surprised about the Tax algorithm, it does fail quite regularly, which is why we’ve been moving away from it recently.
Also, given your other posts about getting the DW information, there may be issue with the gradient directions causing this issue. You’d need to make sure all this is fixed up properly to rule that out as the source of the problem.
Given the results here, as well as the presence of your other post, this is almost certainly an issue with the diffusion gradient orientations. If your image axes are permuted in any way, the gradient vectors need to be correspondingly modified.
The tournier algorithm gives the result it does because it relies on direct averaging of the signal in the top 300 single-fibre voxels, after rotating those signals such that the fibre direction is along the z-axis. So if the gradient directions are incorrect, that averaging process goes awry. But there’s a good chance that the selected voxels themselves (as shown by the -sf_voxels option) will in fact be appropriate.
The tax algorithm relies on iteratively rejecting voxels from the single-fibre selection, based on the response function estimated during the previous iteration. But if calculation of said response function from single-voxel averaging (see point above) is going awry, you end up with a bad response function, concomitantly bad FODs, and all voxels rejected from the single-fibre mask. The message isn’t quite right (it should just print ‘Aborting: All voxels have been excluded from single-fibre selection’, but I’ve failed to import the library function to print said message; I’ll fix that), but the point stands nonetheless.
First of all, thi gradient table for this sample is correct. This sample comes from a routine clinic scan. And the encodings is the same as the others in the same project (I have double checked that). The data in my another post (on orientation issues) comes from a postmortem pilot study study. Sorry for the confusions.
I got some sf images using this code, dwi2response tournier -sf_voxels 100 dwi_upsample_preproc.mif dwi_response_tournier.txt -nocleanup
The location of sf.mif is very unexpected to me. Here is the overlay of iter0_SF.mif on dwiSH.mif. It seems the script choose an unreliable region to estimate FOD response.
Sorry, I gave you the wrong instructions! The -sf_voxels option specifies how many voxels to include in the estimation, and by default this is 300. I don’t recommend you change that - if anything, you’ll want to increase that number if these data were up-sampled. What I wanted was the -voxels option, which outputs the final single-fibre mask.
What you’re showing here is the single-fibre mask used in the first iteration - what we want is the one used in the final iteration (presumably voxels.mif in your listing). Otherwise this would indeed be far from ideal…
By the way, are your data phase-encoded along the inferior-superior axis? The distortions seem very unusual to me…
Thank you. I rerun the dwi2response with the followings: dwi2response tournier -voxel voxels.mif dwi_upsample_preproc.mif dwi_response_tournier.txt -nocleanup
Here is the overlay of voxels.mif on dwiSH.mif.
I don’t think we have phase-encoded along the inferior-superior axis. But there is stripes noises in the original images. I probably need to drop this sample out.
OK, the voxels in the region with high susceptibility-induced distortions may throw off the estimation - but I wouldn’t have expected it to throw it off that much, provided most of the voxels are in sensible locations (which seems to be the case, by and large). What you could try if you want is to use a more conservative initial mask than what dwi2response computes by default (it uses a simple dwi2mask call), by eroding what would have been the default mask more aggressively and passing that through to dwi2response:
This erodes 5 voxels off the edge of the mask, hopefully that’ll get rid of anything near the edge of the brain. You may want to experiment with higher values if those problematic voxels remain included in the final selection…
If that doesn’t fix it, then there’s a good chance your stripe artefacts are too severe, you would need to focus on removing those before proceeding. You can use something like:
Hi @jdtournier, @rsmith, the problem is solved. You are right, it’s data issue – the last two volumes were missing.
Thank you for your patience! I do learn a lot on MRTrix3 these days.