Python - 直方图上的argmax

标签 python argmax

我试图找到图像左右半部分的峰值(基本上这是一条具有左右车道的道路的二值图像)。 由于某种原因,左侧 argmax 给出的值位于中点右侧,右侧给出的值超出了图像的大小。

这是我的代码

import numpy as np
import cv2

binary_warped = cv2.imread('data\Sobel\warped-example.jpg')
histogram = np.sum(binary_warped[binary_warped.shape[0]//2:,:], axis=0)
plt.plot(histogram)
midpoint = np.int(histogram.shape[0]//2)
leftx_base = np.argmax(histogram[:midpoint])
rightx_base = np.argmax(histogram[midpoint:]) + midpoint
print('Shape {} midpoint {} left peak {} right peak {}'.format(histogram.shape, midpoint, leftx_base, rightx_base))

这是我的输入 Binary Warped Image

在轴上输入形状 Input with shapes

理想情况下,左峰值应在 370 左右,右峰值应在 1000 左右,但是 这是我的结果

Shape (1280, 3) midpoint 640 left peak 981 right peak 1633

Result of above code

哪里出错了?

最佳答案

当您查看直方图的形状时,就会给出线索。它是二维的,因为它的形状为 (1280, 3)

当您调用np.argmax(histogram[:midpoint])时,argmax会在二维数组上调用,并且在找到最大值之前首先会被解开/索引

您可以在 numpy docs 中看到这样的示例:

>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5]])
>>> np.argmax(a)
5

关于Python - 直方图上的argmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743529/

相关文章:

c++ - 为什么有一个用于 argmax abs 的 blas 子例程 (ISAMAX) 而没有用于 argmax?

python - 比较两个数据框中的列名pyspark

python - 如何让 Flask 在端口 80 上运行?

python - numpy 数组的累积 argmax

python - Numpy 数组 : row/column wise argmax with random ties

python - 如何使用 argmax 将索引返回到无法重新整形为矩阵的多维 ndarray 中?

python - 使用Python进行CSV数据分析

python - 使用列表中的项目填充 Pandas 数据框中的缺失值

python - 清空 GAE 中的数据存储

Python:如何解释 np.argmax() 的结果?