畳込みフィルタの考え方

はじめに

画像処理のフィルタでよく使われる畳込みフィルタについて自分の考え方をまとめてみた。

とりあえず関数を試してみたい方

実験用プログラム OpenCV_test の GitHubリポジトリ
URL
https://github.com/iryachi/OpenCV_test
実行ファイルだけ
https://github.com/iryachi/OpenCV_test/releases
使い方
https://iryachi.stars.ne.jp/opencv_test_imple/

畳込みフィルタについて

エッジ検出やノイズ除去でよく使われる手法で、OpenCV の関数では、
soble, laplacian, blur, gaussian など様々なところで使われている。
基礎知識として必要なのは “注目画素” と “カーネル” の意味。

注目画素

計算の起点となり、得られた結果を反映する画素。

カーネル

計算に使用する重み(係数)のまとまり。(図は平滑化フィルタ)

実際の計算方法

入力イメージとカーネルが下図の場合で考える。

●最初の画素の計算

(200 × 0.1) + (150 × 0.2) + (100 × 0.3) ← 1番目の行
+(150 × 0.4) + (100 × 0.5) + (10 × 0.6) ← 2番目の行
+(100 × 0.7) + (10 × 0.8) + (0 × 0.9) ← 3番目の行
= 274

●注目画素を移動して計算 (境界は今回無視)

(150 × 0.1) + (100 × 0.2) + (150 × 0.3) ← 1番目の行
+(100 × 0.4) + (10 × 0.5) + (100 × 0.6) ← 2番目の行
+(10 × 0.7) + (0 × 0.8) + (10 × 0.9) ← 3番目の行
= 201

●注目画素を順次移動していく

終わりに

境界条件をどうするか、カーネルのサイズや基準をどうするか(アンカー)とか色々あるけど、基本的にはこの考え方がわかってたら畳込みフィルタのイメージはできると思う。