Comments (9)
Btw, because of the strong ringing, convolving with the Toeplitz kernel is also not energy preserving.
A lot of energy is lost in the ringing and hence cut-off.
from torchkbnufft.
Hello @roflmaostc, I think there are some zeros that are manually inserted in toep.py. It's been quite some time since I worked with this to remember the justification, but it is used in other reference implementations. For details I think you'll need to look at the Feichtinger reference.
If you're talking about the ring boundary, that should be due to using a radial trajectory. Those are the k-space locations that are not sampled.
from torchkbnufft.
Thanks, I'll check that out!
The kernel is in real space.
I'm more worried about the strong ringings in the corners. As you said, it might come from the hard cut off in the Fourier space. But in my application it causes some background blur which smears into the whole image, not so nice.
I think I might just zero them out in real space, because those are exactly the regions which are also not measured at all.
from torchkbnufft.
Hmm, yes, it can be a little bit non-intuitive since the matrix A is being embedded into a larger 2-factor size matrix. Considering cropping, I wonder if convolving with the kernel you show will touch the ringing locations. Are you using iterative reconstruction?
If you notice anything inconsistent about toep.py with Toeplitz embedding feel free to open a PR.
from torchkbnufft.
So my input was first quadratic and I used iteratively. Then the ringing locations will smear data into a circle of a diameter with array size, so will mess up things.
But if you set all data outside of this circle to zero in every iteration, then it is fine.
This actually kind of makes sense since a CT system would not be able to measure the corners of the array anyways (because of finite detector size).
from torchkbnufft.
I see. Did you use regularization? Technically you should get ringing because those corners are in the nullspace of the operator and you're trying to invert 0s without regularization.
Setting data outside the circle to zero is an equivalent form of regularization via constraining, I guess applying projected gradient descent.
from torchkbnufft.
Yes, that makes sense for me.
No, I didn't regularize. My approach is similar t IFTA with manually setting constraints in each iteration.
from torchkbnufft.
By "energy-preserving" do you mean norm(x) = norm(toep(x))? That is also expected. The NUFFT is not an energy-preserving operation. The Toeplitz approximates A'A where A is a NUFFT. The NUFFT can be made approximately energy-preserving if you apply density compensation (analogous to ramp filters in CT).
from torchkbnufft.
Yeah, or simply sum(conv(x, toeplitz_matrix))
.
Even if you normalize so that sum(toeplitz_matrix)=1
, the operation is not energy preserving because a lot of the energy is distributed in the ringing which is then cut-off
from torchkbnufft.
Related Issues (20)
- Turn off complex tensors completely HOT 3
- Thread allocation issues with batched density compensation HOT 11
- Basic KB-NUFFT Example HOT 6
- Failed for 3D non-Cartesian trajectory
- MriSenseNufft, AdjMriSenseNufft, AdjKbNufft, ToepSenseNufft removed
- Deprecation warning and shutdown HOT 3
- Accuracy for numpoints = 2 - 7
- nonuniform discrete Fourier transform of type II HOT 4
- grid_size HOT 3
- Make compatible with latest PyTorch HOT 7
- data range changed after processing HOT 4
- KB-NUFFT hangs when used in PyTorch DataLoader with num_workers > 0 HOT 3
- Allow user control of threading
- Could you give an example of implementing a two-dimensional Fourier transform by use torchkbnufft?
- Performance vs FFT HOT 6
- Support for NFFTs of real valued Arrays HOT 6
- Basic 1D case
- Batched input with varying size leads to TorchScript error HOT 2
- KbInterpAdjoint gives mismatch results? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from torchkbnufft.