さらに異なるぼかしが必要

ガウスぼかしフィルターによる画像のぼかしは、さまざまなアプリケーションで広く使用されています。 しかし、場合によっては、調整に役立つパラメーターが1つだけであるサイズ(サイズ)だけでなく、すべての場合に1つのフィルターよりも少し多様性が必要な場合があります。 この記事では、他のぼかしの実装をいくつか見ていきます。









はじめに



ガウスぼかし効果は線形演算であり、フィルターマトリックスによる画像の畳み込みを数学的に表します。 さらに、画像内の各ピクセルは、特定の重み係数で取得された近くのピクセルの合計で置き換えられます。



フィルターは、ガウスと呼ばれる関数から構築されているため、ガウスと呼ばれます。 ex2







2次元バージョンは、縦座標軸を中心とした回転によって取得されます。 ex2+y2







座標の各ペアについて xy 中心までの距離は次の式で計算されます  sqrtx2+y2 、ガウス関数への引数として渡されます-簡単にわかるように、 e\左 sqrtx2+y2\右2 に減少 ex2+y2



セグメント上に構築されたマトリックス [3.3] ある程度のサンプリングでは、次のようになります。





 left beginarrayccccccc1.52 times1082.26 times1060.00004540.0001230.00004542.26 times1061.52\回1082.26\回1060.0003350.006740.01830.006740.0003352.26\回1060.00004540.006740.1350.3680.1350.006740.00004540.0001230.01830.3681.000.3680.01830.0001230.00004540.006740.1350.3680.1350.006740.00004542.26 times1060.0003350.006740.01830.006740.0003352.26 times1061.52 times1082.26 times1060.00004540.0001230.00004542.26 times1061.52\回108 endarray right







または、次のように、マトリックス要素の値を輝度レベルと見なす場合:







信号処理の観点では、これはインパルス応答と呼ばれます。これは、このフィルターと単一のインパルス(この場合はピクセル)の畳み込みの結果が正確に見えるためです。



最初に、ガウスは無限の間隔で定義されます。 しかし、かなり急速に減衰するため、ゼロに近い値は結果に影響しないため、計算から除外できます。 実際のアプリケーションでは、畳み込み後に画像の明るさが変わらないように、値の正規化も必要です。 また、各ピクセルが同じ色である画像をぼかす場合、画像自体は変更しないでください。



便宜上、座標に追加パラメーターを導入することにより、正規化もよく使用されます \シ (「シグマ」と読む)-範囲内の引数を考慮する [1,1] 、そして \シ ガウスの圧縮率を決定します。





\ frac {e ^ {-\ frac {x ^ 2 + y ^ 2} {2 \ sigma ^ 2}}}} {2 \ pi \ sigma ^ 2}







正規化ディバイダー 2 pi sigma2 ここで、無限大での定積分により分析的に得られます:





 int infty infty int infty inftye fracx2+y22 sigma2\、dxdy=2 pi sigma2







平等が成り立つという事実のために e\左x2+y2\右=ex2ey2 、ガウスぼかしは、最初に行で、次に列で順番に実装できます。これにより、計算を大幅に節約できます。 この場合、1次元の場合の正規化式を使用する必要があります-





\ frac {e ^ {-\ frac {x ^ 2} {2 \ sigma ^ 2}}}} {\ sqrt {2 \ pi \ sigma ^ 2}}









開始する



任意のフィルターの場合、最初に1つの変数から独自の減衰関数を定義する必要があります f 、2つの変数の関数は、 x sqrtx2+y2 どこで x そして y これらは、範囲内の行列要素の座標です 1,1 、さらにマトリックスの要素を設定するために使用されます。 正規化は分析的には考慮されませんが、マトリックスのすべての要素の直接的な合計-これはより単純かつ正確です-離散化後、関数は「間引かれ」、正規化値は離散化のレベルに依存するためです。



行列の要素にゼロから番号が付けられている場合、座標 x または y 式によって計算されます





 frac211







どこで -行または列の要素のシリアル番号、および -要素の総数。



