图像滤波
滤波
是信号和图像处理中的一种基本操作。它的目的是选择性地提取图像中某些方面的内容,这些内容在特定应用环境下传达了重要信息。滤波可去除图像中的噪声,提取有用的视觉特征,对图像重新采样,等等。它起源于通用的信号和系统理论。
频域
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)
计算导数的算子:高通滤波器
拉普拉斯算子(二阶求导)
未完待续