
ボックスブラー(ボックス線形フィルタとも呼ばれる)は、空間領域線形フィルタの一種であり、結果画像の各ピクセルの値は入力画像における隣接するピクセルの平均値に等しくなります。これはローパス(「ぼかし」)フィルタの一種です。3×3のボックスブラー(「半径1」)は、行列式で表すことができます。
等しい重みを使用するという特性により、スライディングウィンドウアルゴリズムを使用するよりも大幅に高速な、はるかに単純な累積アルゴリズムを使用して実装できます。[1]
ボックスぼかしはガウスぼかしを近似するためによく使用されます。[2]中心極限定理により、ボックスぼかしを繰り返し適用するとガウスぼかしに近似します。[3]
周波数領域では、ボックスブラーはゼロと負の成分を持ちます。つまり、ボックスのサイズに等しい周期を持つ正弦波は完全にぼかされ、ボックスのサイズよりも短い波長は位相反転する可能性があります。これは、元の画像では2つの明るい点の間に暗い点があるはずの場所に、2つのボケ円が接触して明るい点を形成する場合などに見られます。
拡張機能
- Gwosdekらは、Box Blurを小数半径を取るように拡張しました。1次元フィルタのエッジが小数で拡大されます。これにより、整数丸め誤差が排除されるため、ガウス近似が若干改善されます。[3]
- Mario Klingemannは、重みを積み重ねることで、1回のパスでガウス分布の外観をよりよくエミュレートする「スタックブラー」を開発しました。[4] [5]この手法で形成される三角形のインパルス応答は、2回のボックスブラーに分解されます。[3]
- Bhatiaらによるスタック積分画像は、いくつかのボックスブラーの加重平均を取り、ガウス応答曲線に適合させます。[3]
実装
次の疑似コードは、3x3 ボックスのぼかしを実装します。
ボックスぼかし(画像)
{
newImage を image に設定します。
newImage の x /*row*/、y/*column*/ に対して次の操作を実行します。
{
// カーネルが適合しません!
x < 1 または y < 1 または x + 1 == 幅または y + 1 == 高さの場合:
続く;
// P を 9 ピクセルの平均に設定します。
XXX
XPX
XXX
// 平均を計算します。
合計 = image[x - 1, y + 1] + // 左上
image[x + 0, y + 1] + // 上中央
image[x + 1, y + 1] + // 右上
image[x - 1, y + 0] + // 左中央
image[x + 0, y + 0] + // 現在のピクセル
image[x + 1, y + 0] + // 右中央
image[x - 1, y - 1] + // 左下
image[x + 0, y - 1] + // 低中心
image[x + 1, y - 1]; // 右下
newImage[x, y] = 合計 / 9;
}
newImage を返します。
}
この例では、カーネル内に収まらない画像の端は処理されていないため、これらの領域はぼやけません。実際には、この問題は次のように処理するのが適切です。 [3]
- 色の欠如を表現するためにアルファ チャネルを導入します。
- 品質順にランク付けされた値を入力して境界を拡張します。
- 境界線に鏡像を塗りつぶす
- 最後のピクセルから一定の色で塗りつぶす
- 固定色のパッド
半径rとNピクセルのボックスブラーを実装する際には、いくつかの最適化を適用できる。[6]
- ボックスブラーは分離可能なフィルタであるため、各ピクセルについて、水平方向と垂直方向の2 r + 1ピクセルを平均化する1Dパスを2回実行するだけで済みます。これにより、計算量はO( Nr 2 )からO( Nr )に低減されます。デジタル信号処理用語では、各パスは移動平均フィルタと呼ばれます。
- 累積。このアルゴリズムは、各ピクセルの合計を破棄する代わりに、前回の合計を再利用し、古いピクセルを減算し、ぼかし範囲の新しいピクセルを追加することで合計を更新します。同様に、合計領域テーブルも使用できます。これにより、計算量はO( Nr )からO( N )に低減されます。
- ガウスぼかしを近似するために複数のパスで使用される場合、カスケード積分器-コムフィルタ構造により、1回のパスで同等の操作を行うことができます。[7]
参照
参考文献
- ^ ヴォイチェフ・ヤロシュ。 2001. 高速画像畳み込み。
- ^ W3C SVG1.1仕様、15.17フィルタプリミティブ「feGaussianBlur」。
- ^ abcde Getreuer, Pascal (2013年12月17日). 「ガウス畳み込みアルゴリズムの概要」. Image Processing on Line . 3 : 286–310 . doi : 10.5201/ipol.2013.87 .(コードドキュメント)
- ^ 「StackblurとQuadratic Stackblur」。observablehq.com 。 2018年11月12日。
- ^ 「Androidで画像をぼかす方法」Medium、2020年2月10日。
- ^ Kutsvir, Ivan. 「最速のガウスぼかし(線形時間で)」 . 2020年4月4日閲覧。
- ^ Sitaker, Kragen. 「うーん、コステラが発見したカーネル族がまさに均一なカーディナルBスプラインであるという私のメモはさておき…」Hacker News。