SyneRBI / SIRF

Main repository for the CCP SynerBI software
http://www.ccpsynerbi.ac.uk
Other
58 stars 29 forks source link

Mask in Csm calculation leads to signal loss #1221

Closed ckolbPTB closed 5 months ago

ckolbPTB commented 8 months ago

In the Csm calculation a mask is now used (commit #1bb1b11):

https://github.com/SyneRBI/SIRF/blob/1bb1b111a80f48df5e491a8ee9201715d4e9db42/src/xGadgetron/cGadgetron/gadgetron_data_containers.cpp#L2811C33-L2811C48

The parameters (e.g. threshold) for this mask are set automatically. This leads to signal loss if the intensities vary a lot in the image (e.g. cardiac scans).

Solution: the user should be able to adapt the threshold for this mask.

evgueni-ovtchinnikov commented 8 months ago

@ckolbPTB I am not sure I understand about the signal loss - have you got any pictures to illustrate? And for the threshold - are you referring to my noise level estimate (noise)? Should I add a user-defined multiplier for this estimate defaulted to 1.0?

The reason I added && object_mask[i] at the line you quoted was that I did not like the coil sensitivities I got for 3D_RPE_Lowres.h5: csm_3D_RPE_Lowres whereas with the help of the object_mask I got csm_3D_RPE_Lowres_obj_mask

ckolbPTB commented 8 months ago

I cannot upload an example because it is in-vivo data but I basically get a hole in the middle of the thorax where all values were set to 0 because the signal intensity there is below your estimated noise level.

I agree that the above coil maps look nicer with the mask but this does not mean that they are more accurate.

Should I add a user-defined multiplier for this estimate defaulted to 1.0? Yes, but I would default it to 0.0 to not break backwards compatibility and the user can the use it or not.

DANAJK commented 8 months ago

A tight mask on the coil maps risks problems with motion, or small shifts due to distortions, that can place the object in a region where the coil map has been zeroed.

evgueni-ovtchinnikov commented 7 months ago

I have reconsidered the use of the object mask, I no longer consider it a good idea.

Actually, my use of the object_mask was influenced by CSMs computed by ismrmrdtools: csm_3D_RPE_Lowres_Inati png

But now it occured to me that zeroing coil sensitivities outside the object makes neither physical nor practical sense - the sensitivity of a coil cannot possibly be zero anywhere, especially close to the coil, and the product of the image and CSM will be zero outside the object anyway.

Finally, I believe the sensitivity of a coil is a smooth function, is it not?

So, I removed object_mask from the computation of coil sensitivities and increased smoothness, ending up with

csm_3D_RPE_Lowres_w3_i10

Good move do you think?

Please try the latest branch ignore-acq on your data.

DANAJK commented 7 months ago

The coil sensitivity comes from the Biot-Savart relation. This means that it does have a fairly smooth spatial variation - on the scale of the coil element radius (note that the "coil" you see as a patient may be bigger than the elements inside it). Unfortunately the sensitivity is influenced by the electrical properties of the body and so needs to be measured on a per patient basis.

In the original SENSE paper, I think they used a polynomial fit to smooth out noise and extrapolate a bit beyond where there is reliable signal.

KrisThielemans commented 5 months ago

fixed by #1207