[PYTHON] Eindimensionaler Medianfilter (Medianfilter)

Ein Medianfilter, der häufig in der Bildverarbeitung verwendet wird. Mit OpenCV für eine zweidimensionale Anordnung von Bildern median = cv2.medianBlur(img,5) Es kann nur von verarbeitet werden.

Wenn eindimensionale Daten wie Zeitreihendaten einen Ausreißer enthalten, Es kann mit einem Medianfilter entfernt werden. Ich kann keine Funktion für 1D-Medianfilter in numpy oder opencv finden. Ich habe mir eine Notiz gemacht, weil ich mir ein wenig ausgedacht habe. Nachdem Sie den Bereich extrahiert haben, in dem der Medianwert für jeden Punkt im Index ausgewählt und in ein zweidimensionales Array umgewandelt wurde, Anwenden von np.median in Zeilenrichtung.

median.py


import numpy as np
import matplotlib.pyplot as plt

#Medianfilter für eindimensionales Array
#k ist die Größe des Filters und ist ungerade
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)

#Sinuswelle einschließlich Ausreißer
x = np.sin(np.arange(1000) / 50)
x[np.random.randint(0, len(x), 20)] += np.random.randn(20) * 3

#Filtern
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])

image.png

Recommended Posts

Eindimensionaler Medianfilter (Medianfilter)
Medianfilter mit Röntgenstrahl (Medianfilter)
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter