Pre- and post-processing¶
odt_to_ri (f, res, nm) |
Convert the ODT object function to refractive index |
opt_to_ri (f, res, nm) |
Convert the OPT object function to refractive index |
sinogram_as_radon (uSin[, align]) |
Compute the phase from a complex wave field sinogram |
sinogram_as_rytov (uSin[, u0, align]) |
Convert the complex wave field sinogram to the Rytov phase |
Pre-processing models¶
Tomographic data sets consist of detector images for different rotational positions \(\phi_0\) of the object. Pre-processing in this context means that the measured field \(u(\mathbf{r})\) is transformed to either the Rytov approximation (diffraction tomography) or the Radon phase (classical tomography).
-
odtbrain.
sinogram_as_radon
(uSin, align=True)¶ Compute the phase from a complex wave field sinogram
This step is essential when using the ray approximation before computation of the refractive index with the inverse Radon transform.
Parameters: - uSin (2d or 3d complex ndarray) – The background-corrected sinogram of the complex scattered wave \(u(\mathbf{r})/u_0(\mathbf{r})\). The first axis iterates through the angles \(\phi_0\).
- align (bool) – Tries to correct for a phase offset in the phase sinogram.
Returns: phase – The unwrapped phase array corresponding to uSin.
Return type: 2d or 3d real ndarray
See also
skimage.restoration.unwrap_phase()
- phase unwrapping
radontea.backproject_3d()
- e.g. reconstruction via backprojection
-
odtbrain.
sinogram_as_rytov
(uSin, u0=1, align=True)¶ Convert the complex wave field sinogram to the Rytov phase
This method applies the Rytov approximation to the recorded complex wave sinogram. To achieve this, the following filter is applied:
\[u_\mathrm{B}(\mathbf{r}) = u_\mathrm{0}(\mathbf{r}) \ln\!\left( \frac{u_\mathrm{R}(\mathbf{r})}{u_\mathrm{0}(\mathbf{r})} +1 \right)\]This filter step effectively replaces the Born approximation \(u_\mathrm{B}(\mathbf{r})\) with the Rytov approximation \(u_\mathrm{R}(\mathbf{r})\), assuming that the scattered field is equal to \(u(\mathbf{r})\approx u_\mathrm{R}(\mathbf{r})+ u_\mathrm{0}(\mathbf{r})\).
Parameters: - uSin (2d or 3d complex ndarray) – The sinogram of the complex wave \(u_\mathrm{R}(\mathbf{r}) + u_\mathrm{0}(\mathbf{r})\). The first axis iterates through the angles \(\phi_0\).
- u0 (ndarray of dimension as uSin or less, or int.) – The incident plane wave \(u_\mathrm{0}(\mathbf{r})\) at the detector. If u0 is “1”, it is assumed that the data is already background-corrected ( uSin \(= \frac{u_\mathrm{R}(\mathbf{r})}{ u_\mathrm{0}(\mathbf{r})} + 1\) ). Note that if the reconstruction distance \(l_\mathrm{D}\) of the original experiment is non-zero and u0 is set to 1, then the reconstruction will be wrong; the field is not focused to the center of the reconstruction volume.
- align (bool) – Tries to correct for a phase offset in the phase sinogram.
Returns: uB – The Rytov-filtered complex sinogram \(u_\mathrm{B}(\mathbf{r})\).
Return type: 2d or 3d real ndarray
See also
skimage.restoration.unwrap_phase()
- phase unwrapping
Post-processing (Refractive index retrieval)¶
To obtain the refractive index map \(n(\mathbf{r})\)
from an object function \(f(\mathbf{r})\) returned
by e.g. backpropagate_3d()
, an additional conversion
step is necessary. For diffraction based models, odt_to_ri()
must be used whereas for Radon-based models opt_to_ri()
must be used.
-
odtbrain.
odt_to_ri
(f, res, nm)¶ Convert the ODT object function to refractive index
In ODT, the object function is defined by the Helmholtz equation
\[f(\mathbf{r}) = k_\mathrm{m}^2 \left[ \left( \frac{n(\mathbf{r})}{n_\mathrm{m}} \right)^2 - 1 \right]\]with \(k_\mathrm{m} = \frac{2\pi n_\mathrm{m}}{\lambda}\). By inverting this equation, we obtain the refractive index \(n(\mathbf{r})\).
\[n(\mathbf{r}) = n_\mathrm{m} \sqrt{\frac{f(\mathbf{r})}{k_\mathrm{m}^2} + 1 }\]Parameters: Returns: ri – The complex refractive index \(n(\mathbf{r})\).
Return type: n-dimensional ndarray
Notes
Because this function computes the root of a complex number, there are several solutions to the refractive index. Always the positive (real) root of the refractive index is used.
-
odtbrain.
opt_to_ri
(f, res, nm)¶ Convert the OPT object function to refractive index
In OPT, the object function is computed from the raw phase data. This method converts phase data to refractive index data.
\[n(\mathbf{r}) = n_\mathrm{m} + \frac{f(\mathbf{r}) \cdot \lambda}{2 \pi}\]Parameters: Returns: ri – The complex refractive index \(n(\mathbf{r})\).
Return type: n-dimensional ndarray
Notes
This function is not meant to be used with diffraction tomography data. For ODT, use
odt_to_ri()
instead.