2016-09-14 8 views
0

У меня есть массив с двумя различными значениями, которые характеризуют это изображение: enter image description hereудаления шума в пространственных данных

Я хотел бы сохранить линейные тенденции в красном и удалить «шум» (одиночные красные точки). Есть ли хороший способ сделать это?

ответ

1

Если нет способа определить шум от сигнала на основе порогового значения (т. Е. Вся красная точка имеет то же значение или является только флагом 1/0), то относительно простой, но простой в использовании подход может чтобы посмотреть на удаление шума в зависимости от размера комков.

Посмотрите на scipy's label. Это даст вам массив, в котором каждый отдельный «clump» имеет индивидуальный номер. В этом случае просто удалить те функции, которые меньше порогового числа пикселей (n_thresh ниже).

>>> 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 

Поскольку функции по диагонали, вы можете обратить внимание на пример в документаций label о том, что группы по диагонали трогательные пикселей в образце комок.