天天看點

opencv圖像處理05-高斯模糊和均值模糊

模糊原理:

1. 模糊原理和上幾節說的圖像掩模矩陣有很多相似的地方,都是拿一個矩陣(3X3, 5X5)等,和原圖從左向右從上到下分别進行卷積,将卷積值最後指派個目前卷積的中心像素。

2. 那麼其最關鍵的參數,也就在于矩陣的大小和矩陣的值,我們通常稱矩陣為卷積核。

3. 模糊操作的重要原因之一也是為了給圖像預處理時降低噪聲。

卷積示意圖:

opencv圖像處理05-高斯模糊和均值模糊

均值模糊:

均值模糊,也稱為均值濾波,相當于卷積核的矩陣值全部為1/(卷積SIZE),如下圖所示:

opencv圖像處理05-高斯模糊和均值模糊

均值模糊API:

opencv圖像處理05-高斯模糊和均值模糊

高斯模糊:

高斯模糊和均值模糊其原理上的唯一差別隻是在于卷積核的值不同罷了,高斯卷積核矩陣值服從二維高斯函數

也就是說一個圖像與服從二維高斯分布的函數做卷積,由于高斯函數是連續的,所有yaoj要将二維高斯函數進行采樣和離散化,最後得到服從高斯函數規律的卷積核矩陣。

二維高斯函數具體公式如下:

opencv圖像處理05-高斯模糊和均值模糊

圖檔處理後的效果如下:

opencv圖像處理05-高斯模糊和均值模糊

高斯模糊常常用來模拟人眼中的物體,我們經常會看到好多相機擁有對背景模糊的功能,其背後的原理也是高斯模糊效果,讓背景模糊,讓前景更加突出,非常符合人眼的感官效果。

高斯卷積核矩陣采樣後的資料,當矩陣長寬都為5,标準差sig為1.5的時候如下圖:

opencv圖像處理05-高斯模糊和均值模糊

我們可以觀察都矩陣的四周資料值比較小,但是越靠内部值為大,整個矩陣的和為1,二維高斯函數計算後得到的特性,由于矩陣是離散的,以上圖就是經過5X5=25個采樣點後得到的高斯二維矩陣值的分布,然後在拿這個j矩陣與原圖進行卷積就得到了高斯模糊效果。

代碼示範:

在opencv中均值模糊和高斯模糊的代碼非常簡單,隻需要調用提供的API接口就可以完成了,但是其原理我們還是要好好了解并消化的。

#include <opencv2/opencv.hpp> 
#include <iostream> 
using namespace cv;

int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("E:/2.png");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	char input_title[] = "input image";
	char output_title[] = "blur image";
	namedWindow(input_title, CV_WINDOW_AUTOSIZE);
	namedWindow(output_title, CV_WINDOW_AUTOSIZE);
	imshow(input_title, src);

	//均值模糊API
	blur(src, dst, Size(11, 11), Point(-1, -1));
	imshow(output_title, dst);

	Mat gblur;
	//高斯模糊API
	GaussianBlur(src, gblur, Size(11, 11), 4, 4);
	imshow("gaussian blur", gblur);

	waitKey(0);
	return 0;
}