MATLAB,Python,Scilab,Julia比較 第3章 その26【微分フィルタ②】

MATLAB,Python,Scilab,Julia比較 第3章 その26 【微分フィルタ②】 数値計算
MATLAB,Python,Scilab,Julia比較 第3章 その26 【微分フィルタ②】

バックナンバーはこちら。
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

エッジ検出するためには?

太郎くん
太郎くん

で、エッジを検出する方法だけど、
if文の嵐なプログラム以外にどう解決するの?

フクさん
フクさん

要は、山と谷がある部分が協調されれば良い。
山と谷は変化の激しい部分だ。

フクさん
フクさん

変化が激しいと値が大きくなる計算方法がある。
さて、これは何だろうか?

太郎くん
太郎くん

(質問してるのはこっちなのだが・・・。)

太郎くん
太郎くん

変化・・・変化・・・値が動く・・・。

太郎くん
太郎くん

あ!
微分か?!

フクさん
フクさん

正解!

簡単に微分っぽいことを実現するには?

太郎くん
太郎くん

いや、ちょっとまって、
微分するには、導関数を導出して・・・。
画像の導関数ってなんだ??

フクさん
フクさん

別に導関数の導出は不要だ。
値の差を求めるだけでOKだ。
そして、今回は、山と谷を知りたいだけなので、
完璧な微分をする必要はない。
微分と同じ効能を得られる演算をすればOKだ。

太郎くん
太郎くん

その微分と同じ効能ってのはどうすれば得られるの?

フクさん
フクさん

tanh関数で畳み込み積分をする。

太郎くん
太郎くん

畳み込み積分?
やりたいのは微分で積分じゃないんだけど・・・。

フクさん
フクさん

畳み込み積分ではあるが、tanh関数で畳み込むと微分相当の結果になる。

太郎くん
太郎くん

?????

フクさん
フクさん

tanh関数は、「ハイパボリックタンジェント」と言って、
こんな関数になる。

tanh関数、+1、-1
太郎くん
太郎くん

ニューラルネットワークの活性化関数とかで見たことあるような気がする。

tanh関数を使って畳み込み積分

フクさん
フクさん

このtanh関数を使って畳み込み積分をするとこうなる。

tanh関数で畳み込み積分
太郎くん
太郎くん

sin関数がcos関数になってるから、微分ができてる!!

フクさん
フクさん

注意点としては、あくまで微分相当であり、微分そのものではないってところだな。
さっきの画像は、微分っぽさを強調するため、畳み込みの結果にある程度のゲインを掛けてる。
欲しいのは、微分の変化が大きい部分を強調という性質なので、これでも十分と言える。

太郎くん
太郎くん

なるほど。
発想としては微分なんだけど、微分そのものじゃなくて、強調できる機能が欲しいってだけだね。

フクさん
フクさん

あとは、これを離散的に解釈した場合とか、画像のような平面に適用する場合にどうするかを考える。

まとめ

フクさん
フクさん

まとめだよ。

  • エッジ検出をするには、変化の大きさを強調できる微分が相性が良い。
    • だからといって導関数を求める必要はない。
  • tanh関数で畳み込み積分をすると微分相当の結果が得られる。
    • あくまで微分相当であり、微分の結果そのものではない。
    • 欲しいのは変化の強調であるため、問題無い。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました