次は,空間領域でのフィルタリングを取り扱います.
空間領域では,画像への畳み込み演算という手法でいくつかのフィルタ処理が可能になります.
ここでは,その代表的なフィルタを2つ取り扱い,また,それらフィルタ処理と組み合わせることによって
実現できるアンシャープマスクフィルタを作成します.
おおよそ,以下の3つの演習からなります.
なお,コンパイルするためには,Makefileがすべて用意してありますので,makeを入力するだけで可能です.
おおよその流れは一緒です.畳み込みの演算による平滑化を実現する関数に,
convolve_smooth(...)
として,用意しました.これは,convolve.cの中にあります.
ファイルを分けて関数を書くことも,前の演習と同じです.
main.cはこちら
convolve.cはこちら
Makefileはこちら.
ただし,コピーして使っても動きません.タブ,スペースが区別されるからです.
基本的な流れは,前と同じです.
変更点は,convolve_smoothをconvolve_laplaceに変更し,畳み込む分布をラプラシアンに変更したことです.
そのためのプログラムは次のようになります.
main.cはこちら
convolve.cはこちら
Makefileはこちら.
ただし,コピーして使っても動きません.タブ,スペースが区別されるからです.
アンシャープマスクは,画像の平滑化,画像の差分,画像の画素値への積算,画像の加算,というテクニックを すべて使います.アンシャープマスクを実現するプログラムができれば,初級は卒業でしょう.
ここでの方針としては,アンシャープマスクを実現する関数usmask_un_charを作り,
この関数には,入力画像と出力画像の保存先,画像の幅,高さを指定して入力することにしました.
その他の必要なパラメタなどは,すべてこの関数の中で指定しています.
このように関数を作ると,他でも使い回しができるようになる可能性が高まります.
あとは,プログラムをごらんください.
main.cはこちら
convolve.cはこちら.平滑化を実現します.
unsharp_mask_un_char.cはこちら.
アンシャープマスクを実現します.
Makefileはこちら.
ただし,コピーして使っても動きません.タブ,スペースが区別されるからです.
ここでも,コンパイルにはMakefileを活用しましょう.