« カーネル | メイン | HDRI と エフェクト »

2007年12月10日

グラフィックライブラリ:: ブラー処理

    

ブラー処理は、その範囲が大きくなると処理が増える。
でも、吉里吉里2の矩形ブラー ( ボックスブラー、単純平滑化 ) は、範囲が大きくなってもそれほど負荷が増加しないらしい。
どういうアルゴリズムなんだろうと少し見てみた。
以下のようなアルゴリズムっぽい ( もう少し複雑なことをしてそう。そんなに詳しくは見ていない ) 。

以下の表の値が輝度値だとする。
合計値は、右端から始めて右の値を足し込んで行ったもの。
つまり、右の値 + 自分の輝度値 と言うのを右から順に行ったもの。
ピタゴラスの三角形みたいな感じ。

位置 0 1 2 3 4 5
1 1 1 1 1 1
合計値 6 5 4 3 2 1

で、0 の位置で、幅が4つの輝度値の合計値を得ようとしたら、自分の位置の合計値 - 右方向に4つ移動した位置の合計値 ( 4の位置 ) を計算すれば、合計値は 4 と出る。
幅が、2の場合は、自分の位置の合計値 - 右方向に2つ移動した位置の合計値 ( 2の位置 ) を計算すれば、合計値は 2 と出る。
この方法だと、足しこむ幅が変わっても負荷は変わらない ( ここで言っている幅は右側だけなので実際の半分 ) 。
ただ、端の方は別に処理しないといけないので、少し変わるが。

GPU 任せだと、単純に縮小して拡大するとか、少しずつ位置をずらしてアルファブレンドするなどと言う力技な方法もある。
もっとちゃんとシェーダーを使ってガウシアンフィルタ を実装してもいいんだが。



投稿者 Takenori : 2007年12月10日 19:20




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