Un filtre médian souvent utilisé dans le traitement d'image. Avec OpenCV pour un tableau bidimensionnel d'images median = cv2.medianBlur(img,5) Il peut être traité simplement par.
S'il existe une valeur aberrante dans les données unidimensionnelles telles que les données de séries chronologiques, Il peut être supprimé avec un filtre médian. Je ne trouve pas de fonction pour le filtre médian 1D dans numpy ou opencv. J'ai fait une note parce que j'ai inventé un peu. Après avoir extrait la zone qui sélectionne la valeur médiane de chaque point de l'index et en fait un tableau à deux dimensions, Application de np.median dans le sens des lignes.
median.py
import numpy as np
import matplotlib.pyplot as plt
#Filtre médian pour un tableau à une dimension
#k est la taille du filtre et est impair
def median1d(arr, k):
w = len(arr)
idx = np.fromfunction(lambda i, j: i + j, (k, w), dtype=np.int) - k // 2
idx[idx < 0] = 0
idx[idx > w - 1] = w - 1
return np.median(arr[idx], axis=0)
#Onde sinusoïdale, y compris les valeurs aberrantes
x = np.sin(np.arange(1000) / 50)
x[np.random.randint(0, len(x), 20)] += np.random.randn(20) * 3
#filtration
y = median1d(x, 5)
plt.figure(1)
plt.clf()
plt.subplot(2, 1, 1)
plt.plot(x)
plt.ylim([-3, 3])
plt.subplot(2, 1, 2)
plt.plot(y)
plt.ylim([-3, 3])