たとえば、5 x 5マトリックスの場合、次のようになります。





 left beginarraycccccf11f left frac121 rightf01f\左 frac121\右f11f\左1 frac12\右f\左 frac12 frac12 rightf left0 frac12 rightf left frac12 frac12\右f\左1 frac12\右f1.0f\左 frac120 rightf0,0f left frac120 rightf1,0f\左1 frac12\右f\左 frac12 frac12\右f\左0 frac12 rightf left frac12 frac12 rightf left1 frac12 rightf1,1f left frac121 rightf0,1f left frac121\右f1,1 endarray right







または、まだゼロである境界値を除外すると、座標は式によって計算されます





 frac2indexsize+1size







マトリックスはそれに応じて次の形式を取ります





 left beginarraycccccf left frac45 frac45 rightf left frac25 frac45\右f\左0 frac45\右f\左 frac25 frac45 rightf left frac45 frac45 rightf left frac45 frac25 rightf left frac25 frac25 rightf left0 frac25 rightf left frac25 frac25 rightf left frac45 frac25 rightf left frac450 rightf left frac250 rightf0,0f left frac250 rightf left frac450 rightf left frac45 frac25\右f\左 frac25 frac25\右f\左0 frac25\右f\左 frac25 frac25\右f\左 frac45 frac25\右f\左 frac45 frac45\右f\左 frac25 frac45\右f\左0 frac45\右f\左 frac25 frac45 rightf left frac45 frac45 right endarray right







マトリックス要素が式によって計算された後、それらの合計を計算し、マトリックスをそれに分割する必要があります。 たとえば、行列を取得する場合





\左 beginarrayccc1414204141 endarray right







すべての要素の合計は40になり、正規化後は次の形式になります





\左 beginarrayccc frac140 frac110 frac140 frac110 frac12 frac110 frac140 frac110 frac140 endarray\右







すべての要素の合計が1になります。



線形減衰



開始するには、次の最も単純な関数を使用します。





