mmuckley / torchkbnufft

A high-level, easy-to-deploy non-uniform Fast Fourier Transform in PyTorch.
https://torchkbnufft.readthedocs.io/
MIT License
213 stars 44 forks source link

is nufft a reversible transformation? #1

Closed gongjizhang closed 4 years ago

gongjizhang commented 4 years ago

x != A'Ax

mmuckley commented 4 years ago

It depends on the trajectory. Most trajectories are not reversible. But if you put in a Cartesian trajectory with the orthonormal NUFFT it might be close.

gongjizhang commented 4 years ago

Thank you for your reply. I've been confused by a problem recently. I am currently working on the reconstruction of radial MRI data with neural network. I want to apply the nufft operator in the data consistency layer. For example,I have a data y in sensor domain and correspond trajectory,I can use kbnufft operator to trans y to image domian as x0. Where I confused is,if nufft is not reversiable,the initial state of the data consistency term A‘(Ax0 - y) is not equal to zero. (A is nufft operator,A' is adjoint nufft operator)

mmuckley commented 4 years ago

I see. The spectral norm of A'A for a radial trajectory is much larger than 1 in most cases. Usually a person would offset this with density competition, e.g. you would do A'W(Ax-y), where W are the density compensation weights. This would balance the spectral norm a bit and might help your training work better.

In my scripts I usually use this function to calculate the weights - you could try it for your project. https://github.com/mmuckley/torchkbnufft/blob/master/torchkbnufft/mri/dcomp_calc.py

Technically this isn't good for the Gauss-Markov theorem, but since you're using a neural net maybe that's not a major issue.

gongjizhang commented 4 years ago

script

gongjizhang commented 4 years ago

Thank you for you reply. I test with your script, as what you say , dcmp can balance the norm gap, but the difference always cannot be eliminated. Is there something I misunderstood or operation wrong with me?

mmuckley commented 4 years ago

I think that is correct. The density compensation helps, but it will not solve it for a few reasons. One is that there is a nullspace at the corners of k-space - you will never recover this information if you don't sample it. Another is that the NUFFT is an approximation to the non-uniform Fourier transform with an interpolator - this interpolator introduces errors. A final point is that the density compensation itself may not be ideal, depending on the trajectory.

To get close to perfect inversion you'll need to make sure that you're sampling at the Nyquist rate, including the corners of k-space, and using the ideal density compensation for that trajectory.

mmuckley commented 4 years ago

Closing for now - reopen if you wish.