3.4 Fundamentals of Spatial Filtering

本章介绍了空间滤波器的一些概念。

线性空间滤波器

线性空间滤波器在图像\(f\)和滤波核\(w\)之间进行运算。滤波核是一个数组,其大小定义了运算的区域,其系数决定了滤波器的性质。\(filter\ kernel\)可以称为mask,template,window。

一般来说,核大小都是奇数。进行滤波的一般公式如下:

\[g(x,y)=\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t) \]

其中,核大小为\(m\times n,m=2a+1,n=2b+1\)。在这个式子中,\(x\)\(y\)是变化的,这样这个式子可以遍历到图像中的每个像素。若将\(x\)\(y\)固定,则有:

\[g(x,y)=w(-1,-1)f(x-1,y-1)+w(-1,0)f(x-1,y)+\dots+\\w(0,0)f(x,y)+\dots w(1,1)f(x+1,y+1) \]

为什么使用奇数大小:方便索引,并且滤波器是空间对称的。

空间相关与卷积

空间相关与卷积原理相同,区别在于,卷积将空间相关的滤波器旋转了\(180°\)

一维

首先是一维卷积:

\[g(x)=\sum_{s=-a}^a w(s)f(x+s) \]

下面是一个例子:

image

可以看到,空间相关与卷积的差别只是将卷积核反转了\(180°\)。需要注意的是,因为起始是将图像的原点与卷积核的中心对准,所以左右必须进行\(0\)填充。

对上图的一些解释:
\(g(0)=w(-2)f(-2)+w(-1)f(-1)+\dots +w(2)f(2)=0\)

相当于卷积核在图像上进行移动,相乘求和,最后的结果对应于输出图像的一个像素。

当内核\(w\)与只包含一个\(1\),其余为\(0\)\(f\)相关联时,会将w水平反转180°(像上图一样)。这种只有一个\(1\),其余全为\(0\)\(f\)称为离散单元脉冲。

上图右侧是卷积的相关操作,内核被事先旋转,所以最后我们得到的结果就是内核的准确复制。

二维

二维操作与一维类似。对于二维,将核旋转\(180°\)相当于在\(x\)\(y\)轴上同时做对称。

image

脉冲是线性系统理论的基础。位于坐标\((x_0,y_0)\)的离散强度脉冲(振幅)A定义为:

\[\sigma(x-x_0,y-y_0)= \left\{ \begin{array}{**lr**} A,如果x=x_0并且y=y_0\\ 0,其他情况 \end{array} \right. \]

比如下图中,只有当x=3时有值。这就可以表示为\(\sigma(x-3)\)(而且在这个例子中,振幅A为1,所以这还是一个单元脉冲)

image

对上面的空间相关总结如下:

一张图片\(f(x,y)\),核\(w\),大小为\(m\times n\),空间相关的操作记为:

\[(w☆f)(x,y)=\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t) \]

卷积相关的操作如下:

\[(w★f)(x,y)=\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x-s,y-t) \]

其中\(m,n\)为奇数,并且\(a=(m-1)/2,b=(n-1)/2\)

下表是空间相关与卷积的相关性质:

性质 卷积 相关
对称性 \(f★g=g★f\) -
结合律 \(f★(g★h)=(f★g)★h\) -
分配律 \(f★(g+h)=(f★g)+(f★h)\) \(f☆(g+h)=(f☆g)+(f☆h)\)

有时候,每个阶段会使用不同的内核,按顺序、分阶段对图像进行过滤(卷积):

\[w=w_1★w_2★w_3★\dots★w_Q \]

注意,对于空间相关不适用于上面的式子,因为只有卷积具有交换律。

Separable Filter Kernels

一个二维函数G(x,y)如果可以写为两个一维函数的乘积,则称它是可分离的:

\[G(x,y)=G_1(x)G_2(y) \]

对于卷积核\(\omega\)来说,\(\omega\)可以分离为\(\omega=vw^T\)

结合上面的卷积结合律,一个输入\(f\)与卷积核\(\omega\)可以写为

\[\omega★f=(w_1★w_2)★f=(w_2★w_1)★f=w_2★(w_1★f)=(w_1★f)★w_2 \]

也就是说,对一张图片进行卷积,可以通过将卷积核先分解为两个小卷积核\(w_1\)\(w_2\),然后分别进行卷积。

对于一张大小为\(M\times N\)的图片和一个\(m\times n\) 大小的核,如果使用\((6)\)的方式计算,一共需要\(MNmn\)次加法与乘法。但是如果将核分离,并先计算\(w_1★f\),需要使用\(MNm\)次加法与乘法;将上一步的结果再与\(w_2\)进行卷积,需要\(MNn\)次。一共加起来是\(MN(m+n)\)次。与不分离相比,计算量的优势为:

\[C=\frac{MNmn}{MN(m+n)}=\frac{mn}{m+n} \]

由矩阵原理可知,一个列向量与行向量相乘,结果的秩总是1。所以说,一个可分离的核,其秩一定是1。

现在假设有一个秩为1的矩阵,用下面三步来将其分解为两个向量\(v\)\(w\)的乘积:

  1. 现在矩阵中找到任何非零元素,并让E代表其值;
  2. 让向量\(c\)\(r\)等于在步骤1中知道到的元素所在的行和列;
  3. 参考\(\omega=vw^T\),让\(v=c,w^T=r/E\)

例如:\(kernel=\left[ \matrix{ 1&2&3\\4&5&6\\7&8&9 }\right]\),先任意找到一个非零元素E,比如2。然后用c表示其列向量,\(c=\left[ \matrix{2\\4\\6}\right]\)\(r\)表示其行向量,\(r=\left[\matrix{2&4&6}\right]\)\(v=c=\left[ \matrix{2\\4\\6}\right],w=\frac{1}{E}r=\frac{1}{2}\left[\matrix{2&4&6}\right]=\left[\matrix{\frac{1}{2}&1&\frac{3}{2}}\right]\)

循环对称核(circularly symmetric kernels):可以使用核中心的一列来描述整个核,\(w=vv^T/c\)\(c\)为核中心的值。将这个核分解,可以得到\(w_1=v,w_2=v^T/c\)

posted @ 2021-11-20 13:50  康先森  阅读(86)  评论(0编辑  收藏  举报