【发布时间】:2020-05-07 19:19:36
【问题描述】:
我正在尝试合并包含由houghLinesP 提取的属于一起的行的向量。
到目前为止,我有一个包含线段的向量:
vector<Vec4i> lines;
我还有一个算法可以检查线段是否足够相似以被认为属于其他线段(目前仅基于距离和角度):
vector<vector<Vec4i>> lineClusters;
for(Vec4i line1: sortedLines){
Point l1o = Point(line1[0], line1[1]);
Point l1d = Point(line1[2], line1[3]);
vector<Vec4i> cluster;
for(Vec4i line2: sortedLines){
Point l2o = Point(line2[0], line2[1]);
Point l2d = Point(line2[2], line2[3]);
if ((getDistance(l1o, l1d, l2o, l2d) <= 20) and
(abs(angle(l1o, l1d) - angle(l2o, l2d)) <= 10)) {
cluster.push_back(line2);
}
}
lineClusters.push_back(cluster);
}
现在向量lineClusters 为每个线段包含一个属于该线段的线段向量。
我现在面临的问题是如何合并这些向量。基本上我想合并所有包含至少一个重复线段的向量,这样最后只剩下几个簇。
在此图像中找到了黑色线段。我想将它们合并成行。我绘制的圆圈代表可能被确定属于一起的线段,并由“lineClusters”内的向量表示。 (我没有把它们都画出来)
我真的不知道如何解决这个问题。有没有人想过如何解决这个问题?
编辑 为了使我的意图更加明显,我添加了以下图像: 。我正在尝试对线段进行分组以识别车道。
更新
通过调整判断线段是否属于一起的函数,显然可以改善结果。
【问题讨论】:
-
根据您对它们的排序方式,您可以在一个轴上进行一次传递,在每个向量中维护一个迭代器,在每个迭代器增量后进行比较。
-
@Braaedy 我根本没有对它们进行排序。你建议以什么方式排序?我还更新了这个问题,让我的意图更加明显。
-
一秒钟,我会写一个更复杂的回复作为答案。