使用滤波核对图像进行卷积运算或非线性运算,以达到去噪或提取特征的目的的图像处理技术
What:对各像素灰度进行简单处理(乘以一个权重),最后求和
归一化方框滤波器和均值滤波器的核基本一致,主要区别是:是否进行归一化处理,如果不进行归一化处理,则表示的是方框滤波
在opencv中的滤波算法如下:
void cv::boxFilter(cv::Mat &imSrc, //输入图像
cv::Mat &imDst, //输出图像
int depth, //图像深度
cv::Size ssize, //方框滤波器的尺寸
cv::Point(-1,-1), //默认以中心点为基准
bool normalize = true, //是否进行归一化处理
int borderType = 4
);
均值滤波器的核的元素全是1,并进行了归一化操作:即每个元素都会除以核的总数
void cv::blur(cv::Mat &imSrc, //输入图像
cv::Mat &imDst, //输出图像
cv::Size ksize, //滤波核的尺寸
Point anchor=Point(-1,-1), //默认以中心点为基准
int borderType=BORDER_DEFA //图像外部像素的边界模式,一般默认值即可
);
形状类似于概率论中的高斯分布模型(正态分布模型)
void cv::GaussianBlur(
cv::Mat &imSrc, //输入图像
cv::Mat &imDst, //输出图像
cv::Size ksize, //高斯滤波核的尺寸
double sigmaX, //高斯核函数在X方向的标准偏差
double sigmaY = 0, //高斯核函数在Y方向的标准偏差
int borderType = BORDER_DEFAULT
);
用像素点领域的灰度值来代替该像素点的灰度值,可以去除最大值和最小值,针对椒盐噪声效果很好
void cv::medianBlur(
cv::Mat &imSrc, //输入图像
cv::Mat &imDst, //输出图像
int ksize //中值滤波核的尺寸
);
双边滤波能够在保持边缘的前提下实现降噪的目的,缺点是效率较慢
基本原理:考虑两个权重因素来组成卷积核
void cv::bilalteralFilter(
cv::Mat &imSrc, //输入图像
cv::Mat &imDst, //输出图像
double sigmaColor, //值域的标准差
double sigmaSpace, //空间域的标准差
int borderType = BORDER_DEFAULT
);