ガウシアンフィルタ

シェアする

  • このエントリーをはてなブックマークに追加
最近の記事
  • 7/6 【参考書籍】画像処理・機械学習プログラミング OpenCV 3対応
  • 6/20 【Python,matplotlib】動くグラフをAnimationGifに保存する方法
  • 6/17 シグモイド関数の微分
  • 6/15 シグモイド関数
  • 6/13 合成関数の微分
  • 6/12 WordPressで数式エディタ風に数式を入力したい
  • 6/11 PythonをVisual Studioでインストールする方法
  • 6/9 【Python】OpenCVをAnacondaでインストール(Windows編)
  • 6/6 【Python】Anacondaで複数バージョンの環境切り替え
  • 6/6 画像センシング展2017に出展します。
  • 6/1 【Office365】Web版Outlookのフォントサイズ変更
  • 6/1 【Anaconda】モジュールのアップデートでエラー発生
  • 6/1 【Anaconda】コマンドリストの表示
  • 5/29 Windows10パソコン購入
  • 5/24 Anacondaのアンインストール
  • 5/24 【Jupyter Notebook】新規プログラムの作成
  • 5/23 【Python】開発環境の構築
  • 5/23 Pythonはじめました
  • 4/6 【Office365】Web版Outlookのスレッド表示を解除する方法
  • 4/5 【Excel】フーリエ解析(FFT)
  • 3/20 Canny edge detection
  • 3/20 【Excel2016】分析ツールの表示
  • 3/5 【Visual Studio】黒い背景色を白に変更する方法
  • 2/8 【Windows10】拡張モニタに表示されたウィンドウを元に戻す
  • 2/7 複素数の計算
  • 1/18 【Excel】棒グラフの横軸の目盛を0始まりにする
  • 1/16 【Excel】フーリエ変換
  • 1/6 【OpenCV】疑似カラー(カラーマップ)
  • 11/8 【Visual Studio】検索結果のウィンドウ表示
  • 11/3 ニコン 一眼レフカメラ D5500レビュー
  • 10/26 カラーカメラはモノクロカメラを兼ねない
  • 9/6 (Free Soft)Animation GIF Builder
  • 8/30 【C#】タブの無いTabControlっぽいものを作る
  • 8/29 【OpenCvSharp】サンプルプログラムの公開
  • 8/28 【PowerPoint】部分的にカラーにする(セレクトカラー処理)
  • 8/27 【C#】引数の値渡し、参照渡し(ref, out)
  • 8/26 【Word/Excel】図形内に文字を挿入する
  • 8/25 【C#】NumericUpDownコントロール
  • 8/24 ニコン D3400 VS D5500 仕様比較
  • 8/22 【C#】MDIフォームにリサイズ可能なPanelを設置する
  • 8/20 【Visual Studio 2015】文字の色が変、かすむ
  • 8/20 【Visual Studio】行のコピー、切り取り、貼り付け
  • 8/20
  • 8/16
  • 7/7 標準偏差のよくある誤解
  • 6/17 ホーム
  • 6/15
  • 6/15
  • 6/15
  • 6/15

  • 移動平均フィルタでは注目画素周辺の輝度値を単に平均していましが、一般的な画像では 注目画素に近い画素の輝度値は注目画素の輝度値と近い場合が多いですが、注目画素から遠くなればなるほど、注目画素の輝度値とは差が大きくなる場合が多くなります。
    この事を考慮し、注目画素に近いほど、平均値を計算するときの重みを大きくし、遠くなるほど重みを小さくなるようにガウス分布の関数

    を用いてレートを計算しているのがガウシアンフィルタです。
    σの値が小さいほど平滑化の効果は小さくなり、大きいほど効果が大きくなりますが、
    よく以下のカーネルが用いられます。 

    3×3の場合

    ガウシアンフィルタ3×3

    5×5の場合

    ガウシアンフィルタ5×5

    ガウシアンフィルタにはローパスフィルタと同様の効果があるそうです。

    ということで、フィルタ処理した画像をフーリエ変換し、確かめてみました。

    オリジナル(処理前)の画像はこちら↓

    オリジナル画像 二次元フーリエ変換画像
    ガウシアンフィルタオリジナル画像 二次元フーリエ変換画像

    上記の画像にノイズ除去系のガウシアンフィルタ、移動平均フィルタ、メディアンフィルタの
    処理を行い、二次元フーリエ変換を行い確認してみました。

    上記画像に5×5のガウシアンフィルタ処理を行うと

    5×5のガウシアンフィルタ処理 二次元フーリエ変換画像
    ガウシアンフィルタ5×5 ガウシアンフィルタ5×5_フーリエ変換

    5×5の移動平均処理を行うと

    5×5の移動平均処理 二次元フーリエ変換画像
    5×5移動平均フィルタ 5×5移動平均フィルタ_フーリエ変換

    5×5のメディアンフィルタ処理を行うと

    5×5のメディアンフィルタ処理 二次元フーリエ変換画像
    5×5メディアンフィルタ 5×5メディアンフィルタ_フーリエ変換

    確かに処理結果を見てみると、ガウシアンフィルタが最も高周波成分を除去できているように
    思います。

    なぜ、そうなるのか?
    本には数式においても、この効果が証明できるような事が書いてありましたが、ちょっと難しいので、
    カーネルの値について見てみたいと思います。

    そもそも、ある特定の周期の成分を消すためには、どうすれば良いか?というと、
    周期の半分の離れた2点のデータを平均していけば、その周波数の成分を消す事が出来ます。

    周波数除去の原理

    ここで、画像で表すことのできる最も高い周波数は

    となる2画素周期のパターンで、このパターンを消すためには、隣り合う2画素の輝度値を
    平均すると、画像データから最も高周波の成分を除去する事が出来ます。
    しかし、隣り合う2画素の平均の結果は、画素間の位置の輝度値を示してしまうので、
    この平均のさらに平均値を取ります。

    連続する5つの輝度値の値をI-2~I2とすると、平均した値の平均値は

    ガウシアンフィルタ処理アルゴリズム

    となり、なんとこの結果が3×3のガウシアンフィルタの横方向(縦方向)の係数と等しくなります。
    さらに、平均の平均を取ると、5×5のガウシアンフィルタの係数と同じ。
    7×7のガウシアンフィルタまで確認してみましたが、この平均の平均で表すことが出来るようです。

    という訳で、ガウシアンフィルタの式

    で表される係数なら何でも良いと思いつつも、

    ガウシアンフィルタ3×3 ガウシアンフィルタ5×5

    の係数が良く使われるのかも?しれませんね。

    さらにこの係数、半分の半分で求めるのは、ちょっと面倒。
    これがまた都合よく、(a+b)nの式を展開したときの係数に使われる
    パスカルの三角形
    の値

    パスカルの三角形

    と一次元のガウシアンフィルタの係数と等しくなります。(少なくとも7×7ぐらいまでは)
    これを以下のように二次元的に掛け合わせて、係数の合計で割ればガウシアンフィルタの係数となります。
    例えば7×7のガウシアンフィルタの係数では下図のようになります。

    ガウシアンフィルタの係数

    この値を係数の合計(=4096)で割ればガウシアンフィルタの係数の出来上がり!!!
    (このときσの値は約1.3となります。)

    画像処理アルゴリズムへ戻る

    コメント

    1. […] ガウシアンフィルタなどでノイズを除去します […]

    2. […] この擬色などを手っ取り早く消すには、カラーに変換した画像にガウシアンフィルタをかけ、アンシャープマスキングを行うと、少しまともな感じになります。 […]

    3. […] でも、分母分子に出てくる最初のexpの部分はガウシアンフィルタで見たことがあるな~ […]

    4. […] ガウシアンフィルタ(カーネルサイズ7×7) […]