メディアンフィルタを実装してみよう
from Confident Mean Teacherを理解する
自力での実装は後回し. 過程と出力を追いたいので出力させた
https://colab.research.google.com/drive/1-d5lOKKAM3aifVoQyWStU0HLstcKTyvI#scrollTo=-jpD7_dK11lH
確かに,中央値を算出して置き換える処理になっている. それを順番に適用していくのか
code: filter.py
def median_filter_manual(image, kernel_size=3):
"""
NumPyだけでメディアンフィルタを実装する関数
"""
h, w = image.shape
# 出力画像用の空の配列を準備
filtered_image = np.zeros((h, w), dtype=np.uint8)
# カーネルの中心からの距離
pad = kernel_size // 2
# 画像の各ピクセルを走査(画像の外側は処理しない)
for i in range(pad, h - pad):
for j in range(pad, w - pad):
# カーネルの範囲内の画素値を取得
neighborhood = imagei-pad : i+pad+1, j-pad : j+pad+1
# 取得した画素値を1次元配列にして、中央値を計算
median_value = np.median(neighborhood)
# 出力画像の中心ピクセルに中央値を代入
filtered_imagei, j = median_value
return filtered_image
https://gyazo.com/cdd616bc6564f4af4811301322c0c21b
音でもやってみる
code: sound.py
def moving_average(signal, window_size):
"""移動平均フィルタを適用する関数"""
# np.convolveを使うと効率的に計算できる
# 'valid'モードは、ウィンドウが完全にかかる範囲のみ計算するため、信号長が短くなる
return np.convolve(signal, np.ones(window_size)/window_size, mode='valid')
convolveは畳み込み演算のことみたい
これは移動平均でメディアンではない
https://gyazo.com/bb897cfb3f9c04ba6249f5cf87de5031
ちょっとやりたいこととズレてるな