【问题标题】:need algorithm to find edge and boundary of matrix members需要算法来找到矩阵成员的边缘和边界
【发布时间】:2015-02-27 18:19:39
【问题描述】:

我有一个 16X16 矩阵,其中包含来自 0、1、2、3 的成员,我想知道我应该使用哪种算法来找到成员之间的边界以显示分组,换句话说,应该使用哪种算法我发现这个分组的边缘?我希望以另一个矩阵的形式检测边缘,所以当我绘制这两个矩阵时,第二个矩阵显示数字组的边界和边缘。 Moore Neighbor Contour Tracer 算法是否足够?但我不确定算法的结果是否符合我的期望。

00000000000000000000000000
33000000001111111111111111
33330000000001111111111111
33330000000000000111111111
00000000000000000010000000
00000000001111111111111111
00000000000000000000000000
01111111111111111111111111
00000001111111111111111111
11111111111111111111111111
00000000001111122222221111
00000000001111112222221111
00000001111111112222222222
00000000000001112222222222
00000000000000122222222222
00000000000000022222222222

【问题讨论】:

  • 绝对不是问这个问题的正确地方

标签: c# algorithm matrix edge-detection boundary


【解决方案1】:

这取决于您实际定义边缘的方式。例如,在 3 和 0 之间,边缘在哪里?在 3 上,在 0 上,还是两者兼而有之?因为根据您的描述,边不能位于两个单元格之间。

无论如何,我最简单的想法是遍历所有单元格,并找到具有不同邻居的单元格。例如,找到所有 3 个单元格,然后找到每个单元格的所有 2-4(或对角线的 3-8 个)邻居,并查看是否有任何邻居与 3 不同。如果 3 被所有 3 包围,则它在里面一个组,但如果它有一个 0、1 或 2 个邻居,那么它就在边缘。你不需要任何特殊的算法。 Edge detection 算法实际上用于图像处理,其中边缘并不谨慎。

为了找到属于一起的单元格,您需要一个flood fill algorithm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2018-05-25
    • 1970-01-01
    • 2023-01-31
    • 2017-03-16
    相关资源
    最近更新 更多