由安德鲁·恩(ng。 https://youtu.be/XuD4C8vJzEQ?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF
从这段视频中,我得出结论,为了检测图像中的垂直边缘,应该从左侧开始有一些BRIGHTER,然后是DARKER区域,然后只有[[1,0,-1],[1,0,- 1],[1,0,-1]]将充当垂直边缘检测器,否则不起作用。
我的结论正确吗?
和
反之亦然吗?
答案 0 :(得分:2)
如果您考虑使用过滤器:
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)以非常平易近人的风格here为您提供了比卷积更好的卷积信息。