ガウシアンフィルタとは
ガウシアンフィルタは、平均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では、ガウシアンフィルタを
cv2.GaussianBlur(img,(3, 3), sigmaX, sigmaY)
の関数が用意されています。
imgには、画像を指定します。
(3, 3)は、カーネルサイズです。
sigmaXは、横軸の標準偏差です。
sigmaYは、縦軸の標準偏差です。
sigmaXのみの指定もできます。その時は、sigmaYにはsigmaXと同じ値になります。
プログラム
%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
ヒストグラム
元画像
ガウシアンフィルタ:σ=10