Domain Transform Filter の実装

2013年9月24日 update

こんにちは.今日は久しぶりに画像処理のプログラムをアップしたいと思います.

今回紹介するプログラムは,2011年にSIGGRAPHで発表された

Gastal and Oliveira, “Domain Transform for Edge-Aware Image and Video Processing”, ACM Trans, Graph, 30 (4), pp.69:1-69:11, 2011.

という論文の手法です.

少し画像処理を勉強したことがある人なら,バイラテラル・フィルタという名前を聞いたことがある人も多いと思います.バイラテラル・フィルタは画像全体をぼかすのではなく,輪郭線を残しながら,細かな特徴だけを滑らかにするフィルタです.

バイラテラル・フィルタのようなフィルタをエッジ保存型フィルタ(Edge-preserving filter)などと呼び,このエッジ保存型フィルタをより高速に,より高精度にするため様々な研究が現在もされています.

今回紹介する「Domain Transform Filtering」(これは僕が勝手に言ってる名前です)は,フィルタ関数の定義域(domain)をあらかじめ変換(transform)し,エッジ保存型フィルタを線形のフィルタ処理により実現するというものです.

さらにこのアルゴリズムは,フィルタを画像の各行,各列に独立に適用できるので,並列化が容易です.GPUを用いて並列計算すれば,リアルタイムで動かすことも可能でしょう.

今回,私が書いたコードは,論文の中で紹介されている3つのフィルタのうちRecursive filterというもので,繰り返しフィルタを適用することで最終的な処理結果を得るというものです.より詳しい情報がほしい方は,論文をご覧ください.


結果

[入力画像 1]

flower

[出力画像 1]

flower_out

[入力画像 2]

golf

[出力画像 2]

golf_out

[入力画像 3]

statue

[出力画像 3]

statue_out


ソースコード

今回の記事は以上です.最後までお読みいただきありがとうございました.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください