我有一个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
答案 0 :(得分:0)
这取决于您实际定义边缘的方式。例如,在3和0之间,哪里是边缘?在3上,在0上,还是两者兼而有之?因为根据您的描述,边缘不能位于两个单元格之间。
无论如何,我最简单的想法是循环遍历所有单元格,找到那些具有不同邻居的单元格。例如,找到所有3个单元格,然后找到每个单元格的所有2-4个(或对角线的3-8个),并查看是否有任何邻居与3不同。如果3被3个所包围,那么它就在里面一个组,但如果它有0,1或2个邻居,那么它就在边缘。你不需要任何特殊的算法。 Edge detection算法实际上用于图像处理,其中边缘不是谨慎的。
要查找属于一起的单元格,您需要flood fill algorithm。