1차원 메디안 필터(중앙값 필터)
OpenCV를 사용하면 이미지의 2D 배열에 대해
median = cv2.medianBlur(img,5)
하는 것만으로 처리할 수 있다.
시계열 데이터 등의 1차원 데이터에서도 이상치가 있는 경우,
메디안 필터로 제거할 수 있다.
1차원용의 메디안 필터라고 하는 것은 numpy에도 opencv에도 함수가 보이지 않고,
조금 궁리했기 때문에 메모.
인덱스로 각 점마다 중앙값을 선택하는 영역을 추출하여 2차원 배열로 한 다음,
np.median을 행 방향으로 적용하고 있습니다.
median.py
import numpy as np
import matplotlib.pyplot as plt
# 1次元配列に対するメディアンフィルター
# kはフィルターの大きさで奇数
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)
# 外れ値を含む正弦波
x = np.sin(np.arange(1000) / 50)
x[np.random.randint(0, len(x), 20)] += np.random.randn(20) * 3
# フィルタリング
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])
Reference
이 문제에 관하여(1차원 메디안 필터(중앙값 필터)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/a2kiti/items/9fe9a4518c30c40eb5eb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)