\ left \ {\ begin {array} {ll} 1-x、&x <1 \\ 0、&x \ geqslant 1 \\ \ end {array} \ right。











ここでの区分的連続定義では、関数がゼロになることが保証され、回転中に行列の角にアーチファクトがないことが必要です。 さらに、回転は常に正の座標の平方和のルートを使用するため、値の正の部分でのみ関数を決定すれば十分です。 その結果、以下が得られます。







ソフト線形減衰



斜線からゼロ関数への急激な移行は、美意識との矛盾を引き起こす可能性があります。 これを解決するには、関数が役立ちます。





1 fracnxxnn1







その中で n ドッキングの「剛性」を決定し、 n>1 。 例えば n=3 私たちは得る





\左\ {\ begin {array} {ll} 1- \ frac {3 xx ^ 3} {2}、&x <1 \\ 0、&x \ geqslant 1 \\ \ end {array} \右。











フィルター自体は次のようになります







双曲線減衰



別の関数(双曲線など)を使用して、フィルターをより「シャープ」にし、より滑らかにゼロにすることができます。







すべての計算と簡略化の後、式を取得します





\ left \ {\ begin {array} {ll} \ frac {(x-1)^ 2(k x + k + 1)} {(k + 1)(k x + 1)}、&x <1 \\ 0、&x \ geqslant 1 \\ \ end {array} \ right。







どのパラメータ k>0 減衰の性質を決定します。







フィルター自体は( k=5 )方法







ボケ効果



別の方法を使用することもできます-フィルターの上部をシャープではなく、愚かにします。 これを実装する最も簡単な方法は、減衰関数を定数として設定することです。





\ left \ {\ begin {array} {ll} 1、&x <1 \\ 0、&x \ geqslant 1 \\ \ end {array} \ right。











しかし、この場合、私たちは美の感覚とは対照的な強いピクセル化を取得します。 エッジでより滑らかにするために、高次の放物線が役立ちます。そこから、縦座標軸に沿って移動し、二乗することにより、





\ left \ {\ begin {array} {ll} \ left(1-x ^ n \ right)^ 2、&x <1 \\ 0、&x \ geqslant 1 \\ \ end {array} \ right。







さまざまなパラメーター n 幅広いフィルターオプションを取得できます。





n=0.5











n=2











n=10











n=50









そして、減衰機能をわずかに変更することにより、フィルターの端にあるリングを、たとえば次のように、よりはっきりさせることができます。





\ left \ {\ begin {array} {ll} \ left(1-x ^ n \ right)^ 2 \ left(d + x ^ m \ right)、&x <1 \\ 0、&x \ geqslant 1 \\ \ end {array} \ right。







ここパラメータ d 中心の高さを決定し、 m -エッジへの移行のシャープネス。

のために d=0.2m=2n=10 私たちは得る







でも d=0m=12n=2







ガウスバリエーション



ガウス関数自体の機能も直接変更できます。 これを行う最も明白な方法は、指数をパラメータ化することです。今は考慮しませんが、より興味深いオプションを使用します。





\ left \ {\ begin {array} {ll} e ^ {\ frac {kx ^ 2} {x ^ 2-1}}、&-1 <x <1 \\ 0、その他\\ \ end {配列} \右







という事実のために x 単位分母 x21 端数がゼロになる傾向がある  frackx2x21 はマイナスの無限大になる傾向があり、指数自体もゼロになる傾向があります。 したがって、 x21 で関数定義ドメインを圧縮できます  infty infty 前に 1,1 。 また、 x= pm1 ゼロ除算による( 121=0 )関数の値は定義されていませんが、2つの制限があります-一方(内側から)の制限はゼロで、もう一方は無限です:





 undersetx to1 textlime frackx2x21=0











 undersetx to1+ textlime frackx2x21= infty







境界値は間隔に含まれていないため、片側の制限のゼロだけで十分です。 興味深いことに、このプロパティはこの関数のすべての導関数に拡張され、ゼロとの完全な一致を保証します。



パラメータ k ガウス分布との類似性を決定します-大きくなるほど、類似性がより強くなります-線形セクションが増加するため  frac1x21 関数の中心に落ちます。 このため、限界では、元のガウスを取得できると仮定できますが、残念ながら、いいえ、関数はまだ異なります。







今、あなたは何が起こったのかを見ることができます:







k=5











k=2











k=0.5











k=0.1











k=0.01









形状バリエーション



遷移関数を2つの座標から1つの座標に変更することにより  sqrtx2+y2 、ディスクだけでなく他の形状を取得できます。 例:





f left frac left|xy right|+ left|x+y right|2 right















f\左|x\右|+\左|y\右|











複素数に移動すると、より複雑な図を作成できます。





f left frac left| Re leftx+iy1 frac03 right right|+ left| Re leftx+iy1 frac13 right right|+ left| Re leftx+iy1 frac23\右\右| sqrt3\右

















f biggl10\左| Re\左x+iy1 frac18\右\右| biggr cdotf\左|x+iy\右|















f biggl biggl|5 left|x+iy right|x+iy Re biggl cos left frac52 argx+iy right biggr biggr| biggr cdotf\左|x+iy\右|













この場合、座標を変換するときに間隔を超えないようにする必要があります 0,1 -まあ、またはその逆で、引数の負の値に対して減衰関数を再定義します。



いくつかの具体的な例



記事は、特定の画像での実用的なテストなしでは完成しません。 科学的な仕事がないので、 レナのイメージも取りません。柔らかくてふわふわしたものを取ります。







ガウシアナ








双曲線減衰








十字架








指輪








一方向減衰








同じフィルターですが、テキストの場合:

















おわりに



同様に、シャープ化やアウトライン付きのフィルターなど、より複雑なフィルターを作成できます。 また、すでに考慮されているものを変更します。



フィルター係数の値が座標または直接フィルター処理される画像に依存する場合、非線形フィルター処理も特に重要ですが、これはすでに他の研究の対象です。



より詳細には、定数とドッキングするための関数の派生をここで検討しますここで検討するウィンドウ関数は減衰関数としても使用できます-引数c(0,1)を(  frac12 、1)または最初に式によってウィンドウ関数を考慮する  frac12 leftf left fractx+1t1 rightf left fractx1t1\右\右



この記事のWolfram Mathematicaソース文書はこちらからダウンロードできます



All Articles