数字图像处理笔记——空域滤波器(Spatial filters)

信号处理

我们在信号处理课程中学过一维信号的处理,其中有个很重要的概念就是卷积。在时域上来看,x是我们的原信号,h是冲激响应,x*h代表x与h卷积,也就是将h翻转平移,与x对应元素相乘相加以后就能得到输出信号;在频域上来看就是x的频谱与y的频谱相乘可以得到y的频谱,再经过傅里叶反变换就能得到输出信号y

在图像处理中,与时域对应的叫做空域,与一维卷积类似的是二维卷积也是翻转、平移、相乘相加这一系列的操作,但是不同的是本来一维的向量变成了二维的矩阵。而对于某幅特定的图像来说,它永远是有限长的,这就意味着冲激响应h矩阵平移到边缘的时候可能会出现有值与无值相乘,这种情况我们可以人为地去定义它,我们可以将无值区域设为0,这样可以保证输出图像维度与输入图像维度相同,但是边缘会失真;我们还可以直接抛弃有值与无值相乘的情况,这样不会产生失真的结果,但是会导致图像的维度缩减

与一维相同的是我们可以定义二维的卷积,这种定义方法看起来像是卷积,但是实际上它更像是相关操作,唯一的差别就是正负号。事实上我们很多时候不会关心正负号,因为我们的滤波器很多时候是中心对称的,因此翻转操作对其没有影响。

空域滤波器

平滑滤波器

我们在之前的博客也讲过平滑滤波器,平滑滤波器实际上就是一个低通滤波器,它用来消除高斯噪声(在原本像素值上增加随机噪声,噪声值分布满足高斯分布)有很好的效果。我们需要注意的是在设计滤波器的时候应该使得矩阵系数之和为1以保证输出图像的亮度大致与输入图像相同

除了以上所有九个点权重相等的滤波器外我们还可以设计权重不同的滤波器来满足不同的需求

下面让我们来看看两个matlab中相关的重要函数,一个是filter2,这种方法得到的结果是浮点型;另一个是imfilter函数,这种方法输入与输出图像都是uint8类型的,并且无法保留小于0或大于255的值,但一个好处就是这个函数也可以对彩色图像进行操作

锐化滤波器

与平滑滤波器相对应的就是锐化滤波器,锐化滤波器实际上就是增强相邻像素值之间的差值来提高对比度。这种操作与差分相关。我们先来看一维图像的差分结果,我们可以看出来一次差分(一阶导)可以显示图像的边缘,即像素值产生变化;而二次差分(二阶导)可以显示边缘符号的变化,即边缘的开始点与结束点,我们会将重点主要放在二阶导上

那么将其推导到二维呢?我们采用拉普拉斯算子来衡量横向与纵向的变化,像素值对x与y的二阶偏导都可由一维的情况得到

最后我们得到的矩阵实际上是一个边缘检测器,因为我们就检出了图像的边缘,而还未对边缘两边进行增强操作。我们可以看到图像的大部分是黑色,因为对于颜色没有太大变化的区域,计算出来的像素值大约在0左右,而在边缘处;即相邻像素值相差较大的位置,总有一侧的值较大,这个值乘以-4后会变成很小的负值,而另一侧的值较小,乘以-4后再加上上下左右四个像素的值会是一个很大的正值。我们在用 imshow(im,[]) 函数将像素值压缩到0-255这个区间,因此负值会变为0(黑色),正值会变为255(白色),0变为处于0-255之间的灰色。

那么我们有了图像的边缘以后其实图像的锐化也很容易完成了,由于在图像边缘处一侧是极大值,一侧是极小值,那我们就可以将原图像加上图像的边缘,使得原来像素值大的一侧值更大,像素值小的一侧值更小。边缘检测器实际上是一个高通滤波器,它由全通滤波器减去低通滤波器得到,而锐化滤波器就是在全通滤波器基础上加上一个高通滤波器得到。

我们应用了锐化滤波器后,物体的对比度更大,相应的噪声的对比度也会变得更大,因此我们可以只加上部分图像的边缘来在二者之间达到一个平衡,这种方法叫做非锐化掩蔽。F矩阵的系数只在中央处为1,其他地方为0;高通滤波器各元素之和为零。这样就保证了F加上Fhp的一部分后矩阵各系数之和任然为1,这就意味着像素值的亮度基本不变

SOBEL水平/竖直边缘检测

我们在之前的博客也讲过能够用作特定方向的边缘检测器

中值滤波器

不是所有滤波器都是线性的,中值滤波器就是取一个像素周围一定范围内的像素值,然后取中值作为这个像素的值。这种滤波器用来滤除椒盐噪声(即图像中偶然出现的值为0或255的像素点)有很好的效果。在matlab中可以采用medfilter2这个函数来实现

猜你喜欢

转载自blog.csdn.net/shanwenkang/article/details/84345178