ガウスフィルタリング

1. コンセプトの紹介

线性平滑滤波ガウス フィルタリングは、ガウス ノイズの除去に適したノイズ リダクション処理の 一種で、画像処理で広く使用されています。

 平たく言えば、ガウス フィルタリングとは、对整幅图像进行加权平均的过程各ピクセルの値が、それ自体と近傍の他のピクセル値の加重平均によって取得されることです。

 ガウス フィルタリングとは、テンプレート (または畳み込み、マスク) を使用して画像内の各ピクセルをスキャンし、具体操作テンプレートによって決定された近傍のピクセルで加权平均灰度值置き換えることです模板中心像素点的值

  平均値フィルタリングとボックス フィルタリングでは、その近傍の各ピクセルの重みは等しくなります。而在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小これに基づいて、近傍内の各ピクセル値の異なる重みの合計が計算されます。

2. 基本原則

 ガウス フィルタリングでは、コンボリューション カーネルの値が 1 ではなくなりました。たとえば、3×3 コンボリューション カーネルは図 2-1 のようになります。
ここに画像の説明を挿入
図 2-1 ガウス フィルタ コンボリューション カーネルの例

 図 2-2 では、左端の画像の 4 行 3 列の位置にある画素値 226 のピクセルに対してガウス コンボリューションを実行し、 のピクセルを計算します运算规则。異なる重量に応じて。
ここに画像の説明を挿入
図 2-2 ガウスコンボリューションの例

 実際の計算では、図 2-3 にコンボリューションカーネルを使用します。
ここに画像の説明を挿入
図 2-3 実際の計算におけるコンボリューション カーネル

 図 2-3 のコンボリューション カーネルを使用して、画素値 226 の 4 行 3 列の位置の画素に対してガウス フィルタリングを実行します。計算方法は次のとおりです。
値 =(40×0.05+107×0.1+5×0.05)
+(198×0.1+226×0.4+223×0.1)
+(37×0.05+68×0.1+193×0.05)
=164

 実際の使用ではガウスフィルタリングでは、さまざまなサイズの畳み込みカーネルが使用される場合があります。たとえば、図 2 ~ 4 には、3×3、5×5、および 7×7 サイズのコンボリューション カーネルが示されています。在高斯滤波中,核的宽度和高度可以不相同,但是它们都必须是奇数
ここに画像の説明を挿入
図 2-4 さまざまなサイズの畳み込みカーネル

每一种尺寸的卷积核都可以有多种不同形式的权重比例たとえば、図 2-5 に示すように、同じ 5×5 コンボリューション カーネルが 2 つの異なる重み比を持つ場合があります。
ここに画像の説明を挿入
図 2-5 同じサイズのコンボリューション カーネルは異なる重み比を持つことができます

在实际计算中,卷积核是归一化处理的。この処理は、図 2-4 の左端にある 10 進形式のコンボリューション カーネルとして、または図 2-5 に示すように分数形式で表現できます。
 また、一部の資料では、与えられたコンボリューション カーネルが正規化されていないことにも注意してください。このとき、コンボリューション カーネルは、図 2-4 の中央と右に示すコンボリューション カーネルのように表現される場合があります。は問題を説明するために使用されており、実際の使用では正規化が必要になることがよくあります。严格来讲,使用没有进行归一化处理的卷积核进行滤波,得到的结果往往是错误的

3. 関数の構文

OpenCVではガウスフィルタリングを実現する関数は でありcv2.GaussianBlur()、この関数の構文形式は以下のとおりです。
dst = cv2.GaussianBlur( src, ksize, sigmaX, sigmaY, borderType )

パラメータ解析:
dst: 戻り値はガウスフィルタリング後の処理結果を示します。
src: は処理する必要がある画像、つまり元の画像です。任意の数のチャネルを持つことができ、各チャネルを個別に処理できます。画像深度は CV_8U、CV_16U、CV_16S、CV_32F、または CV_64F のいずれかである必要があります。
ksize: はフィルター カーネルのサイズです。フィルター カーネル サイズは、フィルター処理中の近隣イメージの高さと幅を指します。需要注意,滤波核的值必须是奇数
sigmaX: コンボリューションカーネルの水平方向(X軸方向)の標準偏差であり、重み比率を制御します。以下の図 2-5 に示すように、異なる sigmaX によって決定されたコンボリューション カーネルは、水平方向の標準偏差が異なります。
ここに画像の説明を挿入
図 2-5 異なる sigmaX によって決定されるコンボリューション カーネル

sigmaY : コンボリューション カーネルの垂直方向 (Y 軸方向) の標準偏差。値を 0 に設定すると、sigmaX の値のみが使用され、sigmaX と sigmaY の両方が 0 の場合は、ksize.width と ksize.height から計算されます。ここで:
  sigmaX = 0.3×[(ksize.width-1)×0.5-1] + 0.8
  sigmaY = 0.3×[(ksize.height-1)×0.5-1] + 0.8
borderType: 境界線のスタイル。この値は境界線のスタイルを決定します。国境に対処する。通常、この値を考慮する必要はなく、デフォルト値を使用してください。

 この関数では、sigmaY 和 borderType 是可选参数。sigmaX 是必选参数,但是可以将该参数设置为 0,让函数自己去计算 sigmaX 的具体值.

4. プログラム例

ノイズのある画像に対してガウス フィルタリングを実行し、フィルタリング結果を表示します。

import cv2
Gn=cv2.imread("Gaussian_noise.jpg") 
Gf=cv2.GaussianBlur(Gn,(3,3),0,0)
cv2.imshow("噪声图像",Gn)
cv2.imshow("高斯滤波处理结果图像",Gf)
cv2.waitKey()
cv2.destroyAllWindows()

プログラム実行後の図 4-1 はノイズ画像、図 4-2 はガウス フィルタリング後の処理画像です。ここに画像の説明を挿入
図 4-1 ノイズ画像

ここに画像の説明を挿入
図 4-2 ガウスフィルタ処理結果画像

おすすめ

転載: blog.csdn.net/weixin_51571728/article/details/121527964