In this series Learning Tomography, I always work with 2D slice ... Here is an example of a 3D reconstruction calculated with the weighted (or filtered) back-projection algorithm. The input data correspond to the stack of sinograms (previously calculated here [Link]).
1- Modifying and improving the script
Compared to the previous scripts I published, I just add another loop to scan all the slices of the sinogram stack. Here is a synopsis of the script in pseudo-code:3D_rec = new stack
for each sinogram
2D_rec = new slice
for each row of this sinogram
bp = back-project(row)
bp.rotate
2D_rec = 2D_rec + bp
end for
3D_rec.add_slice(2D_rec)
end for
Moreover, I tried to optimize the JavaScript code to speed up the process of 2D reconstruction. This new version − detailed in this post [Link] − is located in the function calcRec2D(one_sinogram, proj_num, angles_array).
Here is the script.
+++ IJ JavaScript snippet: WBP_3Drec.js +++
+++ End of IJ JavaScript snippet: WBP_3Drec.js +++
2- Computing the 3D reconstruction
- Copy and paste the script in a JavaScript window (Plugins > New > JavaScript), click on the sinogram stack (available as a 32-bit TIFF ramp-filtered stack [Link] or web page [Link]) and run the script (in JavaScript window, Macros > Run Macro).
- Once executed, choose the middle slice of the Rec3D window, draw a small circle in the center, and normalize all the slices of the volume at 0% of saturated pixels (Process > Enhance Contrast... > Normalize ).
Note: The stack was previously filtered with a truncated ramp filter with the following formula [if d < 100.0) v=d;]. You can try with more sophisticated filters.Here is a surface representation calculated with Volume Viewer plugin of the final volume 3DRec.
<< Previous: Computing the sinograms
No comments:
Post a Comment