通过上一篇文章,你可能看到一个经过巧妙设计的Filter具有了检测竖直边缘的能力。这一篇文章我们就来进一步了解一下Filter。

竖直边缘

之前文章讲过的竖直边缘探测Filter,因为它中线两侧元素分别为1和-1,和相同颜色相乘后累加为0.颜色过度越明显,卷积后值越大,也就是边缘越明显。中线元素为0,和任意元素相乘为0,看起来没有什么作用。实际filter一般行列数为奇数个。中间一列为了不对两边元素造成影响,所以选取0.值域为什么列数为奇数个,我们后边会说。

水平边缘

同理,我们只要把竖直边缘检测Filter通过90°翻转,就得到一个水平边缘检测器:

明暗转化

之前我们看到例子,图片是左边亮,右边暗。左边灰度值为10,右边灰度值为0。

白色用RGB表示是255,255,255.黑色是0,0,0。我之前老是把这两个值搞反。可以这样理解,R,G,B分别代表你手机屏幕下的三个小灯泡。都为0的时候,表示它们都关了。所以是黑色。都为255,表示它们都是最大亮度,屏幕显示白色.

通过竖直边缘检测,最终得到的输出为:

那么如果我们的原始图片是左边暗,右边亮呢?也就是左边灰度值为0,右边灰度值为10.


那么通过竖直边缘检测后,我们发现生成的输出为:

可见如果图片从左到右如果是从明到暗,经过竖直边缘Fitler卷积后,生成矩阵中间为正数,如果是从暗到明,生成矩阵中间为数值为负数。

如果你对这种明暗过度不在意,可以在生成矩阵里取绝对值。

其他边缘检测Filter

关于边缘检测还有其他一些Filter,我们以竖直边缘检测Filter为例。为了加大图像中心中心的权重,我们在Filter矩阵的中间一行乘以2,得到如下的Filter矩阵:

DeepLearning里的Filter

上边这些Fitler只能识别横向和竖直的边缘,那么我们如果想识别斜边呢?或者有些弧度的边缘呢?我们该怎么构造这些Filter呢?之前我们提到了端到端学习,这里的Filter其实也是人类的一些经验植入到学习系统里。是否可以让算法自己去学习这些Fitler呢?答案是可以的。
我们将一个Filter里的值参数化,让网络自己去学习最合适的Fitler。就像之前我们说的神经网络里的weight值:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: