模糊原理:
-
模糊原理和上几节说的图像掩模矩阵有很多相似的地方,都是拿一个矩阵(3X3, 5X5)等,和原图从左向右从上到下分别进行卷积,将卷积值最后赋值个当前卷积的中心像素。
-
那么其最关键的参数,也就在于矩阵的大小和矩阵的值,我们通常称矩阵为卷积核。
-
模糊操作的重要原因之一也是为了给图像预处理时降低噪声。
均值模糊:
均值模糊,也称为均值滤波,相当于卷积核的矩阵值全部为1/(卷积SIZE),如下图所示:
均值模糊API:
高斯模糊:越靠近卷积核的领域权重越大。
均值模糊:领域权重都为1。
而无论是高斯模糊或者是均值模糊,有一个缺点是他们在模糊的时候并不能很好的保留
边缘信息。因此双边滤波便很好客服了这一缺陷。原理如图:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main() {
Mat src, gblur,dst;
src = imread("C:/Users/Luyubo/Pictures/Lena.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
//gaussian blur
GaussianBlur(src, gblur, Size(11, 11), 11, 11);
namedWindow("gaussian blur", CV_WINDOW_AUTOSIZE);
imshow("gaussian blur", gblur);
//medianBlur(src, dst, 3);
//双边滤波
bilateralFilter(src, dst, 15, 100, 5);
namedWindow("BiBlur Filter Result", CV_WINDOW_AUTOSIZE);
imshow("BiBlur Filter Result", dst);
//Mat resultImg;
//Mat kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
//filter2D(dst, resultImg, -1, kernel, Point(-1, -1), 0);
//imshow("Final Result", resultImg);
waitKey(0);
return 0;
}