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

时间:2019-05-04 07:44:54

标签: image-processing convolution edge-detection

  

由安德鲁·恩(ng。   https://youtu.be/XuD4C8vJzEQ?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF

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

  

我的结论正确吗?

  

反之亦然吗?

1 个答案:

答案 0 :(得分:2)

如果您考虑使用过滤器:

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

您会发现它只是从每个位置的左侧像素减去右侧像素,即找到水平差。

因此,它能够找到从亮到暗,从暗到亮的过渡,只是差异会以相反的符号(加号或减号)显示。因此,如果您从左侧的明亮区域过渡到右侧的较暗区域,那么您将获得一个较大的数字(明亮)减去一个较小的数字(黑暗),并且差异将为正。相反,如果您从左侧的暗区(较小的数字)过渡到右侧的亮区(较大的数字),最终结果将为负。

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

enter image description here

应用您正在谈论的过滤器:

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

enter image description here

您会看到它只能找到从暗到亮的边缘。

如果要检测从浅到深以及从深到浅的边缘,则需要:

  • 使用带符号的数字(而不是无符号的数字),以便您获得否定结果,或者
  • 为卷积添加“偏差”

例如,如果您的数据是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

enter image description here


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

-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

enter image description here

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

 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

enter image description here

还是一样,只是有一个偏见,因此我们可以一口气找到明暗过渡:

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

enter image description here


安东尼·蒂森(Anthony Thyssen)以非常平易近人的风格here为您提供了比卷积更好的卷积信息。