计算机视觉、图像处理中常见的滤波操作

前言:计算机视觉是让计算机理解图像与视频,本系列博客的目的在于加深自己在学习计算机视觉过程中对相关知识理解与回顾。其中很多内容参照:教材《ComputerVision: Algorithms and Applications》,教材《Learning Image Processing with OpenCV》工具书《LearningOpenCV》,国外大学的课程《Computer Vision》和课程《ComputerVision》。

        图像滤波既可以在实域进行,也可以在频域进行。图像滤波可以更改或者增强图像。通过滤波,可以强调一些特征或者去除图像中一些不需要的部分。滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值。(个人认为《LearningImage Processing with OpenCV》中这一段写的很好:Image filtering is a process to modify or enhance images.Emphasizing certain features or removing others in an image are examples ofimage filtering. Filtering is a neighborhood operation. The neighborhood is aset of pixels around a selected one. Image filtering determines the outputvalue of a certain pixel located at a position (x,y) by performing someoperations with the values of the pixels in its neighborhood.)

图像滤波可以通过公式:


进行计算,其中K为滤波器,在很多文献中也称之为核(kernel)。常见的应用包括去噪、图像增强、检测边缘、检测角点、模板匹配等。其中用于平滑图像的常见滤波算子包括(Code:https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/ImgProc/Smoothing.cpp):

1.      均值滤波(normalized box filter):用其像素点周围像素的平均值代替元像素值,在滤除噪声的同时也会滤掉图像的边缘信息。在OpenCV中,可以使用boxFilter和blur函数进行均值滤波。均值滤波的核为:

计算机视觉、图像处理中常见的滤波操作_第1张图片计算机视觉、图像处理中常见的滤波操作_第2张图片

 

2.      高斯滤波(Gaussian filter):高斯滤波为最常用的滤波器,具有可分离性质,可以把二维高斯运算转换为一维高斯运算,其本质上为一个低通滤波器。在OpenCV中可通过函数GaussianBlur进行操作。

计算机视觉、图像处理中常见的滤波操作_第3张图片

3.      中值滤波(median filter):中值滤波用测试像素周围邻域像素集中的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果非常明显。在OpenCV中,可以使用函数medianBlur进行操作。

4.      双边滤波(bilateral filter):双边滤波在平滑图像时能够很好的保留边缘特性,但是其运算速度比较慢。在OpenCV中,可以使用函数bilateralFilter进行操作。

 

除了平滑去噪,图像锐化,求边缘等也是常见的图像滤波应用。这类滤波器常常使用一节或者二阶差分(或微分,对于数字图像而言,其为离散信号,长用差分代替导数)核算子对图像进行滤波。一节差分常用于求取图像边缘。二阶差分常用于图像增强。常用的这类算子包括:

 

1.      Sobel operator:Sobel算子通过计算水平和垂直方向上的一节差分来进行计算。在OpenCV函数中,可通过使用Sobel函数进行计算。

计算机视觉、图像处理中常见的滤波操作_第4张图片计算机视觉、图像处理中常见的滤波操作_第5张图片    

2.      Laplacian operator:Laplacian算子通过计算二阶差分(微分)来进行计算。在OpenCV函数中,可通过使用Laplacian函数进行计算。

计算机视觉、图像处理中常见的滤波操作_第6张图片

除了上面列举的较为经典的滤波器(或者说是核算子)外,在OpenCV中也可以自己定义自己的滤波器,然后使用filter2D函数进行运算。

 

对于以上在实域进行滤波的滤波器来说,边界问题是一个不得不考虑的事情。通常有以下几种办法来进行处理:

计算机视觉、图像处理中常见的滤波操作_第7张图片计算机视觉、图像处理中常见的滤波操作_第8张图片计算机视觉、图像处理中常见的滤波操作_第9张图片计算机视觉、图像处理中常见的滤波操作_第10张图片   

(black)          (wrap around)          (copy edge)   (reflectacross edge)

 

除了在实域进行滤波之外,在频域也可以进行滤波。傅里叶变换保存每个频率对于的幅度和相位信息,其中幅度表示在某个特定的频率信号有多少信号。相位则表示信号的空间信息,主要指方向信息。

计算机视觉、图像处理中常见的滤波操作_第11张图片

 

在频域中滤波主要就是设计相应的低通、高通或者带通等滤波器以实现保留某些频率,滤除其余频率的目的。此外在实域中的卷积运算可以放到频域中做乘积运算,可以降低运算复杂度。


你可能感兴趣的:(计算机视觉,图像处理,OpenCV)