【图像处理】图像滤波

11 篇文章 0 订阅
9 篇文章 0 订阅

图像滤波

目录

  • 1、学习了解线性滤波的基本原理
  • 2、练习实现均值滤波和高斯滤波
  • 3、学习了解非线性滤波的原理
  • 4、练习实现中值滤波和双边滤波

空间滤波

定义

​ 空间滤波是一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。分为低通滤波(平滑化)、高通滤波(锐化)和带通滤波。处理方法有计算机处理(数字滤波)和光学信息处理两种。(摘自百度百科)

空间滤波器

​ 空间滤波器由一个邻域(通常是一个较小的矩形)和对该邻域所包围图像像素执行的预定义操作组成。
​ 滤波产生一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。滤波器的中心访问输入图像中的每个像素后,就生成了出了(滤波)后的图像。如果在图像像素上执行的是线性操作,则该滤波器称为线性空间滤波器,否则,滤波器就称为非线性空间滤波器。

一、线性滤波

线性滤波也称平滑线性滤波,使用滤波器模板确定的邻域内像素的平均灰度值代替图像中每个像素的值,这种处理的结果降低了图像灰度的“尖锐”变化。由于典型的随机噪声由灰度级的急剧变化组成,因此,常见的平滑处理应用就是降低噪声。

线性空间滤波表达式

使用大小为 m × n m\times n m×n的滤波器对大小为 M × N M\times N M×N的图像进行线性空间滤波,可由下式表示:

g ( x , y ) = ∑ s = − a a ∑ t = − b b w ( s , t ) f ( x + s , y + t ) g(x,y) = \sum_{s=-a}^a\sum_{t=-b}^bw(s,t)f(x+s,y+t) g(x,y)=s=aat=bbw(s,t)f(x+s,y+t)
式中, x x x y y y是可变的,以便 w w w中的每个像素可访问 f f f中的每个像素。

[外链图片转存失败(img-AJGFBOzz-1564669921973)(F:\学习笔记\opencv学习\day3\20190730222952.png)]

在线性滤波中,需要使用算子(核)按照一定的步长去卷积图像中的每个像素点,然后使用新得出的点来补充到原图像中。

均值滤波

均值滤波使用3 * 3或者5 * 5 的滤波核来卷积每个像素,然后求其均值并填充到原图像中,获得新的图像。

代码示例:

​ 这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平均值来代替中心元素。可以使用函数 cv2.blur() 和 cv2.boxFilter() 来完这个任务。我们需要设定卷积框的宽和高。下面是一个 5x5 的归一化卷积框:

import cv2

img = cv2.imread("img.jpg")
#使用5*5的卷积核进行均值滤波
blur = cv2.blur(img,(5,5))
cv2.imshow("img",blur)

原图:在这里插入图片描述平均滤波:在这里插入图片描述

由效果图可以看出,图像变得更加模糊了,这样就可以达到均值模糊的效果。

高斯滤波

​ 现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是相等的,现在里面的值是符合高斯分布的,方框中心的值最大,其余方框根据距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求加权平均数,全就是方框里的值)。我们需要指定高斯核的宽和高(必须是奇数)。以及高斯函数沿 X,Y 方向的标准差。如果我们只指定了 X 方向的的标准差,Y 方向也会取相同值。如果两个标准差都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。

代码示例:

import cv2

img = cv2.imread("img.jpg")
#0 是指根据窗口大小( 5,5 )来计算高斯函数标准差
gass = cv2.GaussianBlur(img,(5,5),0)
cv2.imshow("img",gass)

原图:在这里插入图片描述高斯滤波:在这里插入图片描述

二、非线性滤波

​ 从连续的(或离散的)输入数据中滤除噪声和干扰以提取有用信息的过程称为滤波,而相应的装置称为滤波器。根据滤波器的输出是否为输入的线性函数,可将它分为线性滤波器和非线性滤波器两种。非线性滤波的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现。

中值滤波

基本思想:用像素点邻域灰度值的中值代替该像素的灰度值,该方法用去除脉冲噪声,椒盐 噪声的同时又能保留图像的边缘细节 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术。用中值代替邻域中的点的像素值,从而消除独立的噪声点,对于斑点噪声(speckle noise)和椒盐噪声(salt-and–pepper noise)。

代码示例:

import cv2

img = cv2.imread("img.jpg")
median = cv2.medianBlur(img,5)
cv2.imshow("img",median)

原图:在这里插入图片描述中值滤波:在这里插入图片描述

双边滤波

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

g ( i , j ) = ∑ k , l f ( k , l ) ω ( i , j , k , l ) ∑ k , l ω ( i , j , k , l ) g(i,j) =\frac{\sum_{k,l}f(k,l)\omega(i,j,k,l)}{\sum_{k,l}\omega(i,j,k,l)} g(i,j)=k,lω(i,j,k,l)k,lf(k,l)ω(i,j,k,l)
加权系数ω(i,j,k,l)ω(i,j,k,l)取决于定义域核和值域核的乘积
定义域核的表示如下:
d ( i , j , k , l ) = e x p ( − ( i − k ) 2 + ( j − l ) 22 σ 2 d ) d ( i , j , k , l ) = e x p ( − ( i − k ) 2 + ( j − l ) 22 σ d 2 ) d(i,j,k,l)=exp(−(i−k)2+(j−l)22σ2d)d(i,j,k,l)=exp(−(i−k)2+(j−l)22σd2) d(i,j,k,l)=exp((ik)2+(jl)22σ2d)d(i,j,k,l)=exp((ik)2+(jl)22σd2)
值域核的表示如下
r ( i , j , k , l ) = e x p ( − ∣ ∣ f ( i , j ) − f ( k , l ) ∣ ∣ 22 σ 2 r ) r(i,j,k,l)=exp(−||f(i,j)−f(k,l)||22σ2r) r(i,j,k,l)=exp(f(i,j)f(k,l)22σ2r)

代码示例:

​ 函数 cv2.bilateralFilter() 能在保持边界清晰的情况下有效的去除噪音。但是这种操作与其他滤波器相比会比较慢。我们已经知道高斯滤波器是求中心点邻近区域像素的高斯加权平均值。这种高斯滤波器只考虑像素之间的空间关系,而不会考虑像素值之间的关系(像素的相似度)。所以这种方法不会考虑一个像素是否位于边界。因此边界也会别模糊掉,而这正不是我们想要。双边滤波在同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算。所以这种方法会确保边界不会被模糊掉,因为边界处的灰度值变化比较大。

import cv2

img = cv2.imread("img.jpg")
#9 邻域直径,两个 75 分别是空间高斯函数标准差,灰度值相似性高斯函数标准差
blur = cv2.bilateralFilter(img,9,75,75)
cv2.imshow("img",blur)

原图:在这里插入图片描述双边滤波:在这里插入图片描述

学识有限只能总结到此,如有新见解,及时更新。。。

参考:《数字图像处理》第三版
OpenCV-Python 中文教程----段力辉

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值