如何在“连接的零部件”标签中使用“不连接集”
How to use Disjoint Sets in Connected Component labeling?
在连接组件标签中使用不连接集时遇到了一些困难。我已经看了很多例子,也看了这个问题,Bo田提供了一个非常好的实现的Disjoint Set作为C++链表。我已经在我的程序中实现了连接组件标记(标签是简单的整数),但我很难解决具有不相交集的标签之间的等价性。
有人能帮我吗?也许用Bo田的方法?我认为,当其他人走到这一步时,这也会有所帮助。
编辑
我的算法遍历图像,当它找到两个标签时,两个连接的像素有不同的标签,它必须在"等价注册表"(这将是Disjoint集合林)中记下。在循环整个图像后,我必须通过(在图像上进行第二次遍历)查看注册表,然后将这些具有等效标签的像素标记为集合中的最小值来解决等效性。
不相交集合林提供两个操作:
- 并集,它接受两个对象并将其链接,以及
- Find,它获取两个对象并返回它们所在组的ID
不相交集合林主要用于将一组对象划分为不同簇的族,每个簇彼此不相交(即,每个对象最多在一个组中)。然后,不相交的集合林允许您有效地判断每个组中的对象,或者(在大约O(n)时间内)确定每个对象的集群ID。
要使用不相交的集合林,首先要将每个对象放入其自己的簇中。从那时起,每次您想标记两个不同的对象在同一集群中时,都会使用联合操作将它们链接在一起。在最后,你会在每个点上调用find来确定它属于哪个集群,然后从那里可以读取所有东西属于哪个组。
希望这能有所帮助!
查看关于DJS的本教程。唯一的修改是,在并集过程中,必须将较大的连接到较小的,所以根总是集合的最小值。
您是对的,标记连接集只完成了一半的工作。使用等价找到不相交集也是同样困难的部分。我面对的正是这种情况。
查找不相交集(标记后)的一种方法是使用联合查找算法。看看下面的文章。您将从头开始了解如何标记和查找不相交集。还提供了示例输入和输出矩阵的说明。
http://www.codeding.com/articles/connected-sets-labeling
有一个关于用不相交集标记连接组件的博客:
http://www.keithlantz.net/2011/04/c-implementation-of-the-connected-component-labeling-method-using-the-disjoint-set-data-structure/
- QObject::连接不起作用 - 使用函数语法找不到信号
- 海湾合作委员会将外部连接不正确
- 如何在不将其连接到终端的情况下运行'screen',以便我可以在C++ (qt) 应用程序中捕获输出?
- QTcpSocket客户端如何理解它在队列中?(并且不会进入连接状态)
- 窗口处于全屏模式时,QT连接不起作用
- 有没有办法方便地为 Winsock send() 生成 HTTP 标头,而不是手动连接字符串
- Qt连接不同窗口中的类
- MySQL 服务器不接受远程连接
- 防止不需要Internet连接的桌面应用程序的盗版
- Qt连接不起作用
- 错误 C2308:连接不匹配的字符串
- 土壤连接不正确
- 在不轮询GetMessage()的情况下检测USB连接/断开连接
- 在Eclipse中找不到用于连接MySQL的C++代码的库
- 如果通过代理连接,客户端不会断开连接
- 套接字将在一段时间后死亡而不能重新连接
- Liboauth连接不正确
- 愉快地连接不兼容的类型会导致混乱
- 连接不匹配的字符串在VC2015工作-如何
- Qt:多线程连接不工作