中央値フィルタ(ちゅうおうちフィルタ、メディアンフィルタ、英:Median filter)とは、信号処理におけるノイズ除去フィルタのことであり、画像や音声、動画像におけるノイズ除去に応用されている。画像処理の分野で用いられることが多く、被写体の輪郭などのエッジ情報を保存しながら、平滑化することでノイズを除去する効果がある。
説明 中央値フィルタでは、番目の入力信号をその近傍内における中央値で置き換えるフィルタである。中央値の特性から、近傍内の外れ値が除外されることで、インパルスノイズやガウシアンノイズが除去され、信号のエッジも保存される。
1次元信号での実行例 1次元信号での実行例を示す。例として、対象となる1次元信号列を以下のように定める。
この信号を半径1の窓を用いてフィルタリングする。ただし、境界はゼロパディングするものとする。 出力信号とすると、0番目の要素は以下のように計算される。
となる。ここで、を中央値を返す関数とする。
同様に他の各要素は以下のように計算される。
こうしてフィルタ後の信号を得る。 入力信号にあった外れ値()が取り除かれていることがわかる。この特性より、移動平均を計算するフィルタに比べて、インパルスノイズの除去に良い特性を持つことがわかる。
2次元中央値フィルタの実装例 2次元中央値フィルタは、主に画像処理の分野で応用される。
以下に、numpyライブラリを用いたpythonでの実装例を示す。
import numpy as np
def medianFilter(img_i, img_o, r): n = 2*r+1 for i in range(n): for j in range(n): med_window = np.zeros(n*n) for k in range(n): for l in range(n): med_window[k*(n-1)+l] = img_i[i+k,j+l] img_o[i,j] = np.median(med_window)
中央値を求める上で、ソーティングアルゴリズムが実行されることから、計算に時間がかかるフィルタとなっている。 関連項目 中央値 ソート ノイズ 移動平均 信号処理 画像処理 ガウシアンぼかし バイラテラルフィルタ
脚注 出典