在直方图中查找区域设置最小值(1D数组)(Python)

在直方图中查找区域设置最小值(1D数组)(Python),python,histogram,minimum,Python,Histogram,Minimum,我已经处理了雷达图像,为了探测到水,我必须在直方图中找到局部最小值。每个区域的直方图都有点不同,所以我必须根据每个直方图自动找到局部最小值 我的输入数组是图像值的一维数组(0.82154,0.012211,…)。我知道如何在numpy和matplotlib中创建直方图,但我不知道如何确定图片中显示的区域设置最小值。我使用pythonscipy库 第一步应该是平滑直方图,以便更容易地确定最小值,您能告诉我如何平滑数据吗?大概是这样的: 您可以使用numpy.convolve()使用numpy平滑

我已经处理了雷达图像,为了探测到水,我必须在直方图中找到局部最小值。每个区域的直方图都有点不同,所以我必须根据每个直方图自动找到局部最小值

我的输入数组是图像值的一维数组(0.82154,0.012211,…)。我知道如何在numpy和matplotlib中创建直方图,但我不知道如何确定图片中显示的区域设置最小值。我使用pythonscipy库

第一步应该是平滑直方图,以便更容易地确定最小值,您能告诉我如何平滑数据吗?大概是这样的:


您可以使用
numpy.convolve()
使用numpy平滑数据,也可以使用以下函数:

import numpy

def smooth(x,window_len=11,window='hanning'):
    if x.ndim != 1:
        raise ValueError, "smooth only accepts 1 dimension arrays."

    if x.size < window_len:
        raise ValueError, "Input vector needs to be bigger than window size."


    if window_len<3:
        return x


    if not window in ['flat', 'hanning', 'hamming', 'bartlett', 'blackman']:
        raise ValueError, "Window is on of 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'"


    s=numpy.r_[x[window_len-1:0:-1],x,x[-2:-window_len-1:-1]]
    #print(len(s))
    if window == 'flat': #moving average
        w=numpy.ones(window_len,'d')
    else:
        w=eval('numpy.'+window+'(window_len)')

    y=numpy.convolve(w/w.sum(),s,mode='valid')
    return y
在SciPy>=0.11中,可以使用以下内容:

import numpy as np
from scipy.signal import argrelextrema

x = np.random.random(12)

# for local minima
argrelextrema(x, np.less)

请在问题中包含你的图片,而不是外部网站的链接。我不能包含图片,因为我是新来的,没有足够高的声誉分数。我上传了图片,但系统将它们添加为链接。谢谢你的回复。我找到了这个代码。你能告诉我什么是“s”吗。我已经找到了卷积函数,但对于两个数组来说是这样的:“卷积两个N维数组”。我尝试了卷积函数,但我得到了错误:TypeError:convalve()缺少1个必需的位置参数:“in2”。那么,是否可以只对一个数组使用这个函数呢?您使用numpy.convolve()函数还是scipy.signal.convolve()?我使用了scipy.signal.convolve(),但当我查看numpy.convolve()时,还有两个数组作为参数(a,v)-numpy.convolve(a,v,mode='full')。我认为它不起作用,但我认为这是因为我有很多值-100万个值,当我改变了图中的箱子数量时,我可以看到它更平滑。非常感谢。
import numpy as np
from scipy.signal import argrelextrema

x = np.random.random(12)

# for local minima
argrelextrema(x, np.less)