Python - 直方图上的argmax

时间:2018-04-10 00:31:07

标签: 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

错误在哪里?

1 个答案:

答案 0 :(得分:3)

当您查看直方图的形状时,会给出线索。它是2维的,因为它具有import test_celery from celery import chain from celery.result import AsyncResult from celery.utils.graph import DependencyGraph def method(): async_chain = chain(chain(test_celery.tsum.si([1, 2]), test_celery.ident.si(2)), chain(test_celery.tsum.si([2,3]), test_celery.ident.si(3))) chain_task_names = [task.task for task in async_chain.tasks] # run the chain chain_results_tasks = async_chain.apply_async() print("async_chain=", dir(chain_results_tasks)) print("result.get={}".format(chain_results_tasks.status)) # create a list of names and tasks in the chain chain_tasks = zip(chain_task_names, reversed(list(get_chain_nodes(chain_results_tasks)))) xx = list(get_chain_nodes(chain_results_tasks)) # print(dir(chain_results_tasks)) for task in async_chain.tasks: print("dir task={}".format(dir(task))) print("task_name={} task_id={}".format(task.task, task.parent_id)) for i in xx: res = AsyncResult(i) # print("res={}".format(dir(res))) parent = get_parent_node(i) print(parent.build_graph(intermediate=True)) print("parent_task={}".format(dir(parent))) print(xx[-1].build_graph(intermediate=True)) method()

的形状

当您致电(1280, 3)时,{2}数组会调用np.argmax(histogram[:midpoint]),并在找到最大值/索引之前首先解开

你可以在numpy docs中看到一个例子:

argmax