【发布时间】:2014-12-03 19:25:49
【问题描述】:
我正在尝试找出一种有效的方法来实现二进制图像的图像膨胀和腐蚀。据我了解,天真的方法是:
- 循环浏览图片
- 如果像素为 1
- 根据结构元素的邻域循环 高度和宽度
- (扩张)将图像的每个像素替换为 SE的对应位置
- (侵蚀)检查所有邻域是否等于 SE,如果是,则保留所有 像素,否则删除中心
所以这意味着对于每个像素我必须循环通过 SE 以及使其成为 O(NMW*H)。
有没有更优雅的方式来做到这一点?
【问题讨论】:
-
如果您的图像有大背景,我的一个想法是从不重叠的邻域开始,因为只有在存在
0像素时才会发生膨胀,然后只有在 @ 时才会移动到重叠的邻域在邻域中检测到 987654323@ 个像素。事实上,侵蚀/扩张过滤器比大多数其他图像处理过滤器要快得多,因为它们不需要任何数学运算(例如模糊处理)。 -
可以的。我也读过关于转移和使用逻辑操作的文章,但我从未真正找到任何详细的内容。我的理解是,可以通过在基于 SE 的方向上复制和移动图像并与所有图像执行 AND 来完成扩张
-
我刚刚注意到一个类似的问题:stackoverflow.com/questions/21854594/…。一种简单的方法是先执行一维垂直扩张,然后执行一维水平扩张,但一个答案描述了一种更有效的解决方案。
标签: image-processing mathematical-morphology