SciPy 库中maximum_filter配合generate_binary_structure获取局部极大值

SciPy 库中maximum_filter配合generate_binary_structure获取局部极大值

介绍

maximum_filter用法

maximum_filter 是 SciPy 库中的一个函数,它用于计算图像的最大值滤波。这个函数在图像处理中经常被用到,特别是在特征提取和边缘检测等任务中。

使用方法如下:

python 复制代码
import scipy.ndimage
filtered_image = scipy.ndimage.maximum_filter(input, size, footprint, output, mode, cval, origin)

参数:

  • input: 输入的 ndarray 。将应用滤波器的输入图像或数据。
  • size: 标量或元组,可选。定义滤波器窗口的大小。如果是一个标量,那么这将是每个维度的大小。如果是一个元组,那么这将指定每个维度的大小。
  • footprint: 布尔数组,可选。定义滤波器的形状,如果提供了 footprint , size 参数将被忽略。
  • output: ndarray ,可选。用于放置输出的数组。必须与输入具有相同的形状和缓冲区。
  • mode: {'reflect','constant','nearest','mirror', 'wrap'},可选。定义如何处理边界。默认值为 'reflect'。
  • cval: 标量,可选。如果 mode 是 'constant' ,这个值将用于填充。默认值为 0.0 。
  • origin: 标量或元组,可选。定义滤波器的原点。

返回值:

  • result: ndarray 。滤波后的输出。

generate_binary_structure 用法

generate_binary_structure 是 SciPy 库中的一个函数,用于生成具有给定结构元素的二进制结构。这个函数主要用于图像处理和形态学操作。

使用方法如下:

python 复制代码
import scipy.ndimage
struct = scipy.ndimage.generate_binary_structure(rank, connectivity)

参数:

  • rank: 整数,定义生成的结构元素的维数。例如,对于二维图像,排名将是2。
  • connectivity: 整数,定义像素之间的最大连接性。例如,对于二维图像,连接性为1意味着一个像素仅与其上下左右的像素连接,而连接性为2则意味着一个像素与其周围8个像素(包括对角线)都连接。

返回值:

  • output: 一个布尔数组,形状为 (2*connectivity+1,)*rank ,其中 True 表示结构元素的中心,False 表示它的背景。

例如,生成一个二维的结构元素,其连接性为1:

python 复制代码
import scipy.ndimage
struct = scipy.ndimage.generate_binary_structure(2, 1)
print(struct)

输出将是:

复制代码
[[False  True False]
 [ True  True  True]
 [False  True False]]

在这个例子中,中心像素与其上下左右的像素连接,但不与对角线像素连接。

示例代码

此代码片段摘自OpenPose项目

python 复制代码
def find_peaks(param, img):
    """
    Given a (grayscale) image, find local maxima whose value is above a given
    threshold (param['thre1'])
    :param img: Input image (2d array) where we want to find peaks
    :return: 2d np.array containing the [x,y] coordinates of each peak found
    in the image
    """

    peaks_binary = (maximum_filter(img, footprint=generate_binary_structure(
        						   2, 1)) == img) * (img > param)
    # Note reverse ([::-1]): we return [[x y], [x y]...] instead of [[y x], [y
    # x]...]
    return np.array(np.nonzero(peaks_binary)[::-1]).T
相关推荐
小程故事多_806 小时前
Agent+Milvus,告别静态知识库,打造具备动态记忆的智能AI助手
人工智能·深度学习·ai编程·milvus
code_pgf6 小时前
Llama 3详解
人工智能·llama
ComputerInBook6 小时前
数字图像处理(4版)——第 3 章——(图像的)强度变换和空间滤波(Rafael C.Gonzalez&Richard E. Woods)
图像处理·人工智能·计算机视觉·强度变换和空间滤波
爱写代码的小朋友6 小时前
生成式人工智能(AIGC)在开放式教育问答系统中的知识表征与推理机制研究
人工智能·aigc
技术专家6 小时前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
m0_488913016 小时前
万字长文带你梳理Llama开源家族:从Llama-1到Llama-3,看这一篇就够了!
人工智能·学习·机器学习·大模型·产品经理·llama·uml
helpme流水6 小时前
LLaMA Factory 从入门到精通,一篇讲完
人工智能·ai·语言模型·llama
段一凡-华北理工大学6 小时前
【大模型+知识图谱+工业智能体技术架构】~系列文章01:快速了解与初学入门!!!
人工智能·python·架构·知识图谱·工业智能体
Swift社区7 小时前
AI Governance:从 Policy Engine 到完整治理体系
人工智能·openclaw
田井中律.7 小时前
知识图谱(BILSTM+CRF项目完整实现)【第六章】
人工智能·知识图谱