我们知道,图像在Matlab 中是用矩阵表示的,虽然RGB等彩色图像和灰度图像的矩阵表示方式不同,终归也是矩阵。
为了便于理解,我们先引入一维函数滤波的概念,再引入二维图像的滤波。基本原理:滤波器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大小。
一维和二维的情况很相像,需要注意填充扩展对图像的影响,我们将在后面的实验中讨论。总的来说:从开始位置平移掩膜到第一行运行结束位置,在每个位置上执行掩膜覆盖的亮度值与对应的掩膜系数相乘结果累加得到对应点的像素值。然后跳到第二行的起始位置继续平移和运算,如此反复直到掩膜移动到 整个运算的结束位置。(不过根据设定输出图像大小为same还是full,掩膜移动的范围有所不同。后文将讲具体描述。)关于掩膜的大小:通常使用奇数维的方阵作为掩膜/滤波器,因为奇数维的方正有唯一的一个中心点,比较直观。相关运算:1、对齐:得到same大小的输出结果,只需要保证掩膜中心能够覆盖全图每个像素点即可。此时只需将掩膜中心与图像矩阵第一行第一个元素对齐即可。full 的情况如下图,得到的有值的区域可能会有所拓宽,不过不影响原图大小尺寸的滤波结果的得出。2、填充:同一维中的理由,在二维中我们需要对图像进行填充。Matlab中的填充方式有4种:a/ 通过值P来进行扩展。(P为常量值,如本例中使用的为“0”)
b/ 过复制图像边界进行扩展填充。
c/ 过镜像反射图像边界来扩展填充。d/ 图像看成二维周期函数来扩展。在函数imfilter中会有具体的参数来设置这几种方式。后面函数介绍部分会具体描述。3、运算:将掩膜覆盖的亮度值与对应的掩膜系数相乘后结果累加得到对应点的输出像素值。然后进行平移继续运算,如此反复,直到平移结束位置。4、输出大小:分为full 类型和same类型。其意义与一维中一致。卷积运算的情况与相关类似,不过对掩膜进行了180°的旋转。
文章评论(0条评论)
登录后参与讨论