ブログデザイン

画像処理でよく目にする「畳み込み」って?

更新日:2012-02-24 10:51:07 投稿者:mar コメント:0 トラバ:0 カテゴリ:home

調べると行列ってキーワードにぶつかり、積分式が出てきて、、、で?
ってなってる方も多いはず。
私はまさしくこれでして。お恥ずかしい限りでございます。

 

しかしながら分からない訳にもいかなかったので、手探りで色々とjavaで画像処理をしてた訳です。

 

前回BufferedImageで焼きこみやらやってみた訳なんですが、要望と違ったんですね。。。これが

 

まず画像のノイズを除去しようと、3x3(センターと周囲8方向のピクセルを比較するやつ)のフィルターを作った訳です。

何か方法はないかと探る為に。

そこでふと畳み込みって3x3のマトリックスがどうの書いてたな。。。と、再度畳み込みを調べました。
おなじみの「物理かぎしっぽ」が検索にかかり、東北大学工学部のたたみこみ解説の紹介がありましたので、
見てみたところ、単純に範囲内の合成積の事だと分かりました。確かに分かりやすい!

 

て事は、フィルターの時と同様に、あるピクセルと周囲8方向のピクセルの掛け算だと判明。

RGBとかは置いといて。

 

javaで調べたところ、CodeZineのコンボリューションの解説に辿り着く。
Kernel」というクラスがある。
これは、 行列を定義するクラス。次に
ConvolveOp」 というクラス。
これは、KernelをBufferedImageに適用するクラス。

 

しかしここまでで。
私が求めてるのは、指定ピクセルの3x3畳み込みの結果なんです。

どうしたらいいんだ。。。。

「入力ピクセルから出力ピクセルを求めるには、畳み込み演算カーネルに入力ピクセルの周囲の値を乗算します。」

ってカーネルインスタンスに周囲のピクセル値を掛けるとは思えない。。