如何找到给定一维阵列中的所有峰值?

2024-06-26 09:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到给定一维数组的所有峰值点,该数组是这样生成的: vertical_projection = np.sum(projCopy, axis=0)(此数组包含二进制图像每列中黑色像素的总和。) 当我打印这个数组时

    [1213 1335 1335 1335 1335 1335 1335 1335 1335 1335 1335 1335 1335 1335
     960    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0  957  958  958  958  959  960  974 1072 1073
     1072 1007 1008 1007  998  998  997  996  996  996  995  907  741  706
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0    0    0    0
     0    0    0    0    0    0    0    0    0    0    0  755 1331 1332]
 

所以我想打印峰值的所有数组索引,而不提供任何阈值来计算峰值


Tags: 图像np二进制阈值像素数组sum黑色
2条回答

您可以使用numpy.argwherenumpy.flatten来接收所需的结果,如下例所示:

import numpy as np

rr = np.array([1213, 1335, 1335, 1335, 1335, 1335, 1335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1008, 1007, 998, 998, 997, 996, 996, 996])
th = 1200
np.argwhere(arr==arr.max()).flatten()

输出:

array([1, 2, 3, 4, 5, 6])

干杯

  1. 在数组非零的位置分隔切片

  2. 在每个切片中,找到最大值

  3. 在每个切片中,划分达到最大值的子切片

  4. 现在返回每个子片的中间部分

1和2可以在阵列的单次传递过程中生成,3和4需要在每个切片中进行第二次局部传递

相关问题 更多 >