cabouman / svmbir

Fast code for parallel or fan beam tomographic reconstruction
BSD 3-Clause "New" or "Revised" License
19 stars 8 forks source link

Multi-Resolution Reconstruction #120

Closed XiaoWang-Github closed 3 years ago

XiaoWang-Github commented 3 years ago

Hi everyone,

I tested the python wrapper today. Great work! Thank you everyone! It's very easy to install and use it.

However, I have concern about demo's image quality. Why are all reconstructions from the demo look blurry? Both microscopy and shepp-logan demos look blurry. The microscopy demo is especially blurry. I have attached my reconstructed image and the original phantom.

Another concern I have is about MBIR algorithmic convergence.  The 3D microscopy demo takes more than 200 iterations.  Why is the convergence so slow?

3D_microscopy_recon 3D_microscopy

cabouman commented 3 years ago

In order to make limited angle convergence reasonable, we need to implement multi-resolution reconstruction. We just never observed this before because we couldn't easily do the reconstructions. Also, in order to implement the multi-resolution, we first needed to tune the parameter selection (which we have mostly done) so that the regularization didn't change dramatically with resolution.

I changed the issue to "implement multi-resolution reconstruction" because that is the underlying issue. But the good news is we are making great progress!!

cabouman commented 3 years ago

OK, I got an initial version of multires_recon() working. I put it in the branch named "multi res_dev". You can run the demo named "demo_multires.py" to try it out.

sjkisner commented 3 years ago

This is cool! I try this out on the microscopy data.

cabouman commented 3 years ago

Thilo's comments:

*args and **kwargs

The use of *args and kwargs link here would be a way to do this since multires_recon() is very much only a wrapper around recon(). That is, most of the arguments to both functions are the same. Actually I think all arguments are the same except for max_resolutions. def multires_recon(max_resolutions, *args, **kwargs): In the very bottom of multires_recon() we would not call recon() with all these arguments separately but instead simply call ``reconstruction = recon(*args, kwargs)``

How do the resizing operations affect the voxels outside the reconstruction region?

max_resolutions:

Resizing the sinogram

XiaoWang-Github commented 3 years ago

Sounds good!

cabouman commented 3 years ago

Decide that *args, **kwargs wasn't worth it. Will do sinogram resizing in future.