
信号処理素人老人がScilabの「信号処理のデモ」物色中デス。前回は1次元のConvolutionでした。当然ということで今回は2次元のConvolutionです。何をコンボリューションするのかと言えばアリガチ過ぎるガウシアンフィルタ(ぼかしフィルタ)です。定番中の定番、あれやこれやで何度もやっている気がするんだが。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
Gaussianフィルタ
いろいろ使い途はあるものの、今回のように処理対象が静止画の場合、「ボカシ」をかけるためのフィルタとして使われることが多いじゃないかと思います。忘却力の老人も、本サイトで何度となく練習してきた記憶がある定番のフィルタっす。ちょっと過去回を検索したら以下などにあたりました。
手習ひデジタル信号処理(142) Scilab、{IPCV}、空間的な変換
上記回では、いろいろやっている最後で、Gaussianフィルタに精通された姉貴兄貴の皆さまにはお馴染みのGaussian「ピラミッド」を「建設」してました。一気に行くなあ。
また以下の過去回では、フィルタ可視化ツールを使ってみる材料として「ガウシアン・フィルタ」をビジュアライズしてます。
手習ひデジタル信号処理(163) Scilab、{IPCV}、フィルタの可視化ツール
素直に画像にガウシアンフィルタかけている回が無いな~と探してみたら以下の過去回を見つけました。
AIの片隅で(33) Googleの生成AI、Gemini、ガウシアンフィルタをかけて
上記では、バージョンの古いGemini様の時代にガウシアンフィルタをかけるプログラムをGemini様に生成していただいています。ブツクサ言いながらもフィルタできてます。多分、長足の進歩を遂げている昨今のGemini様にお願いしたら赤子の手を捻るようなもんでしょう(コンプライアンス上不適切なたとえ?)
そんなガウシアンフィルタの説明は例によってGoogleの生成AI、Gemini 2.0 Flashさまにお願いしてしまいます。3ステップで教えてくれてます。まずはカーネルの生成から。
その次のステップとして、オプショナルな正規化をご説明いただいてます。後で実際のデモコードを見てみたら、この時点では正規化を行わず、ボカシ画像を生成した後で「調整」するような形でした。まあ、デモで使っている元画像が元画像だし。後でやる方が簡単か。
この後もGemimi様は具体的な数値を使って処理例を説明してくださっているのですが以下省略。
今回動かしてみるデモ
以下のScilabデモ選択ウインドウから「2次元畳み込み」を選択すると実行できるのが今回のデモです。
「–コードを表示–」をクリックで表示されるデモのソースファイルは以下です。
conv2.dem.sce
そして、デモのソースと同じフォルダ内に置いてある
image.dat
という画像に対して、ガウシアンフィルタをかけてます。正規化、明るさの調整のステップをGemini様とは異なる段階でやっていることを除けば、ほぼほぼ生成AIのお教え通りにかけてます。
なお、2次元のコンボリューションを計算するconv2関数にも、conv1関数同様にオプションあり。今回のデモでは same オプションでした。以下はScilabのHelpファイルからの引用です。
まあ、前回1次元のコンボリューション計算できたのだから、2次元のコンボリューションが計算できてアタリマエか。