图像处理中的分割连通区域的方法!举例如下,
A=[1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0];
要得到结果:
B=[ 1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 3 3 0
1 1 1 0 0 0 0 0];
matlab里有比较好的方法,可在C++里就很麻烦了!!!
今天被这个问题折磨了半天,,,差点连晚饭也忘了吃!!!虽然问题基本解决,,,但速度还很慢!!!晚上在宿舍里终于看到了比较好的方法,,,这里做个记录,,,以免忘了!!!
16年前,有两位分别叫Haralick Robert M 和 Linda G. Shapiro的高人在他们的《Computer and Robot Vision》(Volume I)中写了一种方法,简单描述如下:
1、Run-length encode the input image.
2、Scan the runs, assigning preliminary labels and recording label equivalences in a local equivalence table.
3、Resolve the equivalence classes.
4、Relabel the runs based on the resolved equivalence classes.
速度颇快,但不好实现!!!不知道OpenCV里有没有现成的!!!
阅读(13885) | 评论(3) | 转发(0) |