我开始在一个线跟踪器项目上工作,但它要求我使用图像处理技术。我有一些想法要考虑,但我希望一些输入,因为有一些疑问,我想澄清。这是我解决这个问题的方法:我首先读取图像,然后应用阈值来检测对象(线)。我进行颜色过滤,然后进行边缘检测。在此之后,我开始进行图像分类,以检测所有的线,然后外推这些线,以仅输出/检测平行线(类似于车道检测算法)。通过这些平行线,我可以计算中心,以保持我的车辆居中,并计算转弯的Angular 。
我不知道路径中的Angular ,所以系统必须能够旋转任何Angular ,这就是为什么我将计算Angular 。我已经包括了一个带转弯的线的图片,这是我将处理的转弯类型。我已经设法实现了几乎所有的东西。我的主要问题是在Angular 的变化,基本上是转弯。在我检测到平行线后,我怎样才能让我的系统知道什么时候该转弯呢?2这个问题可能有点令人困惑,但基本上只要Angular 接近于零,车辆就会向前行驶。3但当车辆接近转弯时,它可能会检测到两组平行线。也许我可以定义检测到的线的长度,这将定义车辆是否必须前进?
如有任何意见,我们将不胜感激。
2条答案
按热度按时间h43kikqp1#
如果有两条线(每条路径的中心线):
当你选择一个x,使得y1和y2相等时,它们相交(如果它们不平行,那么m1!= m2)
(do一堆代数)
当你接近这一点时,换线。
注意:这不会处理完全垂直的直线,因为它们有无限大的斜率,没有y轴截距--关于这一点,请参见parametric form of lines。每行有两个方程:
和
设置
f1(t1) == f3(t2)
和f2(t1) == f4(t2)
以查找非平行线的交点。然后将t1
插入第一个线条公式以查找(x, y)
gmxoilav2#
基本上,answer由Lou Franco解释了你如何得到每条路径的两条中心线的交点,然后那个交点就是开始转弯的好点。
我想添加一个关于如何计算路径中心线的建议。
根据我的经验,当处理从图像中提取的线的浮点表示时,这些线实际上从来不平行,它们通常只是在图像之外的一个点相交(可能很远)。
下面的C++函数
bisector_of_lines
的灵感来自CGAL源代码中的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<Kernel> CGAL::bisector
的官方CGAL文档)。