예제 #1
0
파일: emd.py 프로젝트: abrazhe/image-funcut
def find_mode(vec, x=None,SDk = 0.2,max_iter=1e5):
    """Finds first empirical mode of the vector `vec`
    returns mode if it can, returns ``None`` if no local extrema can be found

    Parameters:
      - `vec`: an input 1D vector
      - `x`: an optional vector, `vec=f(x)`
      - `SDk`: tolerance
      - `max_iter`: maximum number of iterations

    Returns:
      - `h`: a mode estimate
    
    """
    h_prev = imf_candidate(vec,x)
    if h_prev is None:
	return None
    for k in xrange(long(max_iter)):
	h1 = imf_candidate(h_prev, x)
	if h1 is None:
	    return h_prev
	sd = np.sum((h1-h_prev)**2)/np.sum(h_prev**2)
	xf,yf,der,mx,mn = lib.locextr(h1)
	zc = np.where(np.diff(np.sign(h1)) > 0 )[0]
	print len(zc), len(mx), len(mn)
	if (abs(len(zc) - len(mx)) < 2) and \
	   (abs(len(mx) - len(mn)) < 2) and \
	   (abs(len(zc) - len(mn)) < 2) and \
	   sd < SDk:
	    return h1
	h_prev = h1
    print "No convergence after %d iterations" % max_iter
    return h1
예제 #2
0
    def _(v1,v2):
	v1n = lib.DFoSD(v1)/len(v1)
	xcorr = np.correlate(v1n, lib.DFoSD(v2), mode='full')
	xcorr = atrous.smooth(xcorr, 2)
	maxima = lib.locextr(xcorr, x=tv1, output='max')
	k = np.argmax([x[1] for x in maxima])
	return maxima[k]
예제 #3
0
def find_mode(vec, x=None, SDk=0.2, max_iter=1e5):
    """Finds first empirical mode of the vector `vec`
    returns mode if it can, returns ``None`` if no local extrema can be found

    Parameters:
      - `vec`: an input 1D vector
      - `x`: an optional vector, `vec=f(x)`
      - `SDk`: tolerance
      - `max_iter`: maximum number of iterations

    Returns:
      - `h`: a mode estimate
    
    """
    h_prev = imf_candidate(vec, x)
    if h_prev is None:
        return None
    for k in xrange(long(max_iter)):
        h1 = imf_candidate(h_prev, x)
        if h1 is None:
            return h_prev
        sd = np.sum((h1 - h_prev)**2) / np.sum(h_prev**2)
        xf, yf, der, mx, mn = lib.locextr(h1)
        zc = np.where(np.diff(np.sign(h1)) > 0)[0]
        print len(zc), len(mx), len(mn)
        if (abs(len(zc) - len(mx)) < 2) and \
           (abs(len(mx) - len(mn)) < 2) and \
           (abs(len(zc) - len(mn)) < 2) and \
           sd < SDk:
            return h1
        h_prev = h1
    print "No convergence after %d iterations" % max_iter
    return h1
예제 #4
0
파일: emd.py 프로젝트: abrazhe/image-funcut
def envelopes(vec, x=None):
    """
    Given vector `vec` and optional `x`, return lower and upper envelopes defined
    by local extrema in vector vec.  Variable `x` defines the abscissa for
    vector `vec`
    """
    from scipy.interpolate import splrep,splev
    xfit,yfit,_,maxlocs,minlocs = lib.locextr(vec,x,sort_values=False)
    if (len(maxlocs) < 1) or (len(minlocs) < 1):
	return []
    if x is None: x = np.arange(len(vec))
    minlocs = np.concatenate([[0],minlocs,[-1]])
    maxlocs = np.concatenate([[0],maxlocs,[-1]])
    lower = splev(x,splrep(xfit[minlocs],yfit[minlocs]))
    upper = splev(x,splrep(xfit[maxlocs],yfit[maxlocs]))
    return lower, upper
예제 #5
0
def envelopes(vec, x=None):
    """
    Given vector `vec` and optional `x`, return lower and upper envelopes defined
    by local extrema in vector vec.  Variable `x` defines the abscissa for
    vector `vec`
    """
    from scipy.interpolate import splrep, splev
    xfit, yfit, _, maxlocs, minlocs = lib.locextr(vec, x, sort_values=False)
    if (len(maxlocs) < 1) or (len(minlocs) < 1):
        return []
    if x is None: x = np.arange(len(vec))
    minlocs = np.concatenate([[0], minlocs, [-1]])
    maxlocs = np.concatenate([[0], maxlocs, [-1]])
    lower = splev(x, splrep(xfit[minlocs], yfit[minlocs]))
    upper = splev(x, splrep(xfit[maxlocs], yfit[maxlocs]))
    return lower, upper