我有一个图像,保存分段结果,就像这个。
我需要建立一个贴片附近的图形,用不同颜色着色。 因此,我想要一个结构,代表以下内容
这里的数字表示单独的补丁,而线条表示补丁的邻域。 目前我无法弄清楚从哪里开始,谷歌有哪些关键词。
有人可以提出任何有用的建议吗?
图像存储在OpenCV的cv :: Mat类中,对于图形,我打算使用Boost.Graph库。
所以,请给我一些代码示例和算法或关键字的链接。
感谢。
更新即可。 在喝咖啡休息和一些讨论后,我想到了以下几点。
我的另一个问题是我不熟悉BGL(但是这本书正在发布:)。)
那么,您如何看待这个解决方案?
UPDATE2 可能这个link可以提供帮助。
然而,仍未找到解决方案。
答案 0 :(得分:5)
你可以这样解决:
定义区域(图表中的数字)
在区域之间建立链接
虽然我不得不承认我对这个话题一无所知..只是我的简单想法..
答案 1 :(得分:2)
您可以使用BFS标记区域。
要将cv :: Mat暴露给BGL,你应该编写很多代码。我认为编写自己的bfs要简单得多。
比你每两个偶像都要将他们的分数写到std::set<std::pair<mark_t, mark_t>>
。
而不是从那里建立图表。
答案 2 :(得分:0)
我认为如果你的色块是随机的,你可能需要一个强力算法来做你想要的。一个想法可能是:
2^N
,例如1,2,4,8 ...... 这是有效的,因为补丁号之间的每个差异都是唯一的。例如,如果在B中你最终得到数字3,6,7,则意味着补丁(4,1),(8,2)和(8,1)之间存在联系。值0当然意味着同一个补丁中有两个像素彼此相邻,所以你只需忽略它们。