Python で分離可能なフィルターを使用して 2D ガウス平滑化を実装するように依頼されました。私はそれを行う方法がわかりません...実際、1Dと2Dのガウス平滑化の違いがわかりません。詳細についてはどこで確認できますか?
どうもありがとう
Python で分離可能なフィルターを使用して 2D ガウス平滑化を実装するように依頼されました。私はそれを行う方法がわかりません...実際、1Dと2Dのガウス平滑化の違いがわかりません。詳細についてはどこで確認できますか?
どうもありがとう
2D フィルタリングについて:
ガウス平滑化演算子は、イメージを「ぼかし」、ディテールとノイズを除去するために使用される 2 次元畳み込み演算子です。
画像を操作する場合 - 畳み込みは、周囲の隣接ピクセルの値を考慮して、特定のピクセルの新しい値を計算する操作です。主な要素は畳み込みカーネルです。
畳み込みカーネル - 行列 (任意のサイズ、最もよく使用される正方行列 (デフォルトでは 3x3)
[ ][ ][ ]
[ ][k][ ]
[ ][ ][ ]
畳み込みは非常に簡単に機能します。選択されたピクセルの新しい値を計算するとき、畳み込みカーネルがその中心ピクセルによって適用されます。隣接するピクセルは同じカーネルで覆われています。次に、画像内のピクセルと、特定のピクセルをカバーする畳み込みカーネルの値との積の合計を計算します。結果の合計は、選択したピクセルの新しい値です。ここで、画像の各ピクセルに畳み込みを適用すると、選択した畳み込みカーネルに応じて特定の効果が得られます。
たとえば、次の画像があります。
[47][48][49][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[47][50][42][ ][ ][ ][ ][ ][ ][ ] [ ][ ]
[47][48][42][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ]
そして、畳み込みカーネルがあります:
[0][1][0]
[0][0][0]
[0][0][0]
結果は次の方法で計算されます。
結果 = 47*0 + 48*1 + 49*0 + 47*0 + 50*0 + 42*0 + 47*0 + 48*0 + 42*0 = 48
値が 50 のピクセルにカーネルを適用した結果:
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][48][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][
][ ][ ][ ][ ][ ][ ]
これは、ガウス平滑化の適切な説明です。1D および 2D ガウス平滑化について:
「上に示した 2 次元等方性ガウスの方程式は x 成分と y 成分に分離できるため、畳み込みは実際にはかなり迅速に実行できます。したがって、2 次元畳み込みは、最初に 1 次元ガウスとの畳み込みによって実行できます。 x 方向、次に y 方向の別の 1-D ガウスと畳み込みます。」
このサイトで畳み込みフィルタを適用してみることができます。
これがお役に立てば幸いです。
Python Imaging Libraryを見ることができます。
基本的な考え方はこれです。イメージがあり、カーネルと呼ばれるものがあります。次に、カーネル/フィルターを使用して画像を処理します。これにより、ソース画像の各ピクセルにカーネルを適用し、その結果を宛先画像に追加することによって作成された新しい画像が作成されます。
カスタム カーネルを作成し、それを使用してイメージを処理する方法をより明確にするために、いくつかの変更を加えたイメージ フィルターから。私はこれを試していないので、疑似コードとして表示する必要があります。
import ImageFilter
customKernelData = ( 0.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 0.0 )
customKernel = ImageFilter.Kernel( (3,3), customKernelData )
im = im.filter( customKernel )
あなたの場合、データが実際には 2D ガウス データであるカーネルを使用する必要があります。