在C++中查找和存储超像素邻域的算法和数据结构

wl2*_*776 6 c++ boost-graph data-structures

我有一个图像,保存分割结果,就像这个.在此输入图像描述

我需要建立一个贴片附近的图表,用不同的颜色着色.因此,我想要一个结构,代表以下内容 在此输入图像描述

这里的数字表示单独的补丁,而线条表示补丁的邻域.目前我无法弄清楚从哪里开始,谷歌的关键词.

有人可以提出任何有用的建

图像存储在OpenCV的cv :: Mat类中,对于图形,我打算使用Boost.Graph库.

所以,请给我一些代码示例和算法或关键字的链接.

谢谢.

更新.在喝咖啡休息和一些讨论后,我想到了以下几点.

  1. 构建一个大的点阵图,其中每个节点对应于每个图像像素,链接连接8或4个邻居.
  2. 使用相应的像素值标记每个图形节点.
  3. 尝试以某种方式合并具有相同标签的节点.

我的另一个问题是我不熟悉BGL(但这本书已经开始了:)).

那么,您对此解决方案有何看法?

Update2 可能这个链接可以提供帮助.

但是,仍然没有找到解决方案.

due*_*l0r 5

你可以这样解决它:

  1. 定义区域(图中的数字)

    • 制作一个存储区域编号的二维数组
    • 从(0/0)开始并将其设置为1(区域编号)
    • 使用floodfill算法或其他东西将整个区域设置为1.
    • 在洪水填充期间,您可能会遇到具有不同颜色的坐标.将那些存储在队列中.如果您之前的填充完成,则从这些坐标开始填充并增加区域编号.

    .

  2. 在地区之间建立联系

    • 迭代你的2D数组.
    • 如果您有相邻的数字,请存储数字对(可能以排序的方式,您还必须检查该对是否已存在).如果你从左向右前进,你只需要检查下面的元素,右边和右边的一个对角线.

虽然我不得不承认我对这个话题一无所知..只是我的简单想法......