空间滤波是一种图像处理技术,它通过对图像像素及其邻域进行运算,利用均值,高斯,梯度,拉普拉斯等线性滤波和中值,最大最小,双边滤波等非线性滤波改变像素值,实现图像的平滑,锐化,去噪或边缘检测等功能。
1 线性滤波
线性指的是满足叠加和比例不变性
(1)平滑滤波
平滑滤波的滤波核都为正,使得滤波后,图像更平滑,处理思路为积分;
滤波核越大 图像越模糊
①均值滤波
边界处理
对边界附近的像素,滤波核的部分可能落在图像区域外
1.常数填充
2.镜像填充(以边界为轴)
为什么要边界处理?
1、 对边界附近的像素,滤波核的部分可能落在图像区域外。
2、若越界直接不作为滤波核: 如果不进行边界处理,不同像素点作为滤波核中心的次数不一样,有些点不会作为滤波核的中心出现
快速均值滤波
//实现积分图像
void integral_image(const uchar *src,int width,int height,int sstride,int *pint,int istride)
{
int *prow=new int[width];
memset(prow,0,sizeof(int)*width);
for(int yi=0;yi<height;++yi,src+=sstride,pint+=istride)
{
prow[0]+=src[0];pint[0]=prow[0];
for(int xi=0;xi<width;++xi)
{
prow[xi]+=src[xi];
pint[xi]=pint[xi-1]+prow[xi];
}
}
delete[]prow;
}
设滤波窗口大小为2w+1,滤波结果为图像O,则:
Z=(2w+1)(2w+1)为像素个数,中括号内即为滤波窗口覆盖的像素颜色值之和;
②高斯滤波
以高斯函数为滤波核,注意归一化
行列可分离:核大小为M的二维图像高斯滤波,等价于同样核大小的一维高斯滤波核在行列方向的叠加
σ越大,核应该越大,M=[6σ-1]
σ很大时,则与均值滤波相等
标准差越大,说明分布越分散,更应该考虑大范围的数据,权重更平均,更注重全局;
标准差越小,说明分布越集中,更应该考虑中心局部的细节。
(2)锐化滤波
锐化滤波的滤波核中心为正,边缘为负,总和为0,这样滤波的图像后更尖锐,处理思路为差分。
最常见的差分思路就是梯度。
梯度的大小,简约计算,用各方向的和代替
①梯度滤波
梯度滤波主要进行边缘方向和强度的检测,降噪
1'Roberts算子
对角线方向的梯度
2'Prewitt算子
水平垂直方向的算子
3'Sobel算子
Sobel算子在Prewitt算子的基础上加了权重的概念,距离越近的像素点对当前像素点的影响越大。这种加权使得它在边缘检测时能更准确突出边缘轮廓,减少边缘模糊。
②拉普拉斯滤波
拉普拉斯滤波主要进行边缘和图像突变的检测 降噪
噪声:存在噪声的情况下,一阶导就会失效,无法检测出边界
特点
拉普拉斯锐化滤波器原图+拉普拉斯滤波后的图=锐化图
2 非线性滤波
(1)中值滤波
取滤波核中位数代替,用于降噪,消除椒盐噪声
(2)双边滤波
前面提到的高斯滤波,消除噪音的同时,也使得边缘变得模糊;
而双边滤波,降噪的同时,不会使边界不模糊。
因为双边滤波同时考虑空间位置和颜色像素之差,当颜色相近时,权重较大,颜色相差很远,权重很小,所以边缘部分不模糊。