3dDespike is a hack, originally designed to deal with a problematic scanner. The principal difference between using 3dDespike and censoring is that censoring is all-or-nothing for a time point, whereas 3dDespike just takes the original (bad) data in one voxel and replaces it with some fiction.
A “proper” way to do deal with voxel-specific spikes (and thus not worth censoring the entire volume away) would be to use a different regression matrix for each voxel - or at least, for each voxel requiring despiking. That way, the bad data in each voxel can be censored/regressed out separately without affecting the (putatively) good data in other voxels at that time point.
This solution has the drawback that it is computationally sluggish, requiring setting up and tearing down a whole raft of matrices for the time series analysis. I have thought of doing it in 3dREMLfit, a la the ‘-dsort’ option - with some code changes necessary for various scenarios. But I’ve not got around to implementing it.
Would doing such separate voxelwise censoring make a significant difference over despiking? I have my doubts, a lot of them, which is why I have not spent the time to implement my sketched-out ideas in the previous paragraph. To do it super-properly, the voxels to be censored out should also not be used in the volume registration, which would also require modifying 3dvolreg to allow such censoring. All of this is possible, but I’m not going to do it for a whirl just to see if it matters in any significant way.
What I’ve written above is implicitly for task FMRI. For resting FMRI, the changes would be similar but “properly” should also include censoring voxelwise when the inter-voxel correlations are computed - that is, if time point 37 is “bad” in voxel A and time point 73 is “bad” in voxel B, then omit both of them when doing the correlation between A and B. For Pearson correlation, that’s easy - set censored voxel time points to 0 in the residuals - which is what is usually done for censored time points now anyhow (just on the “all or nothing” basis). So the “despiking aware” version of 3dTproject would have to do that. Since 3dTproject also allows the ‘-dsort’ option, that could be done now with a little shell programming wizardry. (I think.)