A median filter often used in image processing. With OpenCV for a two-dimensional array of images median = cv2.medianBlur(img,5) It can be processed just by.
If there are outliers in one-dimensional data such as time series data, It can be removed with a median filter. I can't find any function for 1D median filter in numpy or opencv. I made a note because I devised a little. After extracting the area where the median is selected for each point in the index and making it a two-dimensional array, Applying np.median in the row direction.
median.py
import numpy as np
import matplotlib.pyplot as plt
#Median filter for one-dimensional arrays
#k is the size of the filter and is odd
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)
#Sine wave with outliers
x = np.sin(np.arange(1000) / 50)
x[np.random.randint(0, len(x), 20)] += np.random.randn(20) * 3
#filtering
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])