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.