计算机视觉中的滤波 小鱼儿 2023-07-04 12:38 0阅读 0赞 ### 文章目录 ### * 写在前面 * Padding * 滤波杂谈 * 参考 博客: [博客园][Link 1] | [CSDN][] | [blog][] # 写在前面 # ![http://setosa.io/ev/image-kernels/][http_setosa.io_ev_image-kernels] 在计算机视觉中,**滤波**(**filtering**)是指 > Image **filtering**: compute function of local neighborhood at each position. > > —— from [CAP5415–Fall 2014-Lecture 2 (08/21/2014)–Filtering][CAP5415_Fall 2014-Lecture 2 _08_21_2014_Filtering] > > In the broadest sense of the term “**filtering**”, the value of the filtered image at a given location is a function of the values of the input image in a small neighborhood of the same location. > > —— from [Bilateral Filtering for Gray and Color Images][] **滤波本质上是一种特殊的函数,其作用在图像的每个位置,通过定义的计算方式得到输出,输出的值用于替换图像当前位置(滤波器中心)的值。** 令滤波函数为 g ( x ; w ) g(x;\\ w) g(x; w) ,其中 x x x为图像的局部邻域, w w w为滤波器的权重,滤波器可以分成如下3类, * **线性滤波器**(**Linear filter**):线性滤波的**输出为输入的线性组合**,即 g = w ⋅ x g = w \\cdot x g=w⋅x,线性滤波器最为常见; * **非线性滤波器**(**Non-Linear Filter**):不满足上条性质的为非线性滤波,典型的非线性滤波如最大值/最小值/中值滤波、膨胀/腐蚀等; * **自适应滤波器**(**Adaptive filter**):线性滤波中的 w w w在滑动过程中固定不变(与图像内容独立无关),**自适应滤波的 w w w在滑动过程中会随着窗口内像素的性质和结构发生变化**。直觉上,自适应滤波器在某些复杂情况下可能取得更好的效果,但相对线性滤波器,其计算代价更高也更难优化加速。 从滤波目的或者解决的问题上,也可分成3类: ![filtering][] * **图像处理**:并不想从图像中提取信息,只想将图像转换成期望的样子; * **特征提取**:想从图像中提取到某些信息,比如梯度、二阶导、纹理等; * **模式检测**:想知道图像局部长什么样子,像哪种模式,比如模板匹配、稀疏表示等; 这两种分类方式并不是割裂的,而是互相交叉的,用于图像处理的滤波器也有线性、非线性、自适应之分。 # Padding # 滤波操作不可避免的一个问题是**边界如何处理**,当滤波器的中心压在图像边界处时,滤波器会有一部分落在图像外,但图像外并没有像素,该如何处理?通常需要对图像进行填充(**padding**),填充需要解决2个问题,**填充的元素取什么值以及填充多少个元素**。 对于延拓元素的取值,通常有4种方式, * **常数填充**(0填充):填充的元素取相同的常数值 * **周期填充**(circular):认为图像的上下左右被与自身相同的图像包围着 * **复制填充**(replicate):复制图像边界的元素 * **对称填充**(symmetric):填充的元素与图像关于边界对称 4种填充方式依次如下图所示, ![https://www.cs.toronto.edu/~urtasun/courses/CV/lecture02.pdf][https_www.cs.toronto.edu_urtasun_courses_CV_lecture02.pdf] 对于填充多少个元素,通常有3种方式,令滤波器的大小为$g\\times g $ ,图像大小为 f × f f \\times f f×f , * **full**:边界分别填充 g − 1 g-1 g−1个元素,滤波结果为 ( f + g − 1 ) × ( f + g − 1 ) (f+g-1)\\times (f+g-1) (f\+g−1)×(f\+g−1),比原图大 * **same**:边界分别填充 ( g − 1 ) / 2 (g-1)/2 (g−1)/2个元素,滤波结果为 f × f f\\times f f×f,**与原图大小相同** * **valid**:边界不填充,滤波结果为 ( f − g + 1 ) × ( f − g + 1 ) (f-g+1)\\times (f-g+1) (f−g\+1)×(f−g\+1),比原图小 ![1DncG9.png][] # 滤波杂谈 # * 基本假设:局部相关性(远处无关)、局部相似(edge处不满足)、噪声随机 * 静止图像的去噪,**若能获得图像序列,可以在时域上滤波(均值、中值等)**;**单张图像在空域上滤波**。 * **椒盐噪声用中值滤波**。椒盐噪声会随机地将像素置为黑或白,在实践中,会大幅改变像素值的噪声一般采用中值滤波都是有效的。 * 非椒盐噪声,均值为0的随机噪声(高斯噪声),可通过**moving average**滤波。 * 与图像内容耦合的噪声,可能需要依赖先验知识,采用合适的自适应滤波器,更多内容可以查看参考链接。 * 平滑相当于低通、锐化相当于高通、**不同平滑半径的差相当于带通**。 * **滤波的加速**可以考虑:滤波器是否行列可分离、缓存不必要的重复计算、近似计算、SIMD等。 * 差分算子对噪声敏感,所以差分前通常要先平滑。 * **考虑到噪声**,求梯度前通常要先(高斯)平滑再使用差分算子,**sobel算子可以看成是DoG(Derivative of Gaussian)的近似**,可以拆分成平滑和差分,如下所示,所以可以用[sobel][]求梯度。 G x = \[ 1 2 1 \] ∗ ( \[ + 1 0 − 1 \] ∗ A ) and G y = \[ + 1 0 − 1 \] ∗ ( \[ 1 2 1 \] ∗ A ) \\mathbf\{G\}\_\{x\}=\\left\[\\begin\{array\}\{l\}\{1\} \\\\ \{2\} \\\\ \{1\}\\end\{array\}\\right\] \*\\left(\\left\[\\begin\{array\}\{lll\}\{+1\} & \{0\} & \{-1\}\\end\{array\}\\right\] \* \\mathbf\{A\}\\right) \\quad \\text \{ and \} \\quad \\mathbf\{G\}\_\{y\}=\\left\[\\begin\{array\}\{c\}\{+1\} \\\\ \{0\} \\\\ \{-1\}\\end\{array\}\\right\] \*\\left(\\left\[\\begin\{array\}\{lll\}\{1\} & \{2\} & \{1\}\\end\{array\}\\right\] \* \\mathbf\{A\}\\right) Gx=⎣⎡121⎦⎤∗(\[\+10−1\]∗A) and Gy=⎣⎡\+10−1⎦⎤∗(\[121\]∗A) * **考虑到噪声**,求二阶导前通常也要先(高斯)平滑再使用拉普拉斯算子,两者合在一起即LoG(Laplacian of Gaussian),即对高斯求二阶导再离散采样,通常可以用\*\*DoG(Difference of Gaussian)\*\*即两个不同size高斯核的差近似,详见[Laplacian/Laplacian of Gaussian][Laplacian_Laplacian of Gaussian],其中Laplacian算子为 ∇ 2 f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \\nabla^\{2\} f=\\frac\{\\partial^\{2\} f\}\{\\partial x^\{2\}\}+\\frac\{\\partial^\{2\} f\}\{\\partial y^\{2\}\} ∇2f=∂x2∂2f\+∂y2∂2f * **模式检测**需要根据期望探测的模式来定义filter,因为不同场景需要检测的模式不同,所以filter也多种多样。反映模式的filter可以根据领域知识来人工定义、可以通过SOM(Self Organizing Map)无监督生成、也可以像CNN那样通过数据驱动有监督学习得到。比如,模板匹配中的模板为filter,相似度函数为滤波的计算方法;稀疏表示中字典的每一列都是filter,像gabor小波字典,通过相关运算计算与每个filter的相似程度,从而知道每个图像局部“长什么样子”。 # 参考 # * [CAP5415–Fall 2014-Lecture 2 (08/21/2014)–Filtering][CAP5415_Fall 2014-Lecture 2 _08_21_2014_Filtering] * [Computer Vision: Filtering][Computer Vision_ Filtering] * [Adaptive Filtering (Image Processing)][Adaptive Filtering _Image Processing] * [Adaptive Image Filters][] * [Image Kernels][] [Link 1]: https://www.cnblogs.com/shine-lee/ [CSDN]: https://blog.csdn.net/blogshinelee [blog]: https://blog.shinelee.me/ [http_setosa.io_ev_image-kernels]: https://img-blog.csdnimg.cn/20200210223131968.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZpcmVseA==,size_16,color_FFFFFF,t_70 [CAP5415_Fall 2014-Lecture 2 _08_21_2014_Filtering]: https://www.crcv.ucf.edu/wp-content/uploads/2019/03/Lecture-2-Filtering.pdf [Bilateral Filtering for Gray and Color Images]: http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html [filtering]: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDIwLzAyLzA0LzFEYW9vZC5wbmc?x-oss-process=image/format,png [https_www.cs.toronto.edu_urtasun_courses_CV_lecture02.pdf]: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDIwLzAyLzA0LzFEbndyVi5wbmc?x-oss-process=image/format,png [1DncG9.png]: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDIwLzAyLzA0LzFEbmNHOS5wbmc?x-oss-process=image/format,png [sobel]: https://en.wikipedia.org/wiki/Sobel_operator [Laplacian_Laplacian of Gaussian]: https://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm [Computer Vision_ Filtering]: https://www.cs.toronto.edu/~urtasun/courses/CV/lecture02.pdf [Adaptive Filtering _Image Processing]: http://what-when-how.com/embedded-image-processing-on-the-tms320c6000-dsp/adaptive-filtering-image-processing-part-1/ [Adaptive Image Filters]: https://link.springer.com/chapter/10.1007/978-3-662-04186-4_3 [Image Kernels]: http://setosa.io/ev/image-kernels/
还没有评论,来说两句吧...