【画像処理】平均値フィルタの原理・特徴・計算式

この記事では、平均値フィルタによる原理や特徴、計算式についてまとめました。

スポンサーリンク

平均値フィルタとは

本ページの内容は以下動画で解説しています。

平均値フィルタは、注目画素の近傍の画素値の平均値を計算し、その値を新しい画素値とすることから「平均値フィルタ」と呼ばれます。
画像処理では、画像を平滑化(ぼかし)してノイズを除去する空間フィルタとして使用されます。

■入力画像(左)、出力画像(右)

出力画像を見ると、画像にぼかしが効いていて平滑化されていることがわかります。

スポンサーリンク

平均値フィルタのカーネルと計算式

平滑化フィルタのカーネルKは次のようになります。

(1)   \begin{eqnarray*} K=\frac{1}{9} \left[ \begin{array}{ccc} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \\ \end{array} \right] \end{eqnarray*}

見て分かる通り、「注目画素と8近傍の計9画素の平均値を求めています。

9つの画素値の合計値÷9=9つの画素値の平均値

この他にも、注目画素の画素値の重みを近傍8画素の2倍にする場合もあります。
※この方がより自然な平滑化となります。

(2)   \begin{eqnarray*} K=\frac{1}{10} \left[ \begin{array}{ccc} 1 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 1 \\ \end{array} \right] \end{eqnarray*}

スポンサーリンク

【計算例】

入力画像Iと平均値フィルタのカーネルKが次のように与えられたとき、出力画像I'を求めよ。

(3)   \begin{eqnarray*} I= \left[ \begin{array}{ccccc} 0 & 0 & 0 &  0\\ 0& 90 & 90 &  0\\ 0&  0 & 90 &  0\\ 0 & 0 & 0 &  0\\ \end{array} \right], K= \left[ \begin{array}{ccccc} 1/9 & 1/9 & 1/9\\ 1/9 & 1/9 & 1/9\\ 1/9 & 1/9 & 1/9\\ \end{array} \right] \end{eqnarray*}

出力画像の計算

入力画像IとカーネルK畳み込み演算してやると

(4)   \begin{eqnarray*} I'(1,1)&=&(90\cdot 1/9)+(90\cdot 1/9)+(90\cdot 1/9)=30\\ I'(1,2)&=&(90\cdot 1/9)+(90\cdot 1/9)+(90\cdot 1/9)=30\\ I'(2,1)&=&(90\cdot 1/9)+(90\cdot 1/9)+(90\cdot 1/9)=30\\ I'(2,2)&=&(90\cdot 1/9)+(90\cdot 1/9)+(90\cdot 1/9)=30\\ \end{eqnarray*}

となります。
今回、入力画像の端の画素値はそのまま出力画像の画素値にします。
また、0未満の画素値は0とします。

すると、出力画像I'は次のようになります。

(5)   \begin{eqnarray*} I'= \left[ \begin{array}{ccccc} 0 & 0 & 0 &  0\\ 0& 30 & 30 &  0\\ 0& 30 & 30 &  0\\ 0 & 0 & 0 &  0\\ \end{array} \right] \end{eqnarray*}

スポンサーリンク

プログラミングでの実装例

プログラミングによる実装例について下記事で解説しています。

【Python/OpenCV】平均値フィルタ(cv2.Blur)で画像のぼかし・平滑化
Python + OpenCVで平均値フィルタを「NumPy」「cv2.filter2D」「cv2.Blur」で実装し、画像をぼかし・平滑化する方法をソースコード付きで解説します。
【C#】平均値フィルタで画像のぼかし(ノイズ除去)
C#を用いて、平均値フィルタ(移動平均法・平滑化・スムージング)で画像をぼかしてノイズ除去する方法について紹介します。
【画像処理入門】アルゴリズム&プログラミング
この記事では、画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。
画像処理
スポンサーリンク

コメント