图像滤波

滤波

是信号和图像处理中的一种基本操作。它的目的是选择性地提取图像中某些方面的内容,这些内容在特定应用环境下传达了重要信息。滤波可去除图像中的噪声,提取有用的视觉特征,对图像重新采样,等等。它起源于通用的信号和系统理论。

频域
1.通过观察变化的频率,图像中灰度级的变化。有些图像含有大片强度值几乎不变的区域(如蓝天),而对于其他图像,灰度级的强度值在整幅图像上的变化很大(例如由大量细小物体构成的混乱场景)
2.频域分析把图像分解成从低频到高频的频率成分。.有几种著名的变换法可用来清楚地显示图像的频率成分,例如傅里叶变换余弦变换
3。图像是二维的,因此频率分为两种,即垂直频率(垂直方向的变化)和水平频率(水平方向的变化)。

空域
通过观察灰度分布来描述图像特征

  滤波器
在频域分析框架下,滤波器是一种放大(也可以不改变)图像中某些频段,同时滤掉(或减弱)其他频段的算子。例如,低通滤波器的作用是消除图像中的高频部          分;高通滤波器刚好相反,用来消除图像中的低频部分。

低通滤波器

  低通滤波器目的是减少图像变化的幅度,获得更平滑的过渡,将像素替换为周围像素的平均值

 

     cv::blur(image,result, cv::Size(5,5)); // 滤波器尺寸

      也称(box filter)块滤波器;

注意: cv::boxFilter 对图像做滤波时,使用了一个仅由 1 组成的正方形内核。它与均值滤波器类似,但不会除以系数的数量

    高斯滤波:

cv::GaussianBlur(image, result,cv::Size(5,5), // 滤波器尺寸
1.5); // 控制高斯曲线形状的参数

    第四个参数必须为奇数(详见高斯滤波

 

  高斯滤波器,像素对应的权重与它到中心像素之间的距离成正比。一维高斯函数的公式为:
  在这里插入图片描述

离中心点越远的像素权重越低,这使像素之间的过渡更加平滑。与之相反,使用扁平的均值滤波器时,远处的像素会使当前平均值发生突变。从频率上看,这意味着均值滤波器并没有消除全部高频成分。要在图像上应用二维高斯滤波器,只需先在横向线条上应用一维高斯滤波器(过滤水平方向的频率),然后在纵向线条上应用另一个一维高斯滤波器(过滤垂直方向的频率)。这是因为,高斯滤波器是一种可分离滤波器(也就是说,二维内核可分解成两个一维滤波器)。要应用普通的可分离滤波器,可使用 cv::sepFilter2D 函数。也可以用 cv::filter2D 函数直接应用二维内核。由于可分离滤波器所用的乘法运算更少,因此它的计算速度通常比不可分离滤波器要快。

伪影是一种叫作空间假频的现象造成的。当你试图在图像中包含高频成分,但由于图像太小而无法包含时,就会出现这种现象。

对于缩减像素采样,需要先进行高斯滤波去除高频成分

pyrDown函数:

函数的作用:

对图像进行滤波然后进行下采样

函数调用形式:

void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )

参数详解:

 

InputArray src:表示输入图像

 OutputArray dst:表示输出图像

const Size& dstsize=Size():表示输出图像的大小

 int borderType=BORDER_DEFAULT:表示图像边界的处理方式

pyrUp函数

函数功能:

对图像进行高斯滤波,然后进行上采样;

函数调用形式:

void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT )

中值滤波器(消除椒盐噪声)

medianblur(image,result,5)//最后一个参数是滤波器尺寸

原理

因为滤波器是非线性的,不能用核心矩阵表示,而是操作一个像素的邻域取其中值;

定向滤波器

用途:检测边缘

使用sobel算子

  sobel(image,

     dst,

     cv_8u, //输出类型

     0,1//内核规格,与垂直或水平有关

     3,//尺寸

     0.4,128//比例及其偏移量

一般sobel的运算结果为16位有符号整形,

如果把图像看做二维函数,那么sobel算子就是图像在水平和垂直方向变化的速度。在数学属于中,这种速度称为梯度。它是一个二维向量,向量的元素是横竖两个方向的函数的一阶导数:

grad(I)=

sobel算子在水平和垂直方向计算像素值的差分,得到图像梯度的近似值。它在像素周围的一定范围内进行运算,以减少噪声带来的影响。
在进行边缘检测时,通常只计算范数。。但如果需要计算范数与方向,可以使用以下函数。

 

 

计算一阶导数的函数与算子

  prewitt

  roberts

  scharr(函数cv::scharr)

计算导数的算子:高通滤波器

拉普拉斯算子(二阶求导)

  未完待续

posted @ 2021-05-05 12:27  KAVEI  阅读(545)  评论(0编辑  收藏  举报