ディベロッパーセンター

ディベロッパーセンター - メディアンフィルタ

メディアンフィルタについて(ツールページ)

●メディアンフィルタとは?

・注目画素周辺画素を取得後、ソートし、中央値を注目画素へ再配置する処理をラスタスキャンで全画素へ行うフィルタ。

 

●処理概要

メディアンフィルタ

図1 処理概要

 

・処理する画像サイズを x × y サイズ (白の格子)とすると、画像xy の仮想イメージサイズ(ネズミ色の枠) は、処理方法を考慮すると、画像サイズの1px(ピクセル)大きくとる必要がある。つまり、X軸:x+2 、 Y軸:y+2 のメモリを確保する。左上の画素位置を[0][0]とし、注目画素として考えた場合、右隣りの周辺画素が[1][0]とする。

 

この注目画素と周辺画素を合わせた9画素を取得し、ソートする。たとえば、注目画素を f ( i , j )として考えた場合、取得する必要のある画素はその周辺1pxの画素すべて。(あらかじめ仮想イメージとして画素値を0で初期化しておく必要がある。)

 

f ( i - 1 , j - 1 ) , f ( i , j - 1) , f ( i + 1, j - 1) , f ( i - 1 , j ) , f ( i , j ) , f ( i + 1 , j ) , f ( i - 1 , j - 1) , f ( i , j - 1 ) , f ( i + 1, j - 1 ) を取得し、ソート後、中央値の画素を再び f ( i , j ) へ挿入する。 それをラスタスキャン(上から下まで左から右へ順次スキャンを繰り返す動作)し、すべての画素に対し、演算を施す。

 

●注意点

・数十GBの莫大なメモリを使用する場合、グローバル変数では暴走するので、クラス変数にて処理を行う必要あり。(メモリリーク考慮、変数解放注意)

・メモリ確保時、オーバーフロー注意。(開発時)

・アルゴリズムは本ソースコードより、学会の論文を参考にするといいとおもいます。(論文通りには作ってません。)

・PHPではシングルスレッドなので注意(PHP ver5.20の場合。ver6からマルチスレッド予定?)

 

●公開データについて

・二次利用許可、二次配布禁止。

・文章・データの確実性は保障できません。

・使用は自己責任で。

 

●ダウンロード

メディアンフィルタPHPソースコード ver 1.01 Download

 

●資料修正点

・2009年3月21日 ver1.01 ソースコード修正(オーバーフロー対策忘れ)

・2009年3月17日 ver1.00 メディアンフィルタソースコード公開

 

●参考文献

情報処理学会論文 - メディアンフィルタの高速アルゴリズム<pdfファイル>

 

情報処理学会 - http://www.ipsj.or.jp/

 

●マルチスレッドについて(実運用面ではシングルスレッドで問題ないですが、興味のある人向け)

・Proc_open関数をごにょごにょするとできるみたい?ですが、詳しくないので、一応情報らしいものを掲載しておきます。

 ・Proc_open関数について(英語)
    http://jp2.php.net/proc_open

 ・Multi-Thread PHP ?(英語)

    http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html