アプリ版:「スタンプのみでお礼する」機能のリリースについて

インテルが提供しているOpenCVで画像処理を行う為に画面全体ではなく部分的にもしくは強弱を付けて「ぼかし」をかけたいのですがどの様に行えば良いのか分かりません。部分的に四角く行うにはROIなど使用すれば良いのですが、例えば円形や上下に向けて「ぼかし」が強くなる方法が分からないのです。添付しました画像のようなグラデーションで作成したマスク画像を利用してグラデーション色の強弱で「ぼかし」の強弱を付ける方法などないのでしょうか?どなかた分かる方がいましたらお手数ですがお知らせください。宜しくお願い致します。(OpenCVでは無理であればC++などで再現するサンプルプログラムなど掲載されているサイトなどでも構いません!)

「OpenCVでマスク処理で「ぼかし」は可」の質問画像

A 回答 (3件)

No.2の追記ですが、先ほどの疑似コードは、



OutputImage[i][j].R = (SourceImage[i][j].R * (255 - MaskImageBrightness[i][j]) + UniformFeatheredImage[i][j].R * (MaskImageBrightness[i][j])) / 255;
OutputImage[i][j].G = (SourceImage[i][j].G * (255 - MaskImageBrightness[i][j]) + UniformFeatheredImage[i][j].G * (MaskImageBrightness[i][j])) / 255;
OutputImage[i][j].B = (SourceImage[i][j].B * (255 - MaskImageBrightness[i][j]) + UniformFeatheredImage[i][j].B * (MaskImageBrightness[i][j])) / 255;

のように最大輝度で除算する必要がありました。
重ね重ね失礼いたしました。
    • good
    • 0

No.1の回答者ですが、「画面全体ではなく部分的にもしくは強弱を付けて」ということなので、No.1の方法だけでは一様なぼかし処理でしかないですね。

申し訳ありません。

PhotoshopやGIMPで、マスク画像のチャンネルを8bppの選択範囲として読みこんで、選択範囲内にぼかしフィルタをかける処理と同じものでしょうか?
だとすれば、下記のようなアルゴリズムが最も単純かと思われます。

1. 任意の強度で、まず画像全体に対して一様にぼかしをかける。

2. 元画像の各ピクセルと、一様ぼかし画像の各ピクセルを合成する際に、マスク画像の各ピクセルを重みとして利用する。

下記は入出力画像が同じサイズのRGBカラー画像、マスク画像が同じサイズの8bitグレースケール画像だと仮定した場合の疑似コードです。

OutputImage[i][j].R = SourceImage[i][j].R * (255 - MaskImageBrightness[i][j]) + UniformFeatheredImage[i][j].R * (MaskImageBrightness[i][j]);
OutputImage[i][j].G = SourceImage[i][j].G * (255 - MaskImageBrightness[i][j]) + UniformFeatheredImage[i][j].G * (MaskImageBrightness[i][j]);
OutputImage[i][j].B = SourceImage[i][j].B * (255 - MaskImageBrightness[i][j]) + UniformFeatheredImage[i][j].B * (MaskImageBrightness[i][j]);


Photoshopなどではこんな単純なことはやっていなくて、もっと最適化された高速なアルゴリズムで実装されているのだと思いますが、僕にはせいぜいSSEなどを使うことくらいしか思いつきません。

こんな情報でも参考になるでしょうか?
    • good
    • 0

下記サイトではOpenCVと3x3ガウス フィルタによるぼかし処理(+離散フーリエ変換による高速化)の実装例が紹介されていますが、このフィルタをお手持ちのマスク画像に置き換えるようにすれば良いのでは?


カーネルの各レート(重み)を画像輝度から計算するわけですが、フィルタ画像輝度の総和を事前に求めて、各レートの総和が1となるように正規化する必要があります。

http://iphone.moo.jp/app/?p=955
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!