掲示板お問い合わせランダムジャンプ

トップスペース

2008年04月25日
ガウスぼかしフィルタ&キン肉マン理論で最適化
ガウスぼかし1
 AviUtlのプラグインにぼかしフィルタがあまり存在しないようなので、ガウスぼかしフィルタを作ってみました。いつものところにソース付きでアップしてあります。

 AviUtl プラグイン フィルタ by うえぽん

 テレビのニュース番組などで連行される容疑者の手錠がぼかされていることがありますが、それに似たようなこともできます。こんな感じです。
ガウスぼかし2


●参考にしたサイト
 下のサイトを参考にしました。
 ・MemoNyanDum : ガウスぼかし GaussianBlur
 ・t-pot『ガウスフィルタ』
 ・Gaussian blur - Wikipedia
 基本的なことは上のページを見れば大体分かります。
 上2つのページの補足としては、横と縦の2パスで処理するのはプログラムの理屈を分かりやすくするためのように思えますが、Wikipediaによると、実は高速化にもなっているそうです。O(m*n*M*N)がO((m+n)*M*N)になります。

●キン肉マンを応用した最適化
 このガウスぼかしフィルタは重たいです。しかし何も工夫していない分けではありません。キン肉マンで「6をひっくり返すと9になる」だとか「8を横にすると∞」だといった理論がありましたが、そんな感じで最適化してあります。
 具体的には“横方向へぼかす”→“縦方向へぼかす”と別々の関数で処理しているのを、“横方向へぼかす関数”の出力を縦横逆にすることによって、2パス目の処理も“横方向へぼかす関数”で処理させています。
2pass処理最適化説明

 メモリーのアクセス速度を気にする人は少ないようですが、横方向への処理はピクセルデータがメモリー上に連続するのでCPUの内部キャッシュにヒットしやすくなります。縦方向を横方向へすることによりキャッシュのヒット率が向上し、結果的に処理速度がアップします。実際、これによって処理時間が20%ぐらい短くなりました。
 あと、2つの関数を1つになることでプログラムの修正が容易になります。こうい画像処理はアセンブラレベルで最適化(SSEやSSE2へ対応)されることが多いですが、2つが1つになれば2倍楽になります。ついでにバグも減ります。

●ベンチマーク
 私の環境(Athlon64x2 4200+を2.4GHzにOC)でベンチマークしてみました。σを8にして1280x720の動画をぼかした際の結果です。
-マルチスレッドシングルスレッド
浮動小数点0.172 sec0.344 sec
固定小数点0.235~0.250 sec0.515 sec

 浮動小数点が固定小数点の1.5倍の速さというのに驚きです。Athlon64は浮動小数点処理が速いらしいのでその可能性があります。もしかしたら他のCPUでは固定少数点の方が速いかもしれません。
 あと、マルチスレッド処理によって処理時間が綺麗に2倍になってます。固定小数点だと2倍以上になってますが、これは謎です。

[追記:2008/04/29]
 MMXとSSEに対応して若干速くなりました。

【余談】
 最近テレビでコカ・コーラなどにぼかしを掛けているのをよく見るようになったが、なんでああするんだろうね。
[ 投稿者:うえぽん at 23:59 | AviUtlや画像処理 | コメント(6) | トラックバック(0) ]

この記事へのコメント
質問です
いつもうえぽんさんのプラグイン愛用させてもらってます!
質問・・・というか要望なんですが、これと設定は同じ感じでモザイクのプラグインも作ることはできないでしょうか??
AviUtlで手軽にちょんちょんとモザイクをかけるフィルタが無い気がするので(あっても制限があったりしますし。。
もし可能でしたらお願いします!
投稿者: しん at 2009-02-15 01:49:41
需要があるなら
需要があるなら作ってみようかと思います。

設定できる座標とかはガウスぼかしと同じ(除外する上下左右の幅をする方法)にしようと思いますが、もう一工夫しようと考えてます。
チェックボックスで「左上の座標」と「大きさ」に切り替えられたら良いですよね。
投稿者: うえぽん at 2009-02-15 11:03:39
無題
そうですね。座標でも設定できるようになるとやりやすい気がします!
ありがとうございます。ゆっくり待たせていただきます!
投稿者: しん at 2009-02-15 11:26:14
要望です
映像の一部分だけをぼかさないようにする設定を
追加していただく事はできないでしょうか?
上の2番目の画像で例えると、手錠部分だけぼかさずに
残りの部分をぼかすというような事をしたいのです。
可能でしたらお願いします。
投稿者: にいと at 2010-06-03 09:55:28
にいとさんこんにちは
それでしたらAviUtl公式サイトにある拡張編集のver 0.84で追加された「部分フィルタ」でできますよ。
bmpやpngでマスクを作ることもできまるようです。

拡張編集でもぼかしができるので、もうこのガウスぼかしはいらないかもしれません。
投稿者: うえぽん at 2010-06-03 18:10:45
無題
分かりました。ありがとうございます。
拡張編集を使ってみます。
投稿者: にいと at 2010-06-03 19:59:44

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/14.30/a13493/0000236315.trackback

この記事の固定URL
http://shinshu.fm/MHz/14.30/archives/0000236315.html

記事へのコメント
 
簡単演算認証: 6 x 8 + 5 =
計算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント:
※記事・コメントなどの削除要請はこちら