边缘检测算子的系数和
在使用边缘检测算子对图像进行边缘检测的时候,我们会发现,各种算子,例如Roberts算子,Laplace算子,Prewitt算子以及Sobel算子,其掩膜的系数和均为零。而另一方面,对于平滑算子,例如均值滤波器,其掩膜系数的和均为正数,且具有一个归一化系数,使得掩膜系数和为1。平滑算子的归一化系数是为了保证输出图像的灰阶和输入图像的灰阶相同(即8bit -> 8bit),这是很好理解的,因此以下仅讨论边缘检测算子和平滑算子系数和一个为零,一个不为零的原因。
Roberts算子
Laplace算子
Prewitt算子
Sobel算子
均值滤波器(盒状滤波器)
形象的理解
如果简单考虑掩膜本身的性质——因为掩膜本身是需要和图像的像素进行卷积,即对于目标像素而言,是将目标像素与其领域组成的像素集合(集合大小由掩膜大小决定,3x3掩膜决定目标像素和周围8个像素共同组成的3x3像素集合)乘以掩膜的各个系数并最后累加起来,并替换目标像素的值。说的更明白一点,掩膜的卷积,就像是由目标像素和周围的像素共同投票决定目标像素的实际值,而每个像素的投票权利可能不一样——这是由掩膜的系数决定的,每个像素的初始票数也不一样——这是由原始图像的灰度值决定的。
在平滑的环境下,所有的系数都是同样符号的,也即像素集合中的所有像素,或许投票权利大不相同(例如高斯滤波器),但是都是赞成票,即大家的心思都是一个方向的。此外,由于自己的投票会影响到周围像素,高灰度值会被周围的低像素值拉低,低灰度值会被高灰度值拉高,导致像素之间的差距减小了,也最终导致了最后的平滑效果。
而在边缘检测的环境下,这些系数却一部分是正,一部分是负,且赞成票与反对票的权重是相同的——因此最终的结果只能体现在初始票数的不同上。因此掩膜卷积的结果是得到目标像素和其周围像素之间的差距,因此最终导致了边缘的突出(灰度差距越大,边缘越突出)。
从差分的角度
这里使用更数学的表达。由于数字图像是二维的离散信号,因此接下来为了讨论方便,讨论一维的离散信号。
对于一个1D离散信号 $ f(x) $,其一阶差分$Df(x)=f(x+1)-f(x)$,二阶差分$D^2f(x)=D(Df(x))=f(x+2)-2f(x+1)+f(x)$,以此类推。在这里也可以看出来,任意阶差分的表达式中,所有项的系数和为零。而零阶,也就是$f(x)$,其系数和为1。
在1D信号中,我们也可以将$f(x)$看做是目标像素,$f(x+n)$看做是周围像素。
由此,我们可以推论:对于任意一阶与一阶以上的差分函数的线性组合,其系数和总为零;同时,对于任意关于$f(x+n)$的多项式,只要其系数和为零,都可以看成是一些差分函数的线性组合。如果说一阶差分代表原始信号的一阶梯度抽象,二阶差分代表二阶梯度抽象,那么,任意系数为零的多项式,其可分解为部分差分函数的线性组合,也即说明此多项式代表原始信号的部分抽象的线性组合。在这里,多项式的结果即可看做掩膜的卷积结果。
如果多项式的系数和不为零,那么可以分为系数和为零的部分和不为零的部分,其中系数和为零的部分依旧代表抽象;而不为零的部分,其形式为$f(x+n)$的组合,且均同号,这里f(x+n)则是仅仅代表信号在空间中有移动,但是其整体信息依旧是零阶的原始信号的信息。因此,如果多项式的系数和不为零,其必然包含有原始信号的信息。
或许读者会思考到这样一个问题:如果原始图像(2nx2n大小)是左半边白色,右半边为黑色,而多项式$f(x)+f(x+n)$中,除了原始图像外,仅有的一项是图像右移半幅图像的距离,那么叠加的输出图像全为白色,而体现不出原始图像的信息。事实上,出现这样的问题,是因为尺度没有考虑清楚。由于多项式的结果是掩膜的卷积结果,因此很容易想到,如果掩膜的过大(上面出现的问题即为掩膜过大),就会对图像过度平滑(因为这里的多项式系数和不为零,因此掩膜为平滑算子),导致图像信息过度减少。而在实际应用过程中,掩膜的大小通常会远小于图像大小,因此不会造成图像信息的过度减少。
总结
因此,边缘平滑算子掩膜的系数和为零并不是偶然——正是因为我们需要原始图像的差分抽象信息,而不希望输出图像中混杂有原始图像的信息,因此才需要算子的系数和必须为零。反之,如果在图像处理过程中,需要原始图像的信息,设计掩膜时,则算子的系数和不能为零。