2017-09-19 63 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