当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy ndimage.generic_filter用法及代码示例


本文简要介绍 python 语言中 scipy.ndimage.generic_filter 的用法。

用法:

scipy.ndimage.generic_filter(input, function, size=None, footprint=None, output=None, mode='reflect', cval=0.0, origin=0, extra_arguments=(), extra_keywords=None)#

使用给定函数计算多维滤波器。

在每个元素处调用提供的函数。该元素的过滤器占用空间内的输入值作为双精度值的一维数组传递给函数。

参数

input array_like

输入数组。

function {callable, scipy.LowLevelCallable}

应用于每个元素的函数。

size 标量或元组,可选

请参见下面的足迹。如果给出足迹,则忽略。

footprint 数组,可选

任何一个尺寸或者脚印必须定义。尺寸给出在每个元素位置从输入数组中获取的形状,以定义过滤器函数的输入.脚印是一个布尔数组,它(隐式)指定一个形状,而且这个形状中的哪些元素将被传递给过滤器函数。因此size=(n,m)相当于footprint=np.ones((n,m)).我们调整尺寸到输入数组的维数,因此,如果输入数组是形状(10,10,10),并且尺寸为 2,则实际使用的大小为 (2,2,2)。什么时候脚印给出,尺寸被忽略。

output 数组或数据类型,可选

放置输出的数组,或返回数组的 dtype。默认情况下,将创建一个与输入具有相同 dtype 的数组。

mode {‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},可选

mode 参数确定输入数组如何扩展到其边界之外。默认为‘reflect’。每个有效值的行为如下:

‘reflect’ (d c b a | a b c d | d c b a)

通过反射最后一个像素的边来扩展输入。此模式有时也称为half-sample 对称模式。

‘constant’ (k k k k | a b c d |呸呸呸呸)

通过使用 cval 参数定义的相同常量值填充边之外的所有值来扩展输入。

‘nearest’ (啊啊啊啊| a b c d |嘀嘀嘀嘀)

通过复制最后一个像素来扩展输入。

‘mirror’ (d c b | a b c d | c b a)

通过反射最后一个像素的中心来扩展输入。此模式有时也称为whole-sample 对称模式。

‘wrap’ (a b c d | a b c d | A B C D)

通过环绕到相对边来扩展输入。

为了与插值函数保持一致,还可以使用以下模式名称:

‘grid-mirror’

这是‘reflect’ 的同义词。

‘grid-constant’

这是‘constant’ 的同义词。

‘grid-wrap’

这是‘wrap’ 的同义词。

cval 标量,可选

如果模式为‘constant’,则填充过去输入边的值。默认值为 0.0。

origin int 或序列,可选

控制过滤器在输入数组像素上的位置。值 0(默认值)使过滤器以像素为中心,正值将过滤器向左移动,负值向右移动。通过传递长度等于输入数组维数的原点序列,可以沿每个轴指定不同的移位。

extra_arguments 顺序,可选

传递给传递函数的额外位置参数序列。

extra_keywords 字典,可选

要传递给传递函数的额外关键字参数的字典。

返回

generic_filter ndarray

过滤数组。具有与输入相同的形状。

注意

此函数还接受具有以下签名之一并包装在 scipy.LowLevelCallable 中的低级回调函数:

int callback(double *buffer, npy_intp filter_size,
             double *return_value, void *user_data)
int callback(double *buffer, intptr_t filter_size,
             double *return_value, void *user_data)

调用函数迭代输入和输出数组的元素,在每个元素处调用回调函数。当前元素处滤波器占用空间内的元素通过 buffer 参数传递,占用空间内的元素数量通过 filter_size 传递。计算值在 return_value 中返回。 user_data 是按原样提供给 scipy.LowLevelCallable 的数据指针。

回调函数必须返回一个整数错误状态,如果出错则为零,否则为一。如果发生错误,您通常应该在返回之前使用信息性消息设置python错误状态,否则调用函数会设置默认错误消息。

此外,还接受其他一些低级函数指针规范,但这些规范仅用于向后兼容,不应在新代码中使用。

例子

导入必要的模块并加载用于过滤的示例图像。

>>> import numpy as np
>>> from scipy import datasets
>>> from scipy.ndimage import generic_filter
>>> import matplotlib.pyplot as plt
>>> ascent = datasets.ascent()

通过将简单的 NumPy 聚合函数作为参数传递给函数,计算内核大小为 10 的最大过滤器。

>>> maximum_filter_result = generic_filter(ascent, np.amax, [10, 10])

虽然也可以使用 maximum_filter 直接获得最大过滤器,但 generic_filter 允许使用通用 Python 函数或 scipy.LowLevelCallable 作为过滤器。在这里,我们以内核大小为 5 为例计算最大值和最小值之间的范围。

>>> def custom_filter(image):
...     return np.amax(image) - np.amin(image)
>>> custom_filter_result = generic_filter(ascent, custom_filter, [5, 5])

绘制原始图像和过滤后的图像。

>>> fig, axes = plt.subplots(3, 1, figsize=(4, 12))
>>> plt.gray()  # show the filtered result in grayscale
>>> top, middle, bottom = axes
>>> for ax in axes:
...     ax.set_axis_off()  # remove coordinate system
>>> top.imshow(ascent)
>>> top.set_title("Original image")
>>> middle.imshow(maximum_filter_result)
>>> middle.set_title("Maximum filter, Kernel: 10x10")
>>> bottom.imshow(custom_filter_result)
>>> bottom.set_title("Custom filter, Kernel: 5x5")
>>> fig.tight_layout()
scipy-ndimage-generic_filter-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.ndimage.generic_filter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。