图像中像素的位置是否控制边缘检测?

Does the position of the pixels in an image govern the edge detection?

Referring this video by andrew ng https://youtu.be/XuD4C8vJzEQ?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF

从这个视频中我得出结论,为了检测图像中的垂直边缘,应该有一些更亮的区域,然后是从左侧开始的更暗的区域,然后只有这个 [[1,0,-1],[1,0 ,-1],[1,0,-1]] 将充当垂直边缘检测器,否则不会。

Is my conclusion correct ?

Is the vice versa will also be true ?

如果你考虑过滤器:

1 0 -1
1 0 -1
1 0 -1

你会看到它只是在每个位置用左边的像素减去右边的像素,即找到水平差异。

因此,它能够找到从亮到暗和从暗到亮的过渡,只是差异会以相反的符号(加号或减号)显示。所以,如果你从左边的亮区过渡到右边的暗区,你会得到一个大数(亮)减去一个小数(暗),差值将为正。相反,如果你从左边的暗区(小数)过渡到右边的亮区(大数),你最终会得到负差异。

这是一个示例,刚刚在终端中使用 ImageMagick 完成。从这张图片开始:

应用您所说的过滤器:

magick input.png -morphology convolve '3x3: 1,0,-1 1,0,-1 1,0,-1' result.png

你可以看到它只找到 dark-to-light 条边。

如果要检测从亮到暗和从暗到亮的边缘,您需要:

  • 使用有符号数(而不是无符号数),这样您就可以保留负数结果,或者
  • 在你的卷积中添加一个"bias"

例如,如果您的数据是无符号 8 位数据,则​​可以通过将所有当前值除以 2 并在卷积之前加上 127 来添加 50% 的偏差。

因此,应用偏差,您的过滤器现在找到 dark-to-light 和 light-to-dark 边缘:

magick input.png -define convolve:scale='50%!' -bias 50% -morphology convolve '3x3: 1,0,-1 1,0,-1 1,0,-1' result.png


如果您现在想要检测从 light-to-dark 过渡的水平边缘,请将过滤器旋转到此:

-1 -1 -1
 0  0  0
 1  1  1

并申请:

magick input.png -morphology convolve '3x3: -1,-1,-1 0,0,0 1,1,1' result.png

或者,如果您想找到从 dark-to-light 过渡的水平边缘,请使用:

 1  1  1
 0  0  0
-1 -1 -1

magick input.png -morphology convolve '3x3: 1,1,1 0,0,0 -1,-1,-1' result.png

再次相同,但有偏差,因此我们可以一次性找到 light-to-dark 和 dark-to-light 转换:

magick image.png -define convolve:scale='50%!' -bias 50% -morphology convolve '3x3: -1,-1,-1 0,0,0 1,1,1' result.png


Anthony Thyssen 以非常平易近人的方式提供了比您希望需要的更多关于卷积的优秀信息 here