2017-09-19 30 views
0

我已经处理了雷达图像并检测了水,我必须在直方图中找到局部最小值。直方图对每个区域都有一点不同,所以我必须根据每个直方图自动查找局部最小值。在直方图(1D数组)中查找语言环境最小值(Python)

Histogram for Sigma0_VV

我的输入数组是图像值的一维数组(0.82154,0.012211,...)。我知道如何在numpy和matplotlib中创建直方图,但我不知道该怎么做来确定图片中显示的区域最小值。我使用python scipy库。

第一步应该是平滑直方图以便于确定最小值,您能告诉我用什么来平滑数据吗?事情是这样的:

Smoothed/Unsmoothed

+0

请附上您的图像内的问题,而不是作为外部网站的链接 – AK47

+0

我不能包括图片,因为我是新的,并没有足够高的声誉得分。我上传了图片,但系统将它们添加为链接。 – zubro

回答

0

您可以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的文档:

如果你是一维数组a比他们的邻居小中寻找所有条目,你可以尝试

numpy.r_[True, a[1:] < a[:-1]] & numpy.r_[a[:-1] < a[1:], True] 

在SciPy的> = 0.11,你可以使用以下命令:

import numpy as np 
from scipy.signal import argrelextrema 

x = np.random.random(12) 

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

感谢您的支持。我找到了这个代码。你能告诉我什么是“s”。我已经找到了函数的函数,但它有两个数组:“卷积两个N维数组”。 – zubro

+0

我试过了convolve函数,但是我得到了错误:TypeError:convolve()缺少1个需要的位置参数:'in2'。那么是否有可能只用一个数组来使用这个函数呢? – zubro

+0

你使用numpy.convolve()函数还是scipy.signal.convolve()? – Spezi94