1.ガウスフィルタ法(Gauss Filter)
ガウスフィルタリング(Gauss Filter)は、線形フィルタリングの一種である。OpenCV画像フィルタ処理では、平滑化画像、または像ブレ処理にガウスフィルタリングが用いられます。画像処理の雑音低減過程において,特にガウス雑音によって汚染された画像に広く適用されている。
ガウスフィルタリングの基本的な考え方は、画像上の各ピクセルポイントの値は、その自身と近傍の他のピクセルポイントの値によって加重平均された後に得られる。具体的な動作は、画像の各画素点を一つの核(畳込み核、マスク、行列ともいう)で走査し、隣接する領域の各画素値を対応する位置の重みと一致させて加算することである。数学的な観点から,ガウスフィルタリングの過程は,画像とガウス正規分布の畳み込み動作である。
2.ガウス関数の原理
ガウスフィルタリングは、名前の通りガウス正規分布に基づくフィルタです。まずガウス関数を理解します。
2.1 一次元ガウス関数
G(x)= (1/(√2π)σ)*e^(-x^2/2σ^2)
G(x)のはsigmaの採値と大きな関係があります。sigmaの値が大きいほど、画像は緩やかになり、sigmaの値が小さいほど、画像は鋭くなります。
2.2 二次元ガウス関数
G(x,y)= (1/2π^2)*e^(-(x^2+y^2)/2σ^2)
二次元ガウスはガウスフィルタを構築する基礎である。G(x,y)のx軸y軸上の分布は突起の帽子の形です。ここでのsigmaは2つの値、1つはx軸上の成分sigmaX、もう1つはy軸上の成分sigmaYと見なすことができる。画像処理に対しては、sigmaを直接使用して画像の行列を操作しても良いし、sigmaXで画像のラインを操作して、sigmaYで画像の列を操作しても良いです。それらは等価です。
sigmaXとsigmaYが大きいほど、全体の形は扁平に近いです。sigmaXとsigmaYが小さいほど、全体の形状が突起します。
2.3 ガウスフィルタテンプレート
3×3のガウスフィルタテンプレートを例にとって、テンプレートの中心位置を座標原点としてサンプリングします。テンプレートの各位置の座標は、以下の通りです。
(-1,1) | (0,1) | (1,1) |
(-1,0) | (0,0) | (1,0) |
(-1,-1) | (0,-1) | (1,-1) |
このようにして、各位置の座標を二次元ガウス関数Gに持ち込んで、得られた各値を位置順に並べば、テンプレートが得られます。
例えば、ガウスの核を生成するのは3です。σ = 0.8のテンプレート
0.057118 | 0.12476 | 0.057118 |
0.12476 | 0.2725 | 0.12476 |
0.057118 | 0.12476 | 0.057118 |
以上の説明から,ガウスフィルタリングテンプレートにおいて最も重要なパラメータは,ガウス分布の標準偏差σであることを示した。データの離散度を表しています。σ小さい場合は、生成されたテンプレート中心係数が大きいほど、周囲の係数が小さいほど、画像の平滑化効果はそれほど顕著ではない。反対にσ大きい場合は、生成されたテンプレートの各係数の差は大きくなく、平均テンプレートに似ているので、画像の平滑化効果が比較的大きいです。
3.Opencvのガウス関数
関数のプロトタイプ:
void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT);
パラメータの詳細は以下の通りです:
src,画像を入力すると、ソース画像となります。Mat類のオブジェクトを記入すればいいです。これは単独で任意のチャンネル数の写真でもいいですが、画像の深さはCV_であるべきです。8 U,CV_16 U,CV_16 S,CV_32 F及びCV_64 Fの一つ。
dst,ターゲット画像です、ソース画像と同じサイズとタイプが必要です。例えばMat::Cloneを使用して、ソース画像をテンプレートとして、偽のパケット交換のようなターゲット図を初期化することができます
ksize,ガウスカーネルの大きさ。その中でksize.widthとksize.heightは違ってもいいですが、彼らは正数と奇数でなければなりません。あるいは、それらはゼロであってもよく、それらは全部sigmaで計算されています。
sigmaX,Gauss核関数のX方向の標準偏差を表します。
sigmaY,ガウス核関数のY方向の標準偏差を表します。sigmaYがゼロであれば、それをsigmaXとし、sigmaXとsigmaYが0であれば、ksize.widthとksize.heightから計算します。