cabouman / mbircone

BSD 3-Clause "New" or "Revised" License
11 stars 9 forks source link

Backprojector #158

Closed dyang37 closed 5 months ago

dyang37 commented 6 months ago

This PR contains the back projector for MBIRCONE.

Interface design

Screen Shot 2024-03-25 at 1 47 27 PM

Implementation

I modified the C function "backProjectlike3DCone" to "backProject3DCone", and put a python interface on top of that. Other than that, none of the existing C or python functions are modified.

Testing

test script: "test/test_backproject.py" Test results: Phantom: phantom_axial phantom_sagittal

Back projection: backprojection_axial backprojection_sagittal

dyang37 commented 6 months ago

I added a new script "test_backproject_numerical.py", which shows that $\langle y, Ax \rangle \approx \langle x, A^ty \rangle$ for random image x and sinogram y. Here's the output of the script: Screen Shot 2024-04-02 at 2 42 44 PM where $nrmse(a,b)=\frac{|a-b|}{|b|}$ for scalar values $a$ and $b$. Note that $\langle y, Ax \rangle$ and $\langle x, A^ty \rangle$ are not exactly the same. This is probably because there exists image pixels outside the reconstruction space that yields non-zero backprojection values.

gbuzzard commented 6 months ago

Ok. I approve.