前回は画像処理フィルタについてやさしい入門を解説しました。
今回はImageJを用いた画像の濃淡値を操作する空間フィルタリングの技の一部を解説します。
画像をフィルタリングすることの長所・短所を知り、その長所を生かすことができる人は画像を解釈する上で合理的判断ができる人だと思われます。
空間フィルタリングの考え方
前回の「画像処理フィルタ入門」では、コンボリュージョンカーネルという3×3、5×5画素近傍のテンプレートと元画像をコンボリューション(重責積分)することによって空間フィルタリング処理が実施されるという説明をしましたが、今回はもう少し踏み込んでフィルタリングに関する分類を含めて整理します。
画像処理には、濃淡情報に関するデータ変換処理(強度変換)とピクセル配列に対する座標変換処理(空間座標変換)があり、空間フィルタリングは名称のとおり、空間座標変換の1つです。
厳密には、例えば、平均化フィルタなどは画像局所の濃淡値の平均値を再配列する処理でもあり、フィルタリングは強度変換と空間座標変換の両方が相補的に作用します。
ImageJによるフィルタ処理プログラムの書き方
ImageJを本格的に使いたいユーザは、Java言語を用いたプラグインプログラムを勉強するといいでしょう。このとき、1から作ろうとせず、すでに公開されているプラグインの中から、自分がやりたい処理に似ているものを探して、ライセンス条項に違反せずに、改変して勉強させてもらうといいと思います。
ImageJ既存の機能で空間フィルタリングする場合、ImageJのメニューからProcess>Filtersを選択して利用できます。
利用できるフィルタは次のようなものがあります。
(ImageJ日本語情報SeesaaWikiより引用)
いろいろなフィルタがありますが、今回は不均等な濃淡の変化がある画像を均一にするHarris氏が1977年に提唱したCVE(constant variance enhancement)処理を例に見ていきましょう。
このCVE処理は、ImageJを使って、次のような流れで画像を処理していきます。
- 元画像を準備します。(ImageJに表示します。)
- 局所平均化をした画像を作ります。(ImageJメニューのProcess>Filter>mean...で任意のピクセルを入力し、局所平均の大きさを決めます。)
- 元画像からこの局所平均画像を引きます。(Process>Image Calculator...で起動した後、一段目の画像に元画像、2段目の画像に局所平均画像、計算方式は"Sbtract")必要に応じて、Process>Math>Absで、画素値を絶対値にしてください。
- この差分画像の局所分散化した画像を作ります。(同じく、Variance...を選択して処理します。このとき、分散の幅は小さくしましょう。)
- 差分画像から分散画像を割ります。(Process>Image Calculator...で起動した後、一段目の画像に分子となる画像、2段目の画像に分母となる画像、計算方式は"Divide")
いろいろ試したみたのですが、設定値の甘さで、筆者の例ではあまりうまくいかなかったので、参考記事の画像を引用させていただきます。
(もしうまく行ったという事例などありましたら、コメントくださいm(__)m)
(参考記事より引用)
濃淡の差で見えずらくなっていた領域が一目で見れるようになっていることがわかります。もちろん、元画像のコントラストを調整しても見ることができるようになると思いますが、俯瞰的に見る必要があるときには有用な手段ですね。
一点、注意点として、コントラストを均一化する処理にヒストグラムイコライゼーションというものがありますが、この処理は画像の再マップを行うことなく強度のみを最適化しているので、フィルタリングの操作ではなく、ヒストグラムを確率密度関数として、情報エントロピーを最大にする処理です。
今回は画像処理フィルタの中でも特に局所統計量を再マップする画像変換、および強調処理の説明を行いました。
次回も空間フィルタリングについての話を進めます!
Reference
- 「山本修司:ImageJで学ぶ実践医用・バイオ画像処理.INNERVISION(20・13) 2005, p80-82」
0 件のコメント:
コメントを投稿