Perl で 画像フィルタ処理

ImageMagick で JPEG から TEXT に変換できて、TEXT ファイルから画像情報を配列に取り込むことが出来たので、いよいよ画像処理をして行きたいと思います。

CMOSセンサやCCDなど、多くの半導体セルをチップに並べて光を電気レベルに変換する過程で、セル毎のばらつきや不良によって滑らかな画像にはならず、点々とノイズが入った画像になります。

そこで、フィルタを使ってノイズを除去して画像を滑らかにしてあげるのですが、要するに周りの色を使ってノイズを消す方法となっています。

いくつかフィルタの手法があるのですが、ここでは、平滑化フィルタ、加重平均化、局所近隣平均化を perl でプログラムしようと思います。


平滑化

averaging

平滑化は画像をぼかして滑らかにする処理です。

左図のように、ターゲットとなる pixel を中心に 3x3 もしくは 5x5 の枠で周りの pixel から色素値を集めて平均値を中心の色素値に置き換えます。

実際に平滑化を行った画像を以下に載せておきます。ぼかして滑らかになっているのが分かるかと思います。

sanma_original
原画
sanma_averaging
平滑化

加重平滑化

gaussian

加重平滑化は単純な平均値でなく、ターゲットとなる中心からの距離に応じて重みを付けています。

加重平滑化を行った画像を以下に載せておきます。単純な平滑化より、ぼかしが弱くかかっていると思います。

sanma_original
原画
sanma_gaussian
加重平滑化

鮮鋭化

sharping

入力画像に対して平滑化処理を施し、その結果を元の画像から引くことにより、元の画像のエッジ部分が取り出されたような画像が得られる。このような処理を鮮鋭化(sharping)処理と呼ばれています。

以下に加重平滑化した後に鮮鋭化した画像を載せておきます。

sanma_original
原画
sanma_sharping
加重平滑化 -> 鮮鋭化

局所近隣平滑化

near_ave

中心のターゲット画素の対し、ターゲット画素の9通りの近傍領域中でその中の画素値の分散が最小になる領域を選び、その平均値をターゲット画素と置き換える。

すると以下のように印象派絵画のとうなフィルタ効果を得ることが出来る。

sanma_original
原画
sanma_near_averaging
局所近隣平滑化


TITLE

自己紹介

50才になる半導体エンジニアです。
大学で電子電気工学を学び、1990年にその分野のまま就職。ASICやマイコンの設計を長く続けてきましたが20年も同じ分野にいると業態も衰退したり変化するもので退職し、今は外資のIT系会社に再就職して設計請負業をやっております。
お問い合わせは
nakata.xianzhi@outlook.com







Linux と 小ネタ

デジタル回路設計

海外駐在後記