pylops.signalprocessing.Radon3D¶
- pylops.signalprocessing.Radon3D(taxis, hyaxis, hxaxis, pyaxis, pxaxis, kind='linear', centeredh=True, interp=True, onthefly=False, engine='numpy', dtype='float64', name='R')[source]¶
Three dimensional Radon transform.
Apply three dimensional Radon forward (and adjoint) transform to a 3-dimensional array of size \([n_{p_y} \times n_{p_x} \times n_t]\) (and \([n_y \times n_x \times n_t]\)).
In forward mode this entails to spreading the model vector along parametric curves (lines, parabolas, or hyperbolas depending on the choice of
kind), while stacking values in the data vector along the same parametric curves is performed in adjoint mode.- Parameters:
- taxis
numpy.ndarray Time axis
- hyaxis
numpy.ndarray Slow spatial axis
- hxaxis
numpy.ndarray False spatial axis
- pyaxis
numpy.ndarray Axis of scanning variable \(p_y\) of parametric curve
- pxaxis
numpy.ndarray Axis of scanning variable \(p_x\) of parametric curve
- kind
str, optional Curve to be used for stacking/spreading (
linear,parabolic, andhyperbolicare currently supported)- centeredh
bool, optional Assume centered spatial axis (
True) or not (False). IfTruethe originalhaxisis ignored and a new axis is created.- interp
bool, optional Apply linear interpolation (
True) or nearest interpolation (False) during stacking/spreading along parametric curve- onthefly
bool, optional Compute stacking parametric curves on-the-fly as part of forward and adjoint modelling (
True) or at initialization and store them in look-up table (False). Using a look-up table is computationally more efficient but increases the memory burden- engine
str, optional Engine used for computation (
numpyornumba)- dtype
str, optional Type of elements in input array.
- name
str, optional Added in version 2.0.0.
Name of operator (to be used by
pylops.utils.describe.describe)
- taxis
- Returns:
- r3op
pylops.LinearOperator Radon operator
- r3op
- Raises:
- NotImplementedError
If
kindis notlinear,parabolic, orhyperbolic- ValueError
If
engineis neithernumpynornumba
See also
pylops.signalprocessing.Radon2DTwo dimensional Radon transform
pylops.SpreadSpread operator
Notes
The Radon3D operator applies the following linear transform in adjoint mode to the data after reshaping it into a 3-dimensional array of size \([n_y \times n_x \times n_t]\) in adjoint mode:
\[m(p_y, p_x, t_0) = \int{d(y, x, t = f(p_y, p_x, y, x, t))} \,\mathrm{d}x \,\mathrm{d}y\]where \(f(p_y, p_x, y, x, t) = t_0 + p_y y + p_x x\) in linear mode, \(f(p_y, p_x, y, x, t) = t_0 + p_y y^2 + p_x x^2\) in parabolic mode, and \(f(p_y, p_x, y, x, t) = \sqrt{t_0^2 + y^2 / p_y^2 + x^2 / p_x^2}\) in hyperbolic mode. Note that internally the \(p_x\) and \(p_y\) axes will be normalized by the ratio of the spatial and time axes and used alongside unitless axes. Whilst this makes the linear mode fully unitless, users are required to apply additional scalings to the \(p_x\) axis for other relationships
\(p_x\) should be pre-multipled by \(d_x / d_y\) for the parabolic relationship;
\(p_x\) should be pre-multipled by \((d_t/d_x)^2 / (d_t/d_y)^2\) for the hyperbolic relationship.
As the adjoint operator can be interpreted as a repeated summation of sets of elements of the model vector along chosen parametric curves, the forward is implemented as spreading of values in the data vector along the same parametric curves. This operator is actually a thin wrapper around the
pylops.Spreadoperator.