# pylops.utils.signalprocessing.slope_estimate¶

pylops.utils.signalprocessing.slope_estimate(d, dz=1.0, dx=1.0, smooth=5, eps=0.0, dips=False)[source]

Local slope estimation

Local slopes are estimated using the Structure Tensor algorithm [1]. Slopes are returned as $$\tan\theta$$, defined in a RHS coordinate system with $$z$$-axis pointing upward.

Note

For stability purposes, it is important to ensure that the orders of magnitude of the samplings are similar.

Parameters
dnp.ndarray

Input dataset of size $$n_z \times n_x$$

dzfloat, optional

Sampling in $$z$$-axis, $$\Delta z$$

Warning

Since version 1.17.0, defaults to 1.0.

dxfloat, optional

Sampling in $$x$$-axis, $$\Delta x$$

Warning

Since version 1.17.0, defaults to 1.0.

smoothfloat or np.ndarray, optional

Standard deviation for Gaussian kernel. The standard deviations of the Gaussian filter are given for each axis as a sequence, or as a single number, in which case it is equal for all axes.

Warning

Default changed in version 1.17.0 to 5 from previous value of 20.

epsfloat, optional

New in version 1.17.0.

Regularization term. All slopes where $$|g_{zx}| < \epsilon \max_{(x, z)} \{|g_{zx}|, |g_{zz}|, |g_{xx}|\}$$ are set to zero. All anisotropies where $$\lambda_\text{max} < \epsilon$$ are also set to zero. See Notes. When using with small values of smooth, start from a very small number (e.g. 1e-10) and start increasing by a power of 10 until results are satisfactory.

dipsbool, optional

New in version 2.0.0.

Return dips (True) instead of slopes (False).

Returns
slopesnp.ndarray

Estimated local slopes. The unit is that of $$\Delta z/\Delta x$$.

Warning

Prior to version 1.17.0, always returned dips.

anisotropiesnp.ndarray

Estimated local anisotropies: $$1-\lambda_\text{min}/\lambda_\text{max}$$

Note

Since 1.17.0, changed name from linearity to anisotropies. Definition remains the same.

Notes

For each pixel of the input dataset $$\mathbf{d}$$ the local gradients $$g_z = \frac{\partial \mathbf{d}}{\partial z}$$ and $$g_x = \frac{\partial \mathbf{d}}{\partial x}$$ are computed and used to define the following three quantities:

\begin{split}\begin{align} g_{zz} &= \left(\frac{\partial \mathbf{d}}{\partial z}\right)^2\\ g_{xx} &= \left(\frac{\partial \mathbf{d}}{\partial x}\right)^2\\ g_{zx} &= \frac{\partial \mathbf{d}}{\partial z}\cdot\frac{\partial \mathbf{d}}{\partial x} \end{align}\end{split}

They are then spatially smoothed and at each pixel their smoothed versions are arranged in a $$2 \times 2$$ matrix called the smoothed gradient-square tensor:

$\begin{split}\mathbf{G} = \begin{bmatrix} g_{zz} & g_{zx} \\ g_{zx} & g_{xx} \end{bmatrix}\end{split}$

Local slopes can be expressed as $$p = \frac{\lambda_\text{max} - g_{zz}}{g_{zx}}$$, where $$\lambda_\text{max}$$ is the largest eigenvalue of $$\mathbf{G}$$.

Similarly, local dips can be expressed as $$\tan(2\theta) = 2g_{zx} / (g_{zz} - g_{xx})$$.

Moreover, we can obtain a measure of local anisotropy, defined as

$a = 1-\lambda_\text{min}/\lambda_\text{max}$

where $$\lambda_\text{min}$$ is the smallest eigenvalue of $$\mathbf{G}$$. A value of $$a = 0$$ indicates perfect isotropy whereas $$a = 1$$ indicates perfect anisotropy.

1

Van Vliet, L. J., Verbeek, P. W., “Estimators for orientation and anisotropy in digitized images”, Journal ASCI Imaging Workshop. 1995.

## Examples using pylops.utils.signalprocessing.slope_estimate¶

Seislet transform

Seislet transform

Slope estimation via Structure Tensor algorithm

Slope estimation via Structure Tensor algorithm