tag 标签: 线性空间滤波

相关博文
  • 热度 20
    2013-8-27 14:22
    5827 次阅读|
    0 个评论
    概述       我们知道,图像在Matlab 中是用矩阵表示的,虽然RGB等彩色图像和灰度图像的矩阵表示方式不同,终归也是矩阵。       而在Matlab中所涉及的线性空间滤波,从本质上来说是两个矩阵的卷积或者相关运算:通过相应滤波器(或者称之为掩膜,实际也为一个二维矩阵)与图像矩阵进行卷积或者相关运算实现。卷积运算和相关运算的区别在于:滤波矩阵(掩膜)经过了翻转,后文中将对此进行介绍。        (线性空间滤波,是规定了掩膜大小,对邻域像素进行的线性运算,输出的响应为掩膜内的像素进行线性运算后的得数值。与以后要介绍的的非线性空间滤波的区别之处在于对于邻域像素的处理的方式。) 矩阵卷积 写在前面: (按照信号卷积的理论,N维向量与M维向量卷积后,所得向量的长度为:N+M。与我们后面要讨论情形的有所不同,请注意区分。) 一维: 为了便于理解,我们先引入一维函数滤波的概念,再引入二维图像的滤波。 基本原理:滤波器w与函数f起始位置对齐后,逐位移动,并且每次移动都进行按位相乘结果累加得到某位的结输出。 设,一维函数 f 为: 0 0 0 0 1 0 0 0 0 ; 滤波器 w:1 2 3 4 5 相关运算的过程: 1、对齐:将 w 的开始位置 5 与 f 的开始位置 0对齐。对齐位置作为运算起点。 2、填充:为了使得 w 每一次运算中各位都有值相乘,对 f 起始位置和结尾无对应位的位置进行“0填充”。             (注意下填充的概念,在图像滤波中,填充的值对图像滤波的影响比较大。)。 3、 计算:将上下对应的位相乘后全部相加得到结果的第一位,输出位置总是在。               向右移动滤波器w “N”位,并进行相同的运算得到相应第N位的计算结果。 4、 输出大小: Matlab中我们使用imfilter函数来进行卷积或者相关运算;(后文中,将具体介绍imfilter函数。)               得到的结果的大小分为“full”和“same”两类,full包含填充项,same为原f大小。                    卷积运算与相关运算类似,只是将滤波器矩阵旋转了180°后进行与之一样的运算。                  二维: 一维和二维的情况很相像,需要注意填充扩展对图像的影响,我们将在后面的实验中讨论。   总的来说:从开始位置平移掩膜到第一行运行结束位置,在每个位置上执行掩膜覆盖的亮度值与对应的掩膜系数相乘结果累加得到对应点的像素值。 然后跳到第二行的起始位置继续平移和运算,如此反复直到掩膜移动到 整个运算的结束位置。 (不过根据设定输出图像大小为same还是full,掩膜移动的范围有所不同。后文将讲具体描述。)   关于掩膜的大小:通常使用奇数维的方阵作为掩膜/滤波器,因为奇数维的方正有唯一的一个中心点,比较直观。   相关运算: 1、对齐:得到same大小的输出结果,只需要保证掩膜中心能够覆盖全图每个像素点即可。               此时只需将掩膜中心与图像矩阵第一行第一个元素对齐即可。               full 的情况如下图,得到的有值的区域可能会有所拓宽,不过不影响原图大小尺寸的滤波结果的得出。 2、填充:同一维中的理由,在二维中我们需要对图像进行填充。 Matlab中的填充方式有4种: a/ 通过值P来进行扩展。(P为常量值,如本例中使用的为“0”) b/ 过复制图像边界进行扩展填充。 c/ 过镜像反射图像边界来扩展填充。 d/ 图像看成二维周期函数来扩展。 在函数imfilter中会有具体的参数来设置这几种方式。后面函数介绍部分会具体描述。 3、运算:将掩膜覆盖的亮度值与对应的掩膜系数相乘后结果累加得到对应点的输出像素值。然后进行平移继续运算,如此反复,直到平移结束位置。 4、输出大小:分为full 类型和same类型。其意义与一维中一致。 卷积运算的情况与相关类似,不过对掩膜进行了180°的旋转。     imfilter函数介绍   函数描述: B = imfilter(A, H) 使用多维矩阵H来对矩阵向量A进行滤波。矩阵A可以是任意种类和维度的逻辑或者非稀疏数值矩阵。结果B与A拥有相同的大小和类型。 输出B中的每一个元素都使用双精度浮点型来进行计算。如果A为整型或者逻辑矩阵,那么超出整型范围的元素将会被截短,而小数值则 进行取整。   B = imfilter(A, H, option1, option2,...) 根据特定的选项进行多维滤波。选项可以有如下值: