Coder Social home page Coder Social logo

Comments (9)

roflmaostc avatar roflmaostc commented on May 18, 2024 1

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.

mmuckley avatar mmuckley commented on May 18, 2024

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.

roflmaostc avatar roflmaostc commented on May 18, 2024

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.

mmuckley avatar mmuckley commented on May 18, 2024

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.

roflmaostc avatar roflmaostc commented on May 18, 2024

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.

mmuckley avatar mmuckley commented on May 18, 2024

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.

roflmaostc avatar roflmaostc commented on May 18, 2024

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.

mmuckley avatar mmuckley commented on May 18, 2024

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.

roflmaostc avatar roflmaostc commented on May 18, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.