チーム全体、毎週金曜日の朝、一人3分 LT をやっています。忘れないように、また日本語の勉強もしたいと思います、記事として記録します。
日本にとって、卒業の季節がもう終わった。だが、中国にとって、そろそろ卒業季節に入るようです。自分の卒業を思い出した、、、卒業論文についての記憶もよみがえている。そして、先週金曜日は卒業時の作り物の話をしました。
matlab と C++ をよく使って画像処理系のアルゴリズムを実現する。あの時、画像分析と画像処理の知識はそもそも少ないので、勉強しながら、JavaScript を使って、こういうものを作った --> LightImage 、ブラウザは進化したが、ツールはぜんぜん更新されない、バグがどんどん増えていくようです。。。ぼかし処理はまだ使えるのは幸いです。日常生活の中、ぼかし処理はよく見える。PhotoShop などのツールも簡単に画像をぼかせる。
しかし、画像ぼかしの目的は何ですか?ぼかし処理のキーは何ですか?目的の一つは、画像のノイズを軽減、もう一つは、コントラストを下げること。
これから、ピクセル単位でぼかし処理を説明したい、例えば、下に行列があり、テンプレートとして画像をぼかす:
[1 / 9, 1 / 9, 1 / 9,
1 / 9, 1 / 9, 1 / 9,
1 / 9, 1 / 9, 1 / 9];
RGBa は別で計算することを前提として、ある写真の一部ピクセルの R 値は以下のような:
[1, 2, 3,
7, 8, 9,
4, 5, 6];
上のテンプレート行列に基づいて、真ん中のピクセルのぼかし R 値を計算。テンプレートの半径は 1、各位位置の重み係数は 1、それで、8 から 5 ((1 * 1 / 9 + 2 * 1 / 9 + .. + 9 * 1 / 9) / (1 / 9 * 9)) になる。
[1, 2, 3,
7, 5, 9,
4, 5, 6];
でも、中心ピクセルとの距離を問わず、重み係数区別無し全部同じ、そうしたら、ぼかし効果があんまりよくないです。そして、中心との距離より重み係数も違うのガウシアンぼかしを説明したい。なぜかガウシアンを付いている?実は正規分布と関係ある、別称はガウス分布です。
Wiki: 平均値の付近に集積するようなデータの分布を表した連続的な変数に関する確率分布である。中心極限定理により、独立な多数の因子の和として表される確率変数は正規分布に従う。このことにより正規分布は統計学や自然科学、社会科学の様々な場面で複雑な現象を簡単に表すモデルとして用いられている。
画像は二次元ですが、二次元確率密度関数が必要。
こちらの σ は標準偏差。
ここから、計算できました! σ = 1 の場合、テンプレートは:
[0.058549833, 0.09653235, 0.058549833,
0.09653235, 0.15915494, 0.09653235,
0.058549833, 0.09653235, 0.058549833];
重み係数の合計は 1 ではないので、1 / 合計 = 1.28290053、そして、テンプレートは下のようななります:
[0.075113612, 0.1238414, 0.075113612,
0.1238414, 0.20417996, 0.1238414,
0.075113612, 0.1238414, 0.075113612];
最後、どうやってテンプレートを画像に適用しますか?LightImage なら、畳み込みを使っています。