【小白】Open-CV 学习笔记 - 6.1 线性滤波 & 6.2非线性滤波

6.1线性滤波

1.1 平滑处理
平滑处理(smoothing)也称模糊处理(bluring),常用于减少图像上的噪点或者失真,降低图像分辨率

1.2 图像滤波与滤波器

目的:

  • 抽出对象的特征作为图像识别的特征模式适应图像处理的要求
  • 消除图像数字化混入的噪声

要求:

  • 不能损坏图像的轮廓及边缘等重要的信息
  • 图像清晰视觉效果好
  • 平滑滤波的目的: 模糊消除噪声
  • 空间域平滑滤波:简单平均法,就是求邻近像元点的平均亮度值,邻域越大效果越好,但是过大会使边缘信息- 损失过大。
  • 滤波器:可以把滤波器想像为一个加权系数的窗口

常用的方法:

  • 方框滤波:Boxblur函数
  • 均值滤波(邻域平均滤波):Blur函数
  • 高斯滤波:GaussianBlur函数
  • 中值滤波:medianBlur函数
  • 双边滤波:bilateralFilter函数

1.3 线性滤波器

  • 低通滤波器:低频通过
  • 高通滤波器:高频通过
  • 带通滤波器:允许一定的频率通过
  • 带阻滤波器:阻止一定的频率不通过
  • 全通滤波器:频率都通过,仅改变相位
  • 险波滤波器(Band-Stop Filter):阻止一个狭窄频率范围通过

1.4 邻域算子与线性领域滤波

输出像素值g(i,j)g(i,j)时输入像素值f(i+k,j+I)f(i+k,j+I)的加权和
g(i,j)=∑k,If(i+k,j+I)h(k,I)
h(k,I)h(k,I)我们称之为,是滤波器的加权系数
g=f⊗h

- 方框滤波

void boxFilter(InputArray src,OutputArray dst,int ddepth,Size ksize,
 		Point anchor = Point(-1,-1),boolnormalize = true,int borderType = BORDER_DEFAULT)
  • InputArray类型的src,输入图像,为CV_8U,CV_16U,CV_16S,CV_32F,CV_64F之一
  • OutputArray类型的dst,需要和源图片有一样的尺寸和类型
  • int类型的ddepth输出图像的深度,-1表示使用原图的深度
  • Size类型的ksize,内核的大小
  • Point类型的anchor,表示锚点(平滑的点),Point(-1,-1)表示取核的中心为锚点
  • 表示内在是否被其区域归一化
  • 推断图像外部像素的某种边界模式
    在这里插入图片描述

- 均值滤波

理论分析
在这里插入图片描述
m为模板中包含当前像素在内的像素的个数

缺陷
不能保护图像细节,在图像去噪的同时也破坏图像的细节

blur函数
作用:对输入图像src进行均值滤波后用dst输出

void blur(InputArray src, OutputArray dst,Size ksize,Point anchor= Point(-1,-1),
int borderType = BORDER_DEFAULT)

类型同上

- 高斯滤波

理论

其视觉效果就像经过一个半透明屏幕在观察图像,图像的高斯模糊过程就是图像与正态分布做卷积。高斯函数的傅里叶变换就是另一个高斯函数,所以高斯模糊是一个低通滤波操作。

一维零均值高斯函数
GaussianBlur函数

void GaussianBlur(InputArray src, OutputArray dst,Size ksize,double sigmaX,double 
		sigmaY = 0,intborderType = BORDER_DEFAULT)
  • double 类型的sigmaX,表示高斯核函数在X方向的标准偏差
  • double类型的sigmaY,表示高斯核函数在Y方向的标准偏差

6.2非线性滤波

- 中值滤波

基本思想:

  • 用像素点邻域灰度值的中值代替该像素的灰度值,该方法用去除脉冲噪声,椒盐噪声的同时又能保留图像的边缘细节

作用:

  • 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术。用中值代替邻域中的点的像素值,从而消除独立的噪声点,对于斑点噪声(speckle noise)和椒盐噪声(salt-and–pepper noise)。
void medianBlur(InputArray src, OutputArray dst, int ksize)
  • 第一参数,InputArray类型的src,函数的输入参数,填1,3或者4通道的Mat类型的图像。当ksize为3或5的时候,图像深度需为CV_8U、CV_16U、CV_32F其中之一,而对于较大孔径尺寸的图片,只能是CV_8U;
  • 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数需要和源图片有一样的尺寸和类型,我们可以用Mat::clone,以源图片为模板来初始化得到如假包换的目标图;
  • 第三个参数,int类型的ksize,孔径的现行尺寸(aperture linear size),注意这个参数必须是大于1 的奇数(3、5、7、…)

- 双边滤波

基本思想

  • 结合图像中的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到了保边去噪的目标。
  • 双边滤波是基于空间分布的高斯滤波函数,所以在边缘附近,离得较远的像素不会对边缘上的像素值影响太多。但是只能对低频信息进行较好地滤波。

在这里插入图片描述
加权系数ω(i,j,k,l)取决于定义域核和值域核的乘积
定义域核的表示如下:
在这里插入图片描述
值域核的表示如下 :
在这里插入图片描述

void bilateralFilter(InputArray src, OutputArray dst,int d ,double sigmaColor,
double sigmaSpace, int borderType = BORDER_DEFAULT)
  • int类型的d表示在滤波过程中每个像素邻域的直径
  • double 类型的sigmaColor,颜色空间滤波器的sigma值,越大表示像素邻域内的越宽广的颜色会被混合在一起
  • double 类型的sigmaSpace 坐标空间中滤波器的sigma值,坐标空间的标注方差,数值越大,意味着越远的像素相互影响。
发布了34 篇原创文章 · 获赞 8 · 访问量 1888

猜你喜欢

转载自blog.csdn.net/weixin_43583163/article/details/97148285
今日推荐