prewitt#
- scipy.ndimage.prewitt(input, axis=-1, output=None, mode='reflect', cval=0.0)[source]#
计算 Prewitt 滤波器。
- 参数:
- inputarray_like
输入数组。
- axisint, 可选
input 的轴,沿其进行计算。默认为 -1。
- outputarray or dtype, optional
放置输出的数组,或返回数组的数据类型。默认情况下,将创建一个与输入具有相同数据类型的数组。
- mode字符串或序列,可选
mode 参数决定了当滤波器与边界重叠时如何扩展输入数组。通过传递长度等于输入数组维数的模式序列,可以为每个轴指定不同的模式。默认值为“reflect”。有效值及其行为如下:
- 'reflect' (d c b a | a b c d | d c b a)
输入通过最后像素的边缘反射进行扩展。此模式有时也称为半样本对称。
- 'constant' (k k k k | a b c d | k k k k)
输入通过用相同的常数值填充边缘之外的所有值进行扩展,该常数值由 cval 参数定义。
- 'nearest' (a a a a | a b c d | d d d d)
输入通过复制最后像素进行扩展。
- 'mirror' (d c b | a b c d | c b a)
输入通过最后像素的中心反射进行扩展。此模式有时也称为全样本对称。
- 'wrap' (a b c d | a b c d | a b c d)
输入通过环绕到对边进行扩展。
为了与插值函数保持一致,还可以使用以下模式名称
- ‘grid-constant’
这是 ‘constant’ 的同义词。
- ‘grid-mirror’
这是 ‘reflect’ 的同义词。
- ‘grid-wrap’
这是 ‘wrap’ 的同义词。
- cval标量,可选
如果 mode 为 'constant',则用于填充输入超出边缘的值。默认值为 0.0。
- 返回:
- prewittndarray
滤波后的数组。形状与 input 相同。
另请参阅
索贝尔Sobel 滤波器
附注
此函数计算一维 Prewitt 滤波器。水平边缘通过水平变换(axis=0)强调,垂直边缘通过垂直变换(axis=1)强调,以此类推,适用于更高维度。这些可以组合以获得幅度。
数组 API 标准支持
prewitt对 Python Array API 标准兼容的后端具有实验性支持,除了 NumPy 之外。请考虑通过设置环境变量SCIPY_ARRAY_API=1并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
✅
PyTorch
✅
⛔
JAX
⚠️ 无 JIT
⛔
Dask
⚠️ 计算图
不适用
有关更多信息,请参阅 对数组 API 标准的支持。
示例
>>> from scipy import ndimage, datasets >>> import matplotlib.pyplot as plt >>> import numpy as np >>> ascent = datasets.ascent() >>> prewitt_h = ndimage.prewitt(ascent, axis=0) >>> prewitt_v = ndimage.prewitt(ascent, axis=1) >>> magnitude = np.sqrt(prewitt_h ** 2 + prewitt_v ** 2) >>> magnitude *= 255 / np.max(magnitude) # Normalization >>> fig, axes = plt.subplots(2, 2, figsize = (8, 8)) >>> plt.gray() >>> axes[0, 0].imshow(ascent) >>> axes[0, 1].imshow(prewitt_h) >>> axes[1, 0].imshow(prewitt_v) >>> axes[1, 1].imshow(magnitude) >>> titles = ["original", "horizontal", "vertical", "magnitude"] >>> for i, ax in enumerate(axes.ravel()): ... ax.set_title(titles[i]) ... ax.axis("off") >>> plt.show()