OpenCV|ビデオフィルタリング技術:ハイブリッド


チークはピントが合っていない写真のように、ビデオを柔らかくするフィルタリング方法で、シャドウとも呼ばれます.ビデオの隣接するピクセル間のピクセル値が大きく変化しない場合は、ソフトな感じがします.

💡 へいきんフィルタ


Blowlingフィルタでは、簡単に実現できる平均フィルタです.入力ビデオでは、特定のピクセルと周辺のピクセルの算術平均値をビデオピクセル値のフィルタに設定します.

blur()関数

void blur(InputArray src, OutputArray dst, Size ksize, 
Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT);
src:ビデオ入力
dst:ビデオを出力する
ksize:充填カーネルサイズ
アンカー:アンカー座標
borderType:エッジピクセルの拡張
void blurring_mean() {
	Mat src = imread("rose.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	imshow("src", src);

	Mat dst;
	for (int ksize = 3; ksize <= 7; ksize += 2) {
		blur(src, dst, Size(ksize, ksize));

		String desc = format("Mean: %dx%d", ksize, ksize);
		putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);

		imshow("dst", dst);
		waitKey();
	}

	destroyAllWindows();
}


💡 ガウスフィルタ


平均値フィルタよりも自然な混合結果を生成するガウスフィルタ.近似Gauss分布関数を用いて生成したフィルタマスクのフィルタリング方法.ガウス分布は平均を中心として左右対称の鐘形を持つ確率分布であり,正規分布とも呼ばれる.ガウス分布は平均と標準偏差に基づいて分布形状を決定した.画像のGaussフィルタリングでは,主に平均ゼロのGauss分布関数を用いた.

ガウススムージング

ガウスフィルタマスク
中央から周辺までの値が大きいほど、マトリクス要素の値は0に近いほど小さくなります.フィルタ対象画素付近に重み値を1つ増やし、フィルタ対象画素から離れた周囲に重み値を少し加えると、重み付け平均値が求められることになる.

GaussianBlur()関数

void GaussianBlur(InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT);
src:ビデオ入力
dst:ビデオを出力する
ksize:ガウスコアサイズ
SigmaX:x方向のガウスカーネル標準偏差
sigmaY:y方向のGaussカーネル標準偏差
borderType:エッジピクセルの拡張
この関数はsrc画像をGaussフィルタリングし,結果をdst画像に格納する.
void blurring_gaussian() {
	Mat src = imread("rose.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	imshow("src", src);

	Mat dst;
	for (int sigma = 1; sigma <= 5; sigma++) {
		GaussianBlur(src, dst, Size(), (double)sigma);

		String desc = format("Sigma: %d", sigma);
		putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);

		imshow("dst", dst);
		waitKey();
	}

	destroyAllWindows();
}