Half tomography reconstruction without sinogram stitching
About
Follow-up of #378 (closed).
Building the extended sinogram when using half-tomography (HA) mode was appealing for some purposes (ex. debug), but it has numerous issues:
- When there are intensities fluctuations, stitching the two parts will give artefacts (#378 (closed))
- Cannot use horizontal translations #411 (closed)
- Eventually more complex design
From this MR, HA-reconstruction will be done without building the half-tomography sinogram. Nabu still may provide some script to visualize the extended sinogram.
On a ID16B dataset, the only working approach is the following:
- Filter the sinogram
- Extend using the algotom approach in
[Vo21]
- Use plain backprojetion
To do
-
SinoMult
class and cuda backend -
Include halftomo handling directly in FBP -
Update halftomo unit tests -
Update pipeline -
End-to-end reconstruction test
Notes
The sinogram extension used is the one from algotom: https://github.com/algotom/algotom/blob/master/algotom/prep/conversion.py#L394
The sub-pixel shift is probably overkill, though.
# Extend the 360deg sinogram, then FBP
si_extended, nc = extend_sinogram(si, r, apply_log=False)
B_e = Backprojector(si_extended.shape, padding_mode="edges", rot_center=nc, extra_options={"centered_axis": True}, angles=np.linspace(0, 2*np.pi, si_p.shape[0]))
rec = B_e.fbp(si_extended) # not so good
# Filter the 360deg sinogram
B0 = Backprojector(si.shape, padding_mode="edges", rot_center=r)
si_f = B0.sino_filter(si)
# Extend this filtered sinogram, then plain backproj
si_extended2, nc = extend_sinogram(si_f, r, apply_log=False)
rec2 = B_e.backproj(si_extended2) # good
References
[Vo21] Nghia T. Vo, Robert C. Atwood, Michael Drakopoulos, and Thomas Connolley, "Data processing methods and data acquisition for samples larger than the field of view in parallel-beam tomography," Opt. Express 29, 17849-17874 (2021) - https://opg.optica.org/oe/fulltext.cfm?uri=oe-29-12-17849&id=451366