A novel combination of SENSE and GRAPPA for accelerated MRI.

About Faster Scanning with MRI


My name is Nicholas Dwork; I am an assistant professor in the Department of Biomedical Informatics at University of Colorado Anschutz. My research focuses on accelerating MRI.

The point of this project is to illustrate how I develop a somewhat advanced engineering project involving the physics of MRI and the mathematics of optimization.

For this project, I will be developing a novel acceleration method that combines both SENSE and GRAPPA. This will extend our recent work where we identified a sufficient condition for accurate reconstruction with GRAPPA.

I recently created a set of videos explaining the basics of MRI. This will be good background for the work that we are about to conduct.

Set 1 - Without the complicated math: https://www.youtube.com/playlist?list=PL9CdrgdUrVz2M2HLETE9ULkRGNJKeKlXN With the complicated

Set 2 - With the complicated math: https://www.youtube.com/playlist?list=PL9CdrgdUrVz2nV5ybwIfRl6TfDMwI3tcv

Read more
Filters

Recent Activity

Today, we broke compressed sensing out into its own implementation. We got two versions of it to work, but we're still failing with joint sparsity.
https://youtu.be/4rwyh0xGJCo?si=fzspVN21yh6KkVXE

Today, we were able to implement compressed sensing for a single coil with hard data consistency. The result is bad, but the code is working! Next time, we're going to focus on setting the bound higher than 0.
https://youtu.be/N7qWRngFweE

We implemented compressed sensing with joint sparsity. It's currently broken. We'll debug again next stream.
https://youtu.be/2d0VfvoeW7s

Without a way to automatically set the regularization parameter, we're on our way to implementing compressed sensing using joint sparsity. We have an obvious bug right now, which we'll try to address in our next stream.
https://youtu.be/otCmkpCW2bM

I streamed again today to try to make the compressed sensing problem feasible. This first attempt didn't work.
https://www.youtube.com/watch?v=M9d9Q5q4YCs

Today, we understood what has been causing our issues with compressed sensing. The good news is that the code is working as intended. The bad news is that physics is not conforming to our expectations. Now, we're moving on to try to rectify these issues.
https://www.youtube.com/watch?v=xhFxm8Ivchk

Unsuccessfully tried to debug compressed sensing. We're going to have to try again next time.
https://youtu.be/36hqlCud86s

We've implemented compressed sensing (without any other constraints imposed) but need to change the noise bound by a factor of 100,000 to get a good result. This indicates that there is a bug.
https://youtu.be/-KPMhaZvbLE

During today's stream, we completed our implementation of SPIRiT regularization in the rewrite of the reconstruction system. We're also automatically setting the noise bound, though it looks like our bound is very poor. We'll have to look into that.
https://www.youtube.com/watch?v=aQOEdlNQLWM

We made a little progress towards our rewrite of the reconstruction system. We're working on incorporating Spirit Regularization in with our non-rectangular field-of-view.
https://youtu.be/--GeNZdvh9U

Today we started a significant rewrite to better take advantage of the non-rectangular field-of-view and, hopefully, make it easier to accommodate many different constraints.
https://youtu.be/5LgvNZYrpLg

Today we implemented a code optimization and we did a significant code cleanup. This is in preparation of implementing compressed sensing.
https://youtu.be/6IhGE3rbksQ

In this second stream of the day, we completed the successful implementation of the optimizations, and we can now take the support into account during the reconstruction.
https://youtu.be/RTkRnW4ztGE

In this stream, we started implementing some code optimizations, but had to stop before we were successful.
https://www.youtube.com/watch?v=GBwO9_sFIgk

We are now using an array of gammas, one per coil, that are calculated automatically along with PDHG with line search. This is a completely automatic algorithm, and it's working well. The results with SPIRiT regularization are better than those of model-based-reconstruction without the additional regularization.
https://youtu.be/JT4xSHqrgNs

We cleaned up the code and have PDHG running to solve the least squares minimization over a sphere. It's outputting an image, but the image isn't high quality yet. This may be because of how gamma was set, or how well the optimization is doing with its arbitrary step sizes. We ended with some TODO items to try and fix this.
https://youtu.be/WDQhr4cNCFY

The latest stream is done. We made progress towards including the SPIRiT assumption as a constraint, but we've got a long way to go.
You can watch the stream here: https://youtu.be/30jNWSMlTIg

We found and fixed some bugs in our SPIRiT Regularization code. And we've now compared it to regular model based reconstruction. Indeed, SPIRiT regularization improves the quality!
https://youtu.be/KCZx6JigzOE

We got a first version of SPIRiT regularization working! You can see the stream here: https://youtu.be/s6DpgML-wkg

Although SPIRiT seemed to be working last time, there was a major bug. We fixed that and it works much better now. We also got to the point where we can accommodate nonzero epsilon values.

You can watch a recording here: https://youtu.be/e546JtfsJUM

I streamed again this morning ...... and..... I got SPIRiT working!

You can watch the stream here. https://youtu.be/lX3LRDLQxFA

My latest stream is complete. I was able to solve more bugs, but SPIRiT is still not working. I was doing convolution instead of cross correlation. Also, I was using conjugate transpose when I should have been doing transpose. They're now fixed.

Here's the stream: https://youtu.be/wOd9N1waAI4

The link in the last snippet was wrong. In this stream, we fixed several bugs but still don't have SPIRiT working.

Here's the stream: https://youtu.be/9fsBRNjREHk?si=EQHWaSpDEIviOCUk

In this stream, we fixed several bugs, but we still didn't get SPIRiT working.
You can see the stream here: https://youtu.be/IhIqw9CeF9M?si=ASUvYERbYzwRvAfB

The stream is complete. You can see it at the link below.

I got as far as having a code for SPIRiT that runs all the way through but doesn't work. Hopefully we'll change that during our next stream.

https://www.youtube.com/watch?v=IhIqw9CeF9M

During this morning's stream, I got circular convolution and its adjoint working. This will let us go back to working on SPIRiT regularization during next stream.

Here's the stream: https://www.youtube.com/watch?v=KmPkw9NBcQ0

I took a step back and started working on a 1 dimensional circular convolution. I got it working, but still don't have the adjoint up and running.

You can see the stream here: https://www.youtube.com/watch?v=HHLcrmeuwhs

Stream 2 is complete. I fixed several bugs in the code that determines the interpolation coefficients, and I started developing circular convolution. You can see the stream here: https://youtu.be/3q0yPtTeYYQ

The first stream is complete. I'm starting by creating the SPIRiT reconstruction in MATLAB. In this first stream, I got as far as figuring out the linear interpolation coefficients.

You can see the video of the stream here: https://youtu.be/a34SzRUP-xI

Faster scanning with MRI reduces the need to anesthetize the subject and increases robustness to motion. This is especially important for young pediatric patients that have difficulty remaining still and fetuses that have no impetus to do so.

To scan faster, one can simply collect less data. However, reconstructing a high-quality image from less data is a challenge. In this work, I will be developing a novel method to accelerate MRI. The image is the result of a convex optimization problem that can be solved with existing fast algorithms.

We'll talk about all of this. I'm doing this for fun; hopefully it works out.