« デコードのマルチスレッド化について | メイン | カーネル »

2007年12月10日

グラフィックライブラリ:: HDRI

    

ここ数日 HDRI にはまって、なぜかこんなページまで作ってしまった。
無駄にいろんなソフトでの複数露出写真からのHDRI画像の作り方が書いてあります。
でまあ、いろいろなソフトを試して思ったのは、全部イマイチ。と言うか、一長一短があってもどかしい。
HDRI の機能という面で言うのなら、オープンソースの Qtpfsgui がいろいろと出来ていいのだが、いかんせん遅いのとインターフェイスが使い辛いのが難点。
遅いと言っても並の遅さじゃない。画像がずれている時に自動で補正してくれるんだけど、それが致命的に遅い。
最近のでここまで遅いのは久しぶりに出会ったと言うぐらい。
後、トーンマッピングの時、パラメータいじった後、Apply を押すと結果の画像が表示されるのがもどかしい。
リアルタイムでプレビューできないの?と思う。
この2点さえクリアされれば、最もいいソフトになると思うんだけどなぁ。
ああ、後もう一点。保存する時になぜかフロッピーにアクセスするのは止めて欲しい。ギョッとする。

ズレの自動補正は、hugin の align_stack_image が使われている。
で、これが何をしているのか追ってみた。
まずエッジ抽出して、画像内の角を見つける。ガウシアンフィルタとか使っているっぽい。
見付かったすべての角のピクセルに対して、そのピクセルの周辺ブロックを比較対照のその周辺とひたすら比較して最も一致していそうなところを探すことで、ズレを検出しているっぽい。
比較時は、一度グレースケールに変換した後、ブロックの平均輝度を求め、グレースケールでその平均輝度との差を使って判定する。
比較は単純比較ではなくて、二乗和を使ってごにょごにょしてる。平均二乗誤差とかその辺りかな?良くわからないんだけど。
なんかそういう画像処理の知識があんまりないので自信がない。

で、画像はデジカメで撮った 2288x1712 とかのを5枚ぐらい突っ込むんだけど、それを素直に上の処理で自動補正する。
当たり前だけど遅い。
高速化するのなら……
JPEGに限定するのなら、グレースケール変換とかなしで、初めから輝度プレーンを取り出せばいろいろと省けそう。
毎回エッジ抽出とかしているけど、座標は使いまわせる気がする。
ただ、露出オーバーやアンダーの写真はつぶれてしまっている可能性が高いので、毎回やらないとうまくいかないかも。
いきなり元画像でやるのではなく、まず縮小画像でやってから位置をある程度絞込み、その後元サイズの画像で、その周辺だけやればかなり速くなるはず。
後、SIMD 化する。
たぶん、縮小画像のが一番効いてかなり速くなると思うんだけど……



投稿者 Takenori : 2007年12月10日 17:52




comments powered by Disqus
Total : Today : Yesterday : なかのひと