2016-09-14 2 views
0

Ich habe ein Array mit zwei unterschiedlichen Werten, die dieses Bild charakterisieren: enter image description hereRauschentfernung in räumlichen Daten

Ich mag die linearen Trends in rot halten und das „Rauschen“ (einzelne rote Punkte) entfernen. Gibt es einen guten Weg, dies zu tun?

Antwort

1

Wenn es keine Möglichkeit gibt, das Rauschen des Signals basierend auf einem Schwellenwert zu bestimmen (dh alle roten Punkte haben den gleichen Wert oder sind nur ein 1/0 Flag), könnte dies ein relativ einfacher aber einfach zu implementierender Ansatz sein sein, um das Rauschen basierend auf der Größe der Klumpen zu entfernen.

Werfen Sie einen Blick auf scipy's label. Dadurch erhalten Sie ein Array, in dem jeder einzelne "Clump" eine individuelle Nummer hat. Es ist dann ein Fall, nur jene Merkmale zu entfernen, die kleiner als eine Schwellenanzahl von Pixeln sind (n_thresh unten).

>>> from scipy.ndimage.measurements import label 
>>> import numpy as np 
>>> n_thresh = 1 
>>> a = np.array([[0,0,1,1,0,0],[0,0,0,1,0,0], 
        [1,1,0,0,1,0],[0,0,0,1,0,0], 
        [1,1,0,0,1,0],[0,0,1,1,0,0]]) 
>>> a 
array([[0, 0, 1, 1, 0, 0], 
     [0, 0, 0, 1, 0, 0], 
     [1, 1, 0, 0, 1, 0], 
     [0, 0, 0, 1, 0, 0], 
     [1, 1, 0, 0, 1, 0], 
     [0, 0, 1, 1, 0, 0]]) 
>>> labeled_array, num_features = label(a) 
>>> binc = np.bincount(labeled_array.ravel()) 
>>> noise_idx = np.where(binc <= n_thresh) 
>>> shp = a.shape 
>>> mask = np.in1d(labeled_array, noise_idx).reshape(shp) 
>>> a[mask] = 0 
>>> a 
array([[0, 0, 1, 1, 0, 0], 
     [0, 0, 0, 1, 0, 0], 
     [1, 1, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0], 
     [1, 1, 0, 0, 0, 0], 
     [0, 0, 1, 1, 0, 0]]) 
>>> a 

Da die Funktionen diagonal sind, können Sie auf das Beispiel in label ‚s Dokumentationen, die Gruppen diagonal berührende Pixel in der Probe Klumpen zu zahlen bereit sind.

Verwandte Themen