1-2 边缘检测示例

边缘检测示例( Edge detection example)

在人脸识别过程中神经网络的前几层是如何检测边缘的,然后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体。

这是一个 6×6 的灰度图像。因为是灰度图像,所以它是 6×6×1 的矩阵:

为了检测图像中的垂直边缘,你可以构造一个 3×3矩阵。在共用习惯中,在卷积神经网络的术语中,它被称为过滤器。我要构造一个 3×3 的过滤器,像这样:

在论文它有时候会被称为核,而不是过滤器。

这个卷积运算的输出将会是一个 4×4 的矩阵,你可以将它看成一个 4×4 的图像。

为了计算第一个元素,在 4×4 左上角的那个元素,使用 3×3 的过滤器,将其覆盖在输入图像,如下图所示。 然后进行元素乘法(element-wise products)运算,所以:

然后将该矩阵每个元素相加得到最左上角的元素,即3 + 1 + 2 + 0 + 0 + 0 + (-1) + (-8) + (-2)= -5。接下来,为了弄明白第二个元素是什么,你要把蓝色的方块,向右移动一步,像这样:

继续做同样的元素乘法,然后加起来,所以是 0 × 1 + 5 × 1 + 7 × 1 + 1 × 0 + 8 × 0 + 2 × 0 + 2 × (-1) + 9 × (-1) + 5 × (-1) = -4。同样的方法,可以得到第一行的输出:

接下来为了得到下一行的元素,现在把蓝色块下移:

以此类推,这样计算完矩阵中的其他元素:

因此 6×6 矩阵和 3×3 矩阵进行卷积运算得到 4×4 矩阵。这些图片和过滤器是不同维度的矩阵,但左边矩阵容易被理解为一张图片,中间的这个被理解为过滤器,右边的图片我们可以理解为另一张图片。这个就是垂直边缘检测器。

为什么这个可以做垂直边缘检测呢?让我们来看另外一个例子:

这是一个简单的 6×6 图像,左边的一半是 10,右边一般是 0。如果你把它当成一个图片,左边那部分看起来是白色的,像素值 10 是比较亮的像素值,右边像素值比较暗,我使用灰色来表示 0,尽管它也可以被画成黑的。图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色,经过卷积后的结果如下图所示:

这里的维数似乎有点不正确,检测到的边缘太粗了。因为在这个例子中,图片太小了。如果你用一个 1000×1000 的图像,而不是 6×6 的图片,你会发现其会很好地检测出图像中的垂直边缘。在这个例子中,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。从垂直边缘检测中可以得到的启发是,因为我们使用 3×3的矩阵(过滤器),所以垂直边缘是一个 3×3 的区域,左边是明亮的像素,中间的并不需要考虑,右边是深色像素。在这个 6×6 图像的中间部分,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘,卷积运算提供了一个方便的方法来发现图像中的垂直边缘。

posted @ 2018-11-04 15:34  刘-皇叔  阅读(1605)  评论(0编辑  收藏  举报