
メディアンフィルタは非線形デジタルフィルタリング技術であり、画像、[1]信号、[2]およびビデオ[3]からノイズを除去するためによく使用されます。このようなノイズ低減は、後の処理(たとえば、画像のエッジ検出)の結果を改善するための一般的な前処理ステップです。メディアンフィルタリングは、特定の条件下でエッジを保持しながらノイズを除去するため(どの種類のノイズであるかについては後述の説明を参照)、デジタル画像処理で非常に広く使用されており、信号処理にも応用されています。
アルゴリズムの説明
メジアン フィルターの主な考え方は、信号のエントリをエントリごとに実行し、各エントリをエントリとその隣接エントリのメジアンに置き換えることです。この考え方は、各エントリをエントリとその隣接エントリの算術平均に置き換える移動平均フィルターと非常に似ています。隣接エントリのパターンは「ウィンドウ」と呼ばれ、エントリごとに信号全体をスライドします。1 次元信号の場合、最も明らかなウィンドウは最初のいくつかの前後のエントリだけですが、2 次元 (またはそれ以上の次元) データの場合、ウィンドウには指定された半径、楕円、または長方形の領域内のすべてのエントリが含まれている必要があります (つまり、メジアン フィルターは分離可能なフィルターではありません)。[引用が必要]
1次元の例題
たとえば、ウィンドウ サイズが 3 で、各エントリの直前と直後に 1 つのエントリがあり、境界がゼロで埋められた場合、次の単純な 1 次元信号に中央値フィルターが適用されます。
- x = (2, 3, 80, 6, 2, 3) です。
この信号には主に小さな値のエントリがありますが、1 つのエントリは異常に高く、ノイズ スパイクと見なされるため、そのエントリを除去することが目的です。したがって、中央値フィルターされた出力信号y は次のようになります。
- y 0 = med(0, 2, 3) = 2、(境界値は0とみなされる)
- y 1 = med(2, 3, 80) = 3、(2、3、80はすでに昇順になっているので、並べ替える必要はありません)
- y 2 = med(3, 80, 6) = med(3, 6, 80) = 6、(3、80、6を並べ替えて中央値を求めます)
- y 3 = med(80, 6, 2) = med(2, 6, 80) = 6、
- y 4 = med(6, 2, 3) = med(2, 3, 6) = 3、
- y 5 = med(2, 3, 0) = med(0, 2, 3) = 2,
つまり、
- y = (2, 3, 6, 6, 3, 2)。
ノイズ スパイクが本質的に除去されていることは明らかです (信号も少し平滑化されています)。同じデータセットで同じウィンドウ幅の移動平均フィルターの結果は、 y = (1.7, 28.3, 29.7, 29.3, 3.7, 1.7) になります。ノイズ スパイクが移動平均信号の近隣要素に影響を及ぼしており、メディアン フィルターのパフォーマンスがはるかに優れていることがわかります (このタイプのインパルス ノイズの場合)。メディアン フィルターは、インパルス ノイズに影響を受けるエントリの数が (ほぼ) 常にウィンドウ サイズの半分未満になるようにウィンドウを選択できる限り、正のインパルス (スパイク) と負のインパルス (ドロップアウト) の両方で適切に機能します。
境界問題
メジアン フィルターを実装する場合、ウィンドウ全体を埋めるのに十分なエントリがないため、信号の境界を特別な注意を払って処理する必要があります。特定の状況で好まれる可能性のある、さまざまなプロパティを持つスキームがいくつかあります。
- 境界付近の値の中央値を計算する場合、境界値を繰り返してウィンドウを埋めるのに十分なエントリを取得することで、欠損値が埋められます。
- 信号や画像の境界を後で切り取るかどうかにかかわらず、境界の処理を避ける。
- 遠端からの値(境界条件の繰り返し)や信号の反転(境界条件の反射)など、信号の他の場所からエントリを取得します。たとえば、2D画像では、遠方の水平または垂直境界からのエントリが選択されるか、同じ境界のポイントを逆順に繰り返すことができます。
- 境界付近のウィンドウを縮小して、すべてのウィンドウがいっぱいになるようにします。
- ゼロパディングされた境界を想定します。
2次元メディアンフィルタの擬似コード
単純な 2 次元メディアン フィルタ アルゴリズムのコードは次のようになります。
1. outputPixelValue[画像の幅][画像の高さ]を割り当てる 2. ウィンドウを割り当てる[ウィンドウ幅×ウィンドウ高さ] 3. edgex := (ウィンドウ幅 / 2) 切り捨て 4. edgey := (ウィンドウの高さ / 2) 切り捨て
x はedgexから画像の幅まで - edgexを実行します
。yは edgey から画像の高さまで - edgeyを 実行します。
私 = 0
fxを0からウィンドウ幅まで実行fyを0からウィンドウ高さまで実行
ウィンドウ[i] := 入力ピクセル値[x + fx - edgex][y + fy - edgey]
私 := 私 + 1
ウィンドウ内のエントリを並べ替える[]
outputPixelValue[x][y] := window[ウィンドウの幅 * ウィンドウの高さ / 2]
このアルゴリズム:
- 1つのカラーチャンネルのみを処理します。
- 「境界を処理しない」アプローチを採用します (境界の問題に関する上記の説明を参照)。

アルゴリズムの実装の問題
通常、計算の労力と時間の大部分は、各ウィンドウの中央値を計算することに費やされます。フィルターは信号のすべてのエントリを処理する必要があるため、画像などの大きな信号の場合、この中央値計算の効率は、アルゴリズムの実行速度を決定する重要な要素です。上記の単純な実装では、ウィンドウ内のすべてのエントリを並べ替えて中央値を見つけますが、数値リストの中央値のみが必要なため、選択アルゴリズムの方がはるかに効率的です。さらに、一部の種類の信号 (画像の場合が非常に多い) では、整数表現が使用されます。このような場合、ヒストグラムの中央値は、ウィンドウからウィンドウにヒストグラムを更新するのが簡単で、ヒストグラムの中央値を見つけることが特に面倒ではないため、はるかに効率的です。[4]
2次元の例を実演
中央値フィルターは、画像内の各ピクセルの周囲のローカル ウィンドウ (カーネルとも呼ばれる) を考慮して動作します。中央値フィルターを適用する手順は次のとおりです。
- ウィンドウの選択:
- フィルタリングするピクセルを中心とした特定のサイズ (例: 3x3、5x5) のウィンドウを選択します。
- この例では、3x3 ウィンドウを使用します。
- ピクセル値を収集:
- ウィンドウ内のピクセル値を収集します。
- 中央のピクセルには次の値があります。
- ウィンドウ:
- 中央ピクセル: 8
- 値を並べ替える:
- 収集したピクセル値を昇順に並べ替えます。
- 中央のピクセルの場合、ソートされた値は[1、2、3、4、5、6、7、8、9]です。
- 中央値を選択してください:
- 中央値は、ソートされたリスト内の中央の値です。
- この場合、中央値は 5 です。
- 中央のピクセルを置き換えます:
- 元の中心ピクセル値(8)を中央値(5)に置き換えます。
- すべてのピクセルに対して繰り返します:
- 画像内のすべてのピクセルに対して手順 2 ~ 5 を繰り返します。
変換された画像
すべてのピクセルに中央値フィルターを適用すると、変換された画像は次のようになります。 このフィルター処理された画像は、重要な特徴を保持しながら、ノイズの多いピクセルを効果的に除去します。エッジ ピクセルを処理するために、境界ピクセル値が繰り返される仮想の行と列を想定したことを思い出してください。
エッジ保存特性
メディアンフィルタリングは、線形ガウスフィルタリングと同様に、平滑化手法の一種です。すべての平滑化手法は、信号の滑らかな部分や滑らかな領域にあるノイズを除去するのに効果的ですが、エッジには悪影響を及ぼします。ただし、多くの場合、信号内のノイズを減らすのと同時に、エッジを保持することが重要になります。たとえば、エッジは画像の見た目にとって非常に重要です。ガウスノイズのレベルが低~中程度の場合、メディアンフィルタは、指定された固定ウィンドウサイズでエッジを保持しながらノイズを除去するのにガウスぼかしよりも明らかに優れています。 [5]ただし、ノイズレベルが高い場合はガウスぼかしよりもパフォーマンスがそれほど優れているわけではありませんが、スペックルノイズやごま塩ノイズ(インパルス性ノイズ)の場合は特に効果的です。[6]このため、メディアンフィルタリングはデジタル画像処理で非常に広く使用されています。
参照
- エッジ保存フィルタリング
- 画像ノイズ
- 加重中央値
- 疑似メディアンフィルター
- ルルスムージング
- バイラテラルフィルター
- データの有効性が限られている平均値
- スムージング
- シャープニング
- アンシャープマスク
- ハイパスフィルタ
参考文献
- ^ Rezaee, Alireza (2021年4月). 「画像復元のためのパーティションファジーメディアンフィルタ」.ファジー情報とエンジニアリング. 13 (2): 199–210. doi : 10.1080/16168658.2021.1921377 . ISSN 1616-8658.
- ^ Tay, David B. (2023年7月). 「中央値自己回帰グラフフィルタ」. IEEE Signal Processing Letters . 30 :833–837. doi :10.1109/LSP.2023.3292741. ISSN 1070-9908.
- ^ Baboshina, VA; Orazaev, AR; Lyakhov, PA; Boyarskaya, EE (2024年8月). 「バイナリ対称チャネルを介して送信されるビデオのニューラルネットワーク認識システム」. Computer Optics . 48 (4): 582–591. doi :10.18287/2412-6179-CO-1388.
- ^ Huang, Thomas S.; Yang, George J.; Tang, Gregory Y. (1979 年 2 月)。「高速 2 次元メディアン フィルタリング アルゴリズム」(PDF)。IEEE Transactions on Acoustics, Speech, and Signal Processing。27 ( 1): 13–18。doi :10.1109/TASSP.1979.1163188 。
- ^ Arias-Castro, Ery; Donoho, David L. (2009 年 6 月). 「メディアン フィルタリングは、線形フィルタリングよりもエッジを本当によく保持しますか?」Annals of Statistics . 37 (3): 1172–2009. arXiv : math/0612422 . Bibcode :2006math.....12422A. doi : 10.1214/08-AOS604 . MR 2509071. Zbl 1160.62086.
- ^ Arce, Gonzalo R. (2005).非線形信号処理: 統計的アプローチ. ニュージャージー州、米国: Wiley. ISBN 0-471-67624-1。
外部リンク
- 高速MATLAB 1次元メディアンフィルタの実装
- Mathematica MedianFilter関数
- 中央値フィルター
- 高速2次元メディアンフィルタ
- 定数時間での 2 次元メディアン フィルターの実装 (GPL ライセンス) - このアルゴリズムのピクセルあたりの実行時間は、ヒストグラム内の要素数 (通常は、ここでnはチャネルあたりのビット数) に比例しますが、これも定数です。
- さまざまなプログラミング言語で記述された実装 ( Rosetta Code上)
- ドブス博士の記事
- 100 倍以上高速な加重中央値フィルタ
- 円中央値フィルタ 位相画像や方向画像などの円値データ用の中央値フィルタ (C++/Matlab)
