我开始从事一个线路跟随者项目,但它要求我使用图像处理技术。我有几个想法要考虑,但我想要一些意见,因为我想澄清一些疑问。这是我解决这个问题的方法:我首先读取图像,然后应用阈值来检测对象(线)。我先做颜色过滤,然后做边缘检测。在这之后,我开始做图像分类来检测所有的线,然后将这些线外推到只输出/检测平行线(就像车道检测算法)。有了这些平行线,我就可以计算出保持车辆居中的中心和转弯的角度。
我不知道路径中的角度,所以系统必须能够旋转任何角度,这就是为什么我要计算角度。我已经添加了一张带有转弯的线的图片,这是我将处理的转弯的类型。我已经设法实现了几乎所有的东西。我的主要问题是角度的改变,基本上是转弯。在我检测到平行线后,我如何让我的系统知道什么时候该转弯?这个问题可能有点令人困惑,但基本上只要角度接近于零,车辆就会向前移动。但当车辆接近一个转弯时,它可能会检测到两组平行线。也许我可以定义检测到的线的长度,它将定义车辆是否必须向前移动?
任何想法都将不胜感激。

发布于 2018-02-20 23:52:37
如果有两条线(每条路径的中心线):
y1 = m1 * x + b1
y2 = m2 * x + b2当你选择一个x使得y1和y2相等时,它们相交(当然,如果它们不是平行的,那么m1 != m2)
m1 * x + b1 = m2 * x + b2(做一堆代数)
x = (b2 - b1) / (m1 - m2)
(y should be the same for both line formulas)当你接近这一点时,交换线路。
注意:这不能处理完全垂直线的情况,因为它们有无限的斜率,没有y截距--有关这一点,请参阅parametric form of lines。每行有2个方程式:
x = f1(t1)
y = f2(t1)和
x = f3(t2)
y = f4(t2)设置f1(t1) == f3(t2)和f2(t1) == f4(t2)以查找非平行线的交点。然后在第一行公式中插入t1以查找(x, y)
发布于 2018-02-25 00:06:34
基本上,Lou Franco的answer解释了如何获得每条路径的两条中心线的交叉点,然后这个交叉点就是开始转弯的好地方。
我会添加一个关于如何计算路径中心线的建议。
根据我的经验,当使用从图像中提取的线的浮点表示时,这些线实际上从来都不是平行的,它们通常只是在图像之外的一点相交(可能很远)。
下面的C++函数bisector_of_lines的灵感来自于CGAL source code中的bisector_of_linesC2方法。
一条线被表示为a*x+b*y+c=0,下面的函数构造了两条线p和q的平分线。
line p is pa*x+pb*y+pc=0
line q is qa*x+qb*y+qc=0
平分线的a、b、c是函数的最后三个参数:a、b和c。
在一般情况下,平分线的方向是两条直线的归一化方向之和,并且通过p和q的交点。如果p和q是平行的,则将平分线定义为与p方向相同的直线,并且与p和q的距离相同(请参阅CGAL::Line_2 CGAL::bisector的官方CGAL文档)。
void
bisector_of_lines(const double &pa, const double &pb, const double &pc,
const double &qa, const double &qb, const double &qc,
double &a, double &b, double &c)
{
// We normalize the equations of the 2 lines, and we then add them.
double n1 = sqrt(pa*pa + pb*pb);
double n2 = sqrt(qa*qa + qb*qb);
a = n2 * pa + n1 * qa;
b = n2 * pb + n1 * qb;
c = n2 * pc + n1 * qc;
// Care must be taken for the case when this produces a degenerate line.
if (a == 0 && b == 0) {// maybe it is best to replace == with https://stackoverflow.com/questions/19837576/comparing-floating-point-number-to-zero
a = n2 * pa - n1 * qa;
b = n2 * pb - n1 * qb;
c = n2 * pc - n1 * qc;
}
}https://stackoverflow.com/questions/48888894
复制相似问题