ガウシアンフィルタとは
ガウシアンフィルタは、平均0、標準偏差σのガウス分布を近傍画素値に重み付けを行います。
標準偏差σの値が大きくなるほど、ガウス分布が平たくなり、重みの差が小さくなるため、平滑化の効果も大きくなります。
ガウス分布
$$h_g=\frac{ 1 }{ 2\pi\sigma^2 }\exp{(-\frac{x^2+y^2}{2\sigma^2})}$$
半値幅(メモ)
平滑化の度合いは、半値幅(FWHM)で指定することもできる。
ガウス分布のFWHMは、最大値の半分の位置でのガウス分布の幅を表します。
このFWHMは、次の式で表されます。
$$FWHM = 2\sigma\sqrt{ 2\ln2}$$
値はおよそ次のようになる。
$$FWHM \simeq 2.354820\sigma$$
Python+OpenCV
OpenCVでは、ガウシアンフィルタを
1 | cv2.GaussianBlur(img,( 3 , 3 ), sigmaX, sigmaY) |
の関数が用意されています。
imgには、画像を指定します。
(3, 3)は、カーネルサイズです。
sigmaXは、横軸の標準偏差です。
sigmaYは、縦軸の標準偏差です。
sigmaXのみの指定もできます。その時は、sigmaYにはsigmaXと同じ値になります。
プログラム
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | % matplotlib inline import matplotlib.pyplot as plt import cv2 import numpy as np gray = cv2.imread( 'haruna_kankore.png' , 0 ) #元画像を保存します。 cv2.imwrite( 'gray_model.png' , gray) #ガウシアンフィルタ gaussian = cv2.GaussianBlur(gray, ksize = ( 3 , 3 ), sigmaX = 10 ) #保存 cv2.imwrite( 'gaussian_model.png' , gaussian) #ヒストグラム plt.hist(gray.ravel(), 256 ,[ 0 , 256 ], color = 'red' , label = 'gray' ) plt.hist(gaussian.ravel(), 256 ,[ 0 , 256 ], color = 'blue' , label = 'gaussian' ) plt.legend() plt.savefig( 'figure.png' ) plt.show() |
ガウシアンフィルタ後の画像
元画像
ガウシアンフィルタ:σ=10