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