我试图找出一种有效的方法来实现二进制图像的图像膨胀和腐蚀。据我了解,天真的方法是:
- 循环遍历图像
- 如果像素为 1
- 根据结构元素的高度和宽度循环遍历邻域
- (dilate) 将图像的每个像素替换为 SE 对应位置的值
- (侵蚀)检查所有邻域是否等于 SE,如果是,则保留所有像素,否则删除中心
所以这意味着对于每个像素,我必须循环通过 SE 以及使其成为 O(N M W*H)。
有没有更优雅的方式来做到这一点?
我试图找出一种有效的方法来实现二进制图像的图像膨胀和腐蚀。据我了解,天真的方法是:
所以这意味着对于每个像素,我必须循环通过 SE 以及使其成为 O(N M W*H)。
有没有更优雅的方式来做到这一点?
是的,有!!!
首先,您要将(如果可能)您的结构元素分解为段(由垂直和水平段组成的正方形)。然后你只对段执行腐蚀/膨胀,这已经降低了复杂性。
现在对于腐蚀/膨胀部分,您有不同的解决方案:
对于磁盘类型的结构化元素,没有什么“快速”,您必须使用基本算法。对于六边形结构元素,您可以逐行工作,但不能并行化。