Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 直方图的全局和局部最大值_Python_Opencv - Fatal编程技术网

Python 直方图的全局和局部最大值

Python 直方图的全局和局部最大值,python,opencv,Python,Opencv,我正在试着把足球场分割开来。我正在关注一篇研究论文 转乘高速列车 抓住色调通道 生成直方图 获取全局和局部最大值(全局最大值可以是max(hist)) 如果局部极大值是全局极大值的20%,考虑它 问题是我不知道如何获得当地的Maximas。我试图在柱状图中捕捉一个峰值列表 我在MatLab上试过,它工作得很好,但我需要用python来做。我尝试过像peakutils这样的库,但没有任何东西能给我想要的结果 def field\u area\u掩码(图像): #转乘高速列车 hsv=cv2.cv

我正在试着把足球场分割开来。我正在关注一篇研究论文

  • 转乘高速列车
  • 抓住色调通道
  • 生成直方图
  • 获取全局和局部最大值(全局最大值可以是
    max(hist)
  • 如果局部极大值是全局极大值的20%,考虑它

    问题是我不知道如何获得当地的Maximas。我试图在柱状图中捕捉一个峰值列表

    我在MatLab上试过,它工作得很好,但我需要用python来做。我尝试过像peakutils这样的库,但没有任何东西能给我想要的结果

    def field\u area\u掩码(图像):
    #转乘高速列车
    hsv=cv2.cvt颜色(图像,cv2.COLOR\u BGR2HSV)
    #捕捉色调通道
    色调=hsv[:,:,0]
    #生成直方图
    hist=cv2.calcHist([hue],[0],无[256],[0256])
    #捕获范围
    历史范围=历史[:121]#0-120
    历史范围=历史范围。重塑(1,-1)[0]
    Hmax=最大值(历史范围)
    plt.绘图(历史范围)
    HiMax=[]需要填充本地最大值列表
    
    参见
    numpy.diff

    从一阶导数可以找到驻点。从二阶导数可以看出这些点是局部最大值还是最小值

    示例:给定你的直方图

    [1, 2, 1, 3, 7, 10, 7, 2] // 0-based index
    
    一阶导数是

    [1, -1, 2, 4, 3, -3, -5] // 1-based index
    
    [-2, 3, 2, -1, -6, -2] // 2-based index
    
    符号在第二、第三和第六元素处变化

    二阶导数是

    [1, -1, 2, 4, 3, -3, -5] // 1-based index
    
    [-2, 3, 2, -1, -6, -2] // 2-based index
    
    第二个元素的符号为(-),局部最大值

    第三个元素的符号为(+),本地最小值

    第6个元素的符号为(-),局部最大值


    全局最大值为10,因此阈值为%20*10=2。第二个元件应被接受为局部最大值

    数值差异

    从一阶导数可以找到驻点。从二阶导数可以看出这些点是局部最大值还是最小值

    示例:给定你的直方图

    [1, 2, 1, 3, 7, 10, 7, 2] // 0-based index
    
    一阶导数是

    [1, -1, 2, 4, 3, -3, -5] // 1-based index
    
    [-2, 3, 2, -1, -6, -2] // 2-based index
    
    符号在第二、第三和第六元素处变化

    二阶导数是

    [1, -1, 2, 4, 3, -3, -5] // 1-based index
    
    [-2, 3, 2, -1, -6, -2] // 2-based index
    
    第二个元素的符号为(-),局部最大值

    第三个元素的符号为(+),本地最小值

    第6个元素的符号为(-),局部最大值


    全局最大值为10,因此阈值为%20*10=2。第二个元素应被接受为局部最大值。

    我能够使用
    scipy.signal
    的方法
    argrelextrema
    找到峰值。 我将它与
    np.greater
    一起使用

    peaks=argrelextrema(历史范围,np.更大)


    我能够使用
    scipy.signal
    的方法
    argrelextrema
    找到峰值。 我将它与
    np.greater
    一起使用

    peaks=argrelextrema(历史范围,np.更大)


    可能会对您有所帮助。您还可以从sklearn模块中查看函数。请参阅可能对您有所帮助。您还可以从sklearn模块中查看函数。必须抑制主峰两侧高于任何其他局部最大值的所有点,等等。请参见并不总是如此简单。必须抑制主峰两侧高于任何其他局部最大值的所有点。另请参见