バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia3-backnumber/
はじめに
畳み込み演算の微分フィルタの話。
ここまでのまとめ&畳み込みカーネルの方針
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
ここまでのまとめ【再掲】
前回まとめた話を再掲すると、
- 微分特性を付けてエッジ検出したい
- 微分の特性をより強くしたい
- 移動平均でノイズをちょっと除去したい
- 元画像の特徴を残すために単純移動平均じゃなくてガウシアンにしたい
で、これらを一発で解決してくれる畳み込みカーネルがあるとかなんとか言ってたね。
そうそう。
それを今回説明していく。
微分特性を付けてエッジ検出したい
まずは、微分特性を持った畳み込みカーネルの作り方。
これだけでもエッジ検出は可能だ。
\(
K_{dif}=
\begin{bmatrix}
0 \\
1 \\
0 \\
\end{bmatrix}
\begin{bmatrix}
-1 & 1 & 0
\end{bmatrix}=
\begin{bmatrix}
0 & 0 & 0 \\
-1 & 1 & 0 \\
0 & 0 & 0 \\
\end{bmatrix}
\)
この計算の意味がわからん。
まぁ、単純に真ん中の”行”に対して、引き算を実施する行ベクトルを入れ込む。
程度の意味合いだな。
この書き方は、この後に意味を持ってくる。
じゃー、とりあえず放置しよう。
微分の特性をより強くしたい
次は、微分の特性を強くしたい。
以下の数式で畳み込みカーネルを導出する。
\(
K_{dif1}=
\begin{bmatrix}
0 \\
1 \\
0 \\
\end{bmatrix}
\begin{bmatrix}
-1 & 0 & 1
\end{bmatrix}=
\begin{bmatrix}
0 & 0 & 0 \\
-1 & 0 & 1 \\
0 & 0 & 0 \\
\end{bmatrix}
\)
わざと隙間を空けて、離れた範囲で差をとるってやつだね。
移動平均でノイズをちょっと除去したい
次は移動平均の要素を入れ込む。
ここでは、列方向を移動平均、行方向を微分って考え方になる。
\(
K_{pre}=
\begin{bmatrix}
1 \\
1 \\
1 \\
\end{bmatrix}
\begin{bmatrix}
-1 & 0 & 1
\end{bmatrix}=
\begin{bmatrix}
-1 & 0 & 1 \\
-1 & 0 & 1 \\
-1 & 0 & 1 \\
\end{bmatrix}
\)
ほう!
これはまた、面白い感じになったね。
元画像の特徴を残すために単純移動平均じゃなくてガウシアンにしたい
最後にガウシアンだ。
まぁ、さっきの移動平均を追加したものに対してちょい修正するだけだな。
\(
K_{sbl}=
\begin{bmatrix}
1 \\
2 \\
1 \\
\end{bmatrix}
\begin{bmatrix}
-1 & 0 & 1
\end{bmatrix}=
\begin{bmatrix}
-1 & 0 & 1 \\
-2 & 0 & 2 \\
-1 & 0 & 1 \\
\end{bmatrix}
\)
真ん中の行を強くして、結果として元画像の特性が残るようにしたのか。
実は、これら畳み込みカーネルには名称があるのだが、
そこは次回説明しよう。
まとめ
まとめだよ。
- 各種畳み込みカーネル。
- 微分特性を付けてエッジ検出したい。
- 微分の特性をより強くしたい。
- 移動平均でノイズをちょっと除去したい。
- 元画像の特徴を残すために単純移動平均じゃなくてガウシアンにしたい。
バックナンバーはこちら。
コメント