Skip to content
Snippets Groups Projects
Commit 3ad32bbd authored by Erik Strand's avatar Erik Strand
Browse files

Add Fourier reconstruction results

parent 2406b4b8
No related branches found
No related tags found
No related merge requests found
assets/img/project_brain.png

273 KiB

assets/img/project_fourier_reconstruction.png

220 KiB

assets/img/project_sinogram.png

359 KiB

...@@ -105,13 +105,43 @@ appropriately spaced samples. You can read more about these requirements ...@@ -105,13 +105,43 @@ appropriately spaced samples. You can read more about these requirements
Second, since we combine the DFTs of the projections radially, we'll end up with samples (of the 2D Second, since we combine the DFTs of the projections radially, we'll end up with samples (of the 2D
Fourier transform of our image) on a polar grid rather than a cartesian one. So we'll have to Fourier transform of our image) on a polar grid rather than a cartesian one. So we'll have to
interpolate. This step is tricky and tends to introduce a lot of error. I'll rather arbitrarily use interpolate. This step is tricky and tends to introduce a lot of error. , but there are better
[Catmull-Rom interpolation](http://entropymine.com/imageworsener/bicubic/), but there are better
algorithms out there that come closer to the theoretically ideal algorithms out there that come closer to the theoretically ideal
[sinc interpolation](https://en.wikipedia.org/wiki/Whittaker%E2%80%93Shannon_interpolation_formula). [sinc interpolation](https://en.wikipedia.org/wiki/Whittaker%E2%80%93Shannon_interpolation_formula).
The popular [gridrec](https://www.ncbi.nlm.nih.gov/pubmed/23093766) method is one. The popular [gridrec](https://www.ncbi.nlm.nih.gov/pubmed/23093766) method is one.
### Implementation
I used [FFTW](http://www.fftw.org/) to compute Fourier transforms. It's written in C and is very
[fast](http://www.fftw.org/benchfft/). I implemented my own polar resampling routine. It uses a
[Catmull-Rom interpolation](http://entropymine.com/imageworsener/bicubic/) kernel.
I started with this image of a
[brain](https://commons.wikimedia.org/wiki/File:FMRI_coronal_scan.jpg) from Wikimedia Commons.
![brain](../assets/img/project_brain.png)
Fourier reconstruction produces a nice [sinogram](https://en.wikipedia.org/wiki/Radon_transform).
Each row is one projection, with angle going from 0 at the top to $$\pi$$ at the bottom, and $$r =
0$$ down the middle column. You can clearly see the skull (a roughly circular feature) unwrapped to
a line on the left side of the sinogram.
![sinogram](../assets/img/project_sinogram.png)
The reconstruction, however, isn't so clean.
![brain](../assets/img/project_fourier_reconstruction.png)
The Fourier library I'm using is solid (and indeed it reproduces images very well even after
repeated applications), so the error must be coming from my interpolation code. Indeed, the high
frequency content looks ok, but there's a lot of error in low frequency content. This is encoded in
the middle of the Fourier transform, which is what is most distorted by the polar resampling. I
could implement a resampling routine specifically designed for polar resampling, or indeed
specifically for polar resampling for CT reconstruction, but there are better algorithms out there
anyway so I'll move on.
## Filtered Back Projection ## Filtered Back Projection
It would be nice if we could avoid the interpolation required for Fourier reconstruction. The It would be nice if we could avoid the interpolation required for Fourier reconstruction. The
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment