Gaussian filter: 加重平均化フィルタのひとつであり,重みをガウス分布に近づけたもの.単純な平均化フィルタに比べて,より滑らかで自然な平滑化の効果が期待できる.平均0, 分散σ2 の2次元ガウス分布は次式で表される.
2次元ガウス分布 (σ=4)
アルゴリズム
結果は下記.
//04Smoothing.cpp
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
int main() {
cv::namedWindow("Before", CV_WINDOW_AUTOSIZE);
// Load the source image
cv::Mat src = cv::imread("HorseSports.jpg", 1);
// Create a destination Mat object
cv::Mat dst;
// display the source image
imshow("Before", src);
for (int i = 1; i<51; i = i + 2)
{
// smooth the image in the "src" and save it to "dst"
// blur(src, dst, Size(i,i));
// Gaussian smoothing
cv::GaussianBlur(src, dst, cv::Size(i, i), 0, 0);
//show the blurred image with the text
imshow("Gaussian filter", dst);
//wait for 5 seconds
cv::waitKey(5000);
}
}
主な関数の説明
void namedWindow(const string& winname, int flags)
ウィンドウを作成する
void GaussianBlur(const Mat& src, Mat& dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)
ガウシアンフィルタを用いて画像の平滑化を行う
上記のソースコードでは,ガウシアンブラーの異なるカーネルサイズで平滑化処理した結果を,1つの画像ファイルに出力した.では,次に,ガウシアンブラーの異なるカーネルサイズで平滑化処理した結果を,異なる画像ファイルに出力するコードを書いて実行してみよう.