群集与点之间的关联

时间:2012-09-17 20:49:23

标签: c++ algorithm computer-vision

我正在使用DBScan算法聚类一组点。我有一组点的ID,我有一组聚类,每个聚类都有一组点。 我想关联集群和点ID。

例如我有一组id {1,2,3,4},现在如果我有两个簇,两个簇有两个点,那么第一个簇的那两个点应该有id 1,2和第二个3,4。此外,如果我有4个簇并且每个簇有一个点,那么点的ID应该是1,2,3和4.此外,如果我有两个簇但是一个簇有3个点而另一个有一个点,那么第一个簇的点的点数应该是1,2,3,第二个簇的点数应该是4.

我尝试对其进行编码,但我已经停止计算实现该方案的公式。

std::vector<int>_IDs;
 // for each cluster
    for( int j = 0; j<clusters.size();j++ ) 
    {
         // for each point in that cluster
        for ( int i=0; i < clusters[j].m_Points.size(); i++)
        {
  // assign its ID from the _IDs array based and save it in Clusters Vector
            clusters[j].m_IDs.push_back(_IDs[j+ i*clusters[j].m_Points.size()]); 

        }
    }

1 个答案:

答案 0 :(得分:1)

我会写这样的东西:

std::vector<int>_IDs; // those come in from wherever
std::vector<int>::const_iterator id = _IDs.begin();

// for each cluster
for( int j = 0; j<clusters.size(); ++j ) 
{
     // for each point in that cluster
    for ( int i=0; i < clusters[j].m_Points.size(); i++)
    {
        // some external logic should take care that there are enough ids
        // for all points in clusters. sanity check it here. 
        assert(id != _IDs.end());

        // assign its ID from the _IDs array based and save it in Clusters Vector
        clusters[j].m_IDs.push_back(*id); 
        ++id;
    }
}