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