image-processing - 图像中像素的位置是否控制边缘检测?
问题描述
由 andrew ng 参考此视频 https://youtu.be/XuD4C8vJzEQ?list=PLkDaE6sCZn6Gl29AoE31iwdVwSG-KnDzF
从这个视频中,我得出结论,为了检测图像中的垂直边缘,应该从左侧开始有一些 BRIGHTER 随后是 DARKER 区域,然后只有这个 [[1,0,-1],[1,0,-1], [1,0,-1]] 将充当垂直边缘检测器,否则不会。
我的结论正确吗?
和
反之亦然吗?
解决方案
如果您考虑过滤器:
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 在这里以一种非常平易近人的风格提供了比您希望需要的更多关于卷积的优秀信息。
推荐阅读
- javascript - 如何在 .json 对象中设置 sysdate 变量?
- amazon-web-services - 将特定 AWS ECS 任务映射到 FARGATE 或 FARGATE_SPOT 容量提供程序
- flutter - 我如何得到飞镖方程的答案?X*A+B=0
- android - 如何启用/禁用 android 软键盘中的单个键?或启用/禁用键状态
- c++ - Eigen::Matrixbase 受保护的析构函数
- docker - 为什么我在同一个 docker 映像中看到不同的文件?
- spring - spring security不支持的配置属性hasRole(),spring升级后permitAll
- python - 如何获取 svg 路径的点
- sql - 如何计算2个及以上客户访问的房间?
- google-chrome - 使用 Chrome Signer 数字浏览器扩展对 XML 进行签名