噪声
定义:图像中的干扰因素,导致像素值随机变化或异常。
高斯噪声:符合正态分布,导致图像模糊或产生噪点。
椒盐噪声:随机分布的黑白点。
滤波器
定义:用于处理图像噪声的工具,常称为卷积核。
工作原理:在图像上滑动,计算区域内的像素值,修改中心像素值。
线性滤波:通过线性运算处理邻域像素。
均值滤波:计算邻域像素的平均值,平滑图像。
高斯滤波:通过加权平均处理高斯噪声。
非线性滤波:基于像素间的逻辑关系进行运算。
中值滤波:适用于去除椒盐噪声,保留图像边缘细节。
双边滤波:同时考虑空间距离和像素值差异,保留边缘的同时平滑图像。
滤波与模糊
低通滤波器:
允许低频信号通过,抑制高频信号。
用于去除噪点、平滑和模糊图像。
高通滤波器:
抑制低频信号,增强高频信号。
用于增强图像边缘,锐化图像。
均值滤波是一种经典的线性滤波方法。
核心思想:在图像上使用一个指定大小的卷积核(滤波器),计算该卷积核覆盖区域内所有像素的平均****值,并将这一平均值赋给该区域中心像素。
均值滤波的主要步骤包括:
卷积核:卷积核是一个矩形区域。均值滤波像素值对最终结果的贡献是均等的。
滑动过程:卷积核会从图像的左上角开始,逐步在图像上滑动,计算出每个位置的新像素值,直到
覆盖整幅图像。
当卷积核移动到图像边缘时,可能会遇到超出图像范围的情况。这时需要进行边界填充,以确保卷积核能够覆盖边缘的像素。
void blur(
InputArray src, // 输入图像
OutputArray dst, // 输出图像
Size ksize, // 卷积核的大小
Point anchor = Point(-1, -1), // 锚点
int borderType = BORDER_DEFAULT // 边界处理方式
);
方框滤波是一种线性滤波方法,通过应用一个矩形的卷积核来计算并更新图像中每个像素的值。
方框滤波使用的卷积核通常是一个全为1的矩阵。

α 是一个缩放因子,α的值取决于 normalize 参数的设置。
方框滤波的过程与均值滤波一模一样,都采用卷积核从图像左上角开始,逐个计算对应位置的像素值,并从左至右、从上至下滑动卷积核,直至到达图像右下角,唯一的区别就是核值可能会不同。
void boxFilter(
InputArray src, // 输入图像
OutputArray dst, // 输出图像
int ddepth, // 输出图像的深度
Size ksize, // 卷积核大小
Point anchor = Point(-1, -1), // 锚点位置(默认值表示核中心)
bool normalize = true, // 是否进行均值归一化
int borderType = BORDER_DEFAULT // 边界处理方式
);
高斯滤波的卷积核权重并不相同:中间像素点权重最高,越远离中心的像素权重越小。高斯公式如下:

其中的值也是与自适应二值化里的一样,当时会取固定的系数,当kernel大于7并且没有设置时,会使用固定的公式进行计算σ的值:

以3*3****的卷积核为例,其核值如下所示:

卷积核从图像左上角开始,逐个计算对应位置的像素值,并从左至右、从上至下滑动卷积核,直至到达图像右下角,唯一的区别就是核值不同。
void GaussianBlur(
InputArray src, // 输入图像
OutputArray dst, // 输出图像
Size ksize, // 高斯核的大小
double sigmaX, // X方向的标准差
double sigmaY = 0, // Y方向的标准差(可选,默认与sigmaX相同)
int borderType = BORDER_DEFAULT // 边界处理方式
);
中值又叫中位数,是所有数排序后取中间的值。中值滤波没有核值。
而是在原图中从左上角开始,将卷积核区域内的像素值进行排序,并选取中值作为卷积核的中点的像素值。
选择卷积核:使用一个固定大小的卷积核覆盖图像中的局部区域。卷积核的大小通常为3×3、5×5
等。
排序与取中值:对于每个卷积核覆盖的区域,将像素值按照从小到大的顺序排列,取出中间的值作
为该区域中心像素的新值。
重复操作:将卷积核移动到下一个位置,重复以上步骤。
中值是一种非线性操作,效率相比前面几种线性滤波要慢。
void medianBlur(
InputArray src, // 输入图像
OutputArray dst, // 输出图像
int ksize // 卷积核的大小
);
模糊操作基本都会损失掉图像细节信息,尤其前面介绍的线性滤波器,图像的边缘信息很难保留下来。然而,边缘信息是图像中很重要的一个特征,所以这才有了双边滤波。
双边滤波综合考虑距离和色彩的权重结果:
- 空间距离权重:与当前像素点距离越远的像素点,权重越小。--空域--物理距离
- 颜色相似度权重:与当前像素点颜色差异越大的像素点,权重越小。--值域
void bilateralFilter(
InputArray src, //输入图像
OutputArray dst, //滤波后的图像输出
int d, //滤波器领域的直径
double sigmaColor, //控制颜色相似度的参数
double sigmaSpace, //控制空间距离的参数
int borderType = BORDER_DEFAULT//边界处理方式
)
