首页 > 解决方案 > 图像中像素的位置是否控制边缘检测?

问题描述

由 andrew ng 参考此视频 https://youtu.be/XuD4C8vJzEQ?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF

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

我的结论正确吗?

反之亦然吗?

标签: image-processingconvolutionedge-detection

解决方案


如果您考虑过滤器:

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

在此处输入图像描述

你可以看到它只发现从暗到亮的边缘。

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

  • 使用有符号数(而不是无符号数),这样您就可以得到否定的结果,或者
  • 为您的卷积添加“偏差” 。

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

因此,应用偏差,您的过滤器现在可以找到从暗到亮和从亮到暗的边缘:

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

在此处输入图像描述


如果您现在想要检测从明到暗过渡的水平边缘,请将滤镜旋转到以下位置:

-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

在此处输入图像描述

或者,如果您想找到从暗到亮过渡的水平边缘,请使用:

 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

在此处输入图像描述

再次相同,但有偏差,因此我们可以一口气找到从亮到暗和从暗到亮的过渡:

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 在这里以一种非常平易近人的风格提供了比您希望需要的更多关于卷积的优秀信息。


推荐阅读