python - 有效地从二维似然矩阵(numpy 数组)中提取局部最大值(坐标)

标签 python numpy image-processing object-detection tracking

我正在尝试从 numpy 2D 矩阵中提取局部最大值的坐标。这些值是 0 到 1 之间的数字,表示对象位于该位置的可能性。

我尝试对矩阵进行阈值处理并提取 argmax 并保存坐标并将其值更改为 0 并循环直到遇到阈值。

 detections = []
 while True:
    maxloc = np.unravel_index(np.argmax(scmap),
                              scmap.shape)
    if scmap[maxloc] > 0.9:
        # other code ..
        detections.append(maxloc)
        scmap[maxloc] = 0
# after that, what i did is calculating the euclidean distance 
# between each pair and excluded the ones that does not meet the  
# threshold

我对此并不满意,我认为有更有效优雅的方法来提取局部最大值。想法?

最佳答案

定位局部最大值是 scikit-image 的内置功能,它可以定位某个预定义距离内的最大值。

from skimage.feature import peak_local_max
coordinates = peak_local_max(scmax, min_distance=5)

我不确定这实际上是如何实现的,但一种实现方法是执行非极大值抑制(即迭代矩阵中的每个值并与半径内的所有值进行比较。如果该值在该窗口中不是最大值然后将其设置为某个预定义值,例如零或-inf)。然后将所有非抑制值(可能高于某个阈值)的坐标作为局部最大值的集合。

关于python - 有效地从二维似然矩阵(numpy 数组)中提取局部最大值(坐标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56943362/

相关文章:

python - 性能问题,使用亲和矩阵聚类,特征值

python - 如何解决 python 包的无法在静态 TLS block 中分配内存错误

python - 在 pandas 数据框中为变量填充零,无需按值分组

python - 循环输入数据库 Python 时出现异常

python - 有没有一种方法可以根据交替元素将数据框中的排序值分配给组

delphi - 如何使用 Windows CopyMemory 函数复制 TBitmap 内存

python - Python中根据某些单词分割字符串并删除某些特殊字符

numpy - 受约束的 np.polyfit

python - Numpy 中的 DataType 可以有多小?

swift - 如何将 X 帧混合到一帧以获得运动模糊?