图像处理笔记 opencv 线性滤波器和非线性滤波

平滑处理

平滑处理(smoothing)也称模糊处理(bluring),是一种简单且使用频率很高的图像处理方法。平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真。在涉及到降低图像分辨率时,平滑处理是非常好用的方法。

 

图像滤波与滤波器

图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪点进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像和分析的有效性和可靠性。

消除图像中的噪声成分叫作图像的平滑或者滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段,而在较高频段,有用的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。

图像滤波的目的有两个:一个是抽出对象的特征作为图像识别的特征模式;另一个是为适应图像处理的要求,消除图像数字化是所混入的噪声。

对滤波处理的要求也有两条:一是不能损坏图像的轮廓及边缘等重要信息;二是使图像清晰视觉效果好。

滤波器的种类有很多,在OpenCV中提供了如下5中常用的图像平滑处理操作方法:

  • 方框滤波——BoxBlur函数
  • 均值滤波(领域平均滤波)——Blur函数
  • 高斯滤波——GaussianBlur函数
  • 中值滤波——medianBlur函数
  • 双边滤波——bilateralFilter函数

 

线性滤波器

线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。

  • 低通滤波器:允许低频率通过;
  • 高通滤波器:允许高频率通过;
  • 带通滤波器:允许一定范围频率通过;
  • 带阻滤波器:阻止一定范围频率通过并且允许其他频率通过;
  • 全通滤波器:允许所有频率通过,仅仅改变相位关系;
  • 陷波滤波器(Band-Stop Filter):阻止一个狭窄频率范围通过,是一种特殊带阻滤波器。

 

滤波和模糊

以高斯滤波为例,滤波可以分为低通滤波和高通滤波两种:高斯滤波是指用高斯函数作为滤波函数的滤波操作,至于是不是模糊,要看是高斯低通还是高斯高通,低通就是模糊,高通就是锐化。

  • 高斯滤波是指用高斯函数作为滤波函数的滤波操作;
  • 高斯模糊就是高斯低通滤波;

 

邻域算子与线性邻域滤波

邻域算子(局部算子)是利用给定像素周围的像素值的决定此像素的最终输出的一种算子。而线性邻域滤波就是一种常用的邻域算子,像素的输出值取决于输入像素的加权和。

邻域算子除了用于局部色调调整以外,还可以用于图像滤波,实现图像的平滑和锐化,图像边缘增强或者图像噪声的去除。

 

线性滤波

方框滤波(box Filter)

方框滤波(box Filter)被封装在一个名为boxblur的函数中,即boxblur函数的作用是使用方框滤波器(box Filter)来模糊一张图片。

函数原型:

void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Piont anchor=Point(-1,-1),boolnormalize=true,int borderType=BORDER_DEFAULT)

  • 第一个参数,InputArray 类型的src,输入源图像,填Mat类的对象,该函数对通道是独立处理的,可以处理任意通道数的图片(待处理的图片深度应该是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F)
  • 第二个参数,OutputArray类型的dst,即目标图像,需要和源图像有一样的尺寸和类型。
  • 第三个参数,int类型的ddepth,输出图像的深度,-1代表使用云图深度,即src.depth()。
  • 第四个参数,Size类型的ksize,内核的大小。一般用Size(w,h)来表示内核的大小,其中w为像素宽度,h为像素高度。Size(3,3)就表示3*3的核大小。
  • 第五个参数,Point类型的anchor,表示瞄()点(即被平滑的那个点)。默认值Piont(-1,-1)。如果这个点坐标是负值的话,就表示去核中心为瞄点。
  • 第六个参数,bool类型的normalize,默认值为true,一个标识符,表示内核是否被其区域归一化(normalized)。
  • 第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT。

均值滤波是方框滤波归一化(normalized)后的特殊情况,当第六个参数normalize=true的时候方框滤波就变成我们熟悉的均值滤波。而非归一化的方框滤波用于计算没想像素邻域内的积分特性,比如密集光流算法(dense optical flow algorithm)中用到的图像倒数的协方差矩阵(covariance matrices of image derivatives)。

如果我们要在可变的窗口中计算像素总和,可以使用integral()函数。

 

均值滤波(blur函数)

blur的作用是对输入图像src进项均值滤波后用dst输出。

函数原型如下:

void blur(InputArray src, OutputArray dst, Size ksize,Point anchor=Point(-1,-1),int borderType=BORDER_DEFAULT)

  • 第一个参数:InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片。但需要注意,待处理的图片深度应该为CV_8U、CV_16U、CV_16S、CV_32F、CV_64F之一。
  • 第二个参数:OutputArray类型的dst,即目标图像,需要和源图像有一样的尺寸和类型。
  • 第三个参数:Size类型的ksize,内核的大小。一般用Size(w,h)来表示内核的大小,其中w为像素宽度,h为像素高度。Size(3,3)就表示3*3的核大小。
  • 第四个参数,Point类型的anchor,表示瞄()点(即被平滑的那个点)。默认值Piont(-1,-1)。如果这个点坐标是负值的话,就表示去核中心为瞄点。
  • 第五个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT。

高斯滤波(GaussianBlur函数)

GaussianBlur函数的作用是用高斯滤波器来模糊一张图片,对输入图像src进行高斯滤波后用dst输出。

void GaussianBlur(InputArray src, OutputArray dst, Size ksize,double sigmaX,double sigmaY=0, intborderType=BORDER_DEFAULT)

  • 第一个参数:InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片。但需要注意,待处理的图片深度应该为CV_8U、CV_16U、CV_16S、CV_32F、CV_64F之一。
  • 第二个参数:OutputArray类型的dst,即目标图像,需要和源图像有一样的尺寸和类型。
  • 第三个参数:Size类型的ksize高斯内核大小。其中Ksize.width和Ksize.height可以不同,但它们都必须为正数和奇数,也可以为零。它们都是由sigma计算而来的。
  • 第四个参数:double类型的sigmaX,表示高斯核函数在X方向的标准偏差。
  • 第五个参数;double类型的sigmaY,表示高斯核函数在Y方向的标准偏差。
  • 第六个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。有默认值BORDER_DEFAULT。

 

非线性滤波:中值滤波、双边滤波

线性滤波可以实现很多种不同的图像变换。而非线性滤波有时可以达到更好的效果。

我们所考虑的滤波器都是线性的,即两个信号之和的响应和它们各自响应之和相等。可以说每个像素的输出值是一些输入像素的加权和线性滤波器易于构造,并且易于从频率响应角度来进行分析。

中值滤波

中值滤波(Median filter)是一种典型的非线性滤波技术,其基本思想是用点邻域灰度值的中值来代替该像素点的灰度值。该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的边缘细节。

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是把数字图像或数字系列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。

中值滤波(medianBlur)函数使用中值滤波器来平滑(模糊)处理一张图片。

函数原型:

void medianBlur(InputArray src,OutputArray dst,int ksize)

  • 第一个参数:InputArray 类型的src,函数的输入参数,填1、3或者4通道的Mat类型的图像。当ksize为3或者5的时候,图像深度需为CV_8U、CV_16U、CV_32F其中之一。
  • 第二个参数:OutputArray类型的dst,即目标图像,需要和源图像有一样的尺寸和类型。
  • 第三个参数:int类型ksize

双边滤波

双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去燥的目的,具有简单、非迭代、局部的特点。双边滤波的好处是可以做边缘保存(edge preserving)。

 

资料来源:OpenCV3编程入门_毛星云编著_电子工业出版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高高呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值