2017-09-19 14 views
0

私はレーダー画像を処理し、水分を検出するヒストグラムで極小値を見つけなければなりません。ヒストグラムは各エリアごとに少し異なりますので、ヒストグラムごとにローカルミニマムを自動的に見つける必要があります。ヒストグラム(1D配列)のロケール最小値を探す(Python)

Histogram for Sigma0_VV

マイ入力アレイは、画像値(0.82154、0.012211、...)の1Dアレイです。私は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のダウンロードドキュメントをご覧ください

あなたは彼らの隣人よりも1次元配列a小さいのすべてのエントリを探しているなら、あなたはscipyのダウンロードで

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

を試すことができますが> = 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"が何であるか教えてください。私はconvole関数を見つけましたが、それは2つの配列のためです: "2つのN次元配列をコンボルブする"。 – zubro

+0

私はconvolve関数を試しましたが、エラーがあります:TypeError:convolve()に1つの必須の位置引数がありません: 'in2'。 1つの配列でこの関数を使うことは可能ですか? – zubro

+0

numpy.convolve()関数またはscipy.signal.convolve()を使用していますか? – Spezi94