目录
1介绍 2
2相关工作 3
3算法概述 3
4车辆检测 4
4.1车辆检测光耦合 4
4.1.1 过滤 4
4.1.2不同指标 5
4.1.3检测结果 5
4.2光检测与表征 5
4.2.1得分函数准备 6
4.2.2像素分组 6
4.2.3光位置 6
4.2.4光的形状和面积 7
4.2.5外观信息和灯光类型 7
5车辆跟踪 8
5.1跟踪算法 8
5.1.1跟踪车辆查找和特殊情况处理 9
5.1.2新发现车辆 9
5.1.3实物不一致 10
5.2运动分析 10
5.2.1位置估计 10
5.2.2数据平滑与插值 10
5.2.3碰撞预测与警告 11
6.结果 11
6.1定量评价 13
6.2性能分析 13
7结论 14
夜间汽车尾灯检测是一项利用廉价硬件快速完成的任务。我们依靠这样的探测来建立一个基于视觉的系统,以一种基于规则的方式耦合它们,能够检测和跟踪车辆。这允许生成一个接口,实时通知司机与其他车辆的相对距离和速度,并在出现潜在危险情况时触发警告。我们使用安装在汽车挡风玻璃后面的摄像机拍摄序列来演示该系统。
关键词 车辆跟踪·实时·灯光检测
1介绍
新车与老爷车的主要区别之一是,嵌入式电子元件的使用越来越多,其作用是提高驾驶员的安全性。即使是像刹车这样的纯机械装置,现在也已经电子化了。虽然一些汽车现在配备了停车辅助的近距离传感器,但新的趋势是为它们配备远程雷达传感器或基于视频的传感器协助功能,以保护车辆的乘客,其他车辆和行人。本文介绍了一种低成本的视频辅助系统,该系统利用尾灯跟踪来确定夜间其他车辆的位置,分析它们的轨迹并避免碰撞。我们选择了晚上,因为这是一个有趣的情况,司机对距离的感知比白天差得多,这使得我们的系统可能非常有用。对可靠的实时性能的需求使其成为一个具有挑战性的问题,因为它对可能使用的算法施加了限制。
我们用一个安装在汽车挡风玻璃后面的小摄像机,指着前方,演示了我们的方法。本质上,同样的方法也可以用在一个向后指向的摄像头上,通过探测前灯而不是尾灯来监视汽车后面的情况。
我们的方法包括以下步骤:我们首先检测独立的候选尾灯使用标准的低水平图像处理。然后使用适当的标准对它们进行耦合。最后,我们跟踪结果对随着时间的推移,以推断车辆的存在和位置。这让我们生成一个雷达般的视图,包括与其他车辆的距离和它们的相对速度。如图1所示,这对司机很有帮助。通过对输入图像的进一步分析,该系统还可以检测到是否有闪烁器被激活。
图 1
图1 实时跟踪系统输出样本。在左边的履带上,车辆被标记出来,与摄像机的距离(以米为单位)与它们重叠。右边画着一个类似镜子的图像:最下面的矩形代表着汽车上的人和前面的车辆。对它们的测速显示了它们相对于摄像机的相对速度。
因此,本文的贡献是双重的:首先,我们提出了一种简单、有效和实时的技术,可以在城市和农村环境中跟踪多个车辆,同时真实地估计它们相对于摄像机的轨迹和速度。其次,我们为司机提供了一个有价值的界面,可以帮助他了解情况,增加他对交通状况的感知,并在可能发生需要更多注意力的事件时触发警告。
2相关工作
在交通中强有力的和准确的车辆跟踪的标准方法是采用复杂的仪器,如雷达或激光雷达。然而,与标准的摄像机相比,它的缺点是非常昂贵。因此,近年来,一些学者对基于视频的车辆检测与跟踪技术进行了研究。一些研究人员专注于分析交通和车辆的运动[3,4],或使用静态摄像机检测车辆[5]。另一些人则研究了利用视觉算法来检索什么样的信息,这些信息是通过安装在车辆上的摄像头捕捉到的。其中,[6]使用摄像机对可能与其他车辆相对应的光源进行检测,但没有及时跟踪,利用光源光谱分布进行判别。[7]的工作方法与我们的类似,即使用尾灯探测车辆,但不确定它们在空间中的位置,并且需要非常低分辨率的输入和混合硬件/软件实现才能实时运行。它也会在一个闪光灯被激活的情况下失败。类似地,[8]通过前灯检测迎面而来的车辆,但这项工作也只专注于确定车辆是否存在,而不是它位于何处。
另一方面,一些工作解决了实时跟踪问题,这也是我们试图解决的问题。在文献中已经提出了不同的技术,例如使用混合的声纳和视觉信息[9]或使用立体视觉[10]。出于跟踪的目的,[11]建议在被跟踪的车辆上安装一些人工地标,而[12]则使用车辆背部的模板来执行跟踪。在[13]中,提出了一种高速公路上车辆跟踪系统,使用边缘和模板,由于采用了特别的系统架构,因此能够实时运行。最后,[14]描述了一个自动驾驶汽车使用的系统,该系统用于在夜间跟踪和跟踪领先的车辆,它使用尾灯来计算一个近似的轨迹。该方法只能跟踪一辆车,并且需要手动初始化前车的位置。因此,我们的贡献是统一和改进后一种方法,以建立一个能够在夜间在高速公路和城市环境中跟踪多辆汽车的全自动系统。此外,我们的系统不需要任何特殊的硬件,但仍然实时运行,这使它能够迅速触发有用的警告驱动程序。
3算法概述
我们的框架由两个主要部分组成。第一部分,如第4节所述,涉及到分别分析输入帧并输出检测到的车辆列表,以及每个候选车辆的置信值。这个列表是通过首先找到最可能与尾灯相对应的图像块,然后从所有可能的对中选择满足特定条件的对来耦合它们得到的。第二部分将这些检测到的对作为输入,如第5节所述。然后通过连接连续帧的检测,生成一个时间一致的场景重建。这使得系统能够找到那些真正符合实际车辆的轨迹,并重建它们相对于摄像机的轨迹。最后利用这些信息生成类似雷达的场景视图并预测潜在的碰撞。
4车辆检测
4.1车辆检测光耦合
车辆检测算法分别对输入图像进行分析:在每一帧中,我们首先检测所有的n个光斑,然后生成1个个候选尾灯对,最后过滤掉那些先验不能作为车辆的。在这一节中,我们将首先描述如何过滤光对,以给出如何执行车辆检测的全局视图。然后,我们将详细解释如何检测输入图像中的光斑并对其进行特征描述。
4.1.1 过滤
首先,我们需要定义一些测量和阈值,以选择最有可能成为车辆两个主要尾灯的对灯。为此,我们首先引入一组必须满足的条件。任何对不符合其中至少一个的灯将立即从潜在车辆名单中删除。为了避免漏掉一些车辆,所有用于计算这些条件的参数的设置都尽量减少假阴性的数量,因此也包括一些将在后续跟踪阶段过滤掉的异常值。要应用的最重要的阈值是需要一对将它的两个灯放在同一水平线上。因此,我们首先定义第一个条件C1,即它们之间的夹角必须小于一个非常低的阈值,如下所示:
μy在哪两个补丁和μx光之间的垂直距离是他们水平某种天体我们将在第4.2.3节中解释如何计算这些量。其次,我们假设两个尾灯的形状应该相似,假设灯的变化最小。因此,我们选择一个合理的阈值ζ已计算验证后的训练序列。条件C2可以定义为
在形状计算将定义在 Sect. 4.2.4.由于光的面积理论上也不应该有太大的变化,我们定义了第三个条件,以消除对之间有很大的差异,两种光的面积
在第4.2.4节中,我们将展示如何计算候选尾灯的面积。The 数量area 定义 之间 的 差异 两 lights, 面积 平均最后,条件C4表示两个候选尾灯应该具有相似的外观:
这种类型的候选尾灯被定义为描述 Sect. 4.2.5,就是定量测量来计算两个光 之间的区别type 补丁将被介绍。
4.1.2不同指标
我们现在可以定义四个与前面不等式左项不同的度量Di,用它们的右项对它们进行归一化,从而得到值在0到1之间的变量,条件Ci满足:。
最后的差异度量D由所有Di的和组成:
一旦定义了之前的条件和不同度量,车辆检测算法就非常简单,只需生成每个可能的尾灯对,并存储满足所有必要条件Ci及其D值的尾灯对即可。
4.1.3检测结果
从图2可以看出,在大约150对输入帧中,只有4对满足Ci的所有条件并被保留,其中一半是真实的车辆。此外,所有被检测到的车辆都是连贯的,没有进一步的现场分析。
图2检测结果:顶排输入帧、中心排尾灯检测、底排车辆检测
4.2光检测与表征
现在,我们将更详细地解释如何获得候选光斑以及如何计算它们的特征,以澄清上一节介绍的相似性度量。我们的方法检测候选尾灯通过几个步骤。首先,在输入帧的每个像素处计算一个分数函数。该基本函数在输入像素上应用一个阈值,仅保留那些与汽车灯光相关的高概率值,并输出一个与此概率相关的值,该值可进一步用于加权像素对计算的贡献光的描述符。然后,我们根据它们所属的光将像素分组。最后,我们从这些像素集合中提取出一些特征,这些特征允许计算上一节中提出的条件Ci。
4.2.1得分函数准备
为了快速计算,我们决定选择一个颜色空间,其中简单的阈值足以区分候选光,HSV是我们经过一些实验后的最终选择。事实上,作为人类感知亮度的价值通道,它已经给出了一个很好的表现,在输入场景中,光线与其他元素有很大的不同。因此,我们简单地将score函数定义为该通道的值(如果大于某个阈值)。在我们的实验中这个阈值τ总是固定四分之一的最大可能值:
从图3中我们可以看到,尽管这个分数函数很简单,但是它在探测汽车灯光方面做得很好。大多数假阳性与真阳性确实有非常相似的属性,如果不进一步了解周围区域,它们似乎不能在每像素的基础上被移除。
图3结果-分数:顶行输入帧,中心行分数函数,底行光检测
4.2.2像素分组
通过使用阈值评分方法,除了节省处理时间外,我们还很可能得到不相连的像素组。然而,假设每个连接的像素集是一盏灯,这是一个合理的选择。图3很好地说明了这种方法的优点和缺点,如果我们比较车架中心最近的那辆车的尾灯和左边迎面而来的几辆车的前灯。实际上,当将这种方法应用于图3顶部一行所示的输入图像时,将正确地检测到附近车辆的尾灯。另一方面,我们将不得不五种不同的光源被检测为图像左侧的单一光源。我们的算法避免了这一点,首先使用重新分组连接的像素在一起,然后分割成两个或更多的灯,只有在必要时,在跟踪阶段。
我们使用的像素分组算法是连接组件标记算法[15]的一个有效版本。我们发现这种算法是过度放大和创建小噪声光之间的一种公平的折衷,因为实际光的边界中存在伪像。反射光线的物体(如路标)中出现的噪声,也有可能使用这种方法进行分组,这有助于防止在后期检测到其中的部分车辆。减少这些小像素组的数量也有助于节省处理时间,因为在车辆检测阶段生成和测试的灯对更少。
4.2.3光位置
我们通过它的位置和形状来描述光的特性,我们正式定义为
在哪里(μx,μy)表示质心和(σx,σy)表示像素的空间组的标准差。这些简单的位置和形状描述符足以计算我们将在下面的小节中定义的大多数派生特征。
4.2.4光的形状和面积
我们的近似候选人灯是矩形集中在(μx,μy)的水平和垂直维度分别4σx和4σy。因此我们有一个直接的方法来定义光的面积
同时,形状可以定义为矩形两边的比值:
4.2.5外观信息和灯光类型
为了区分大灯、尾灯和信号灯,我们分析了几个训练视频,考虑到V通道已经被用来阈值化的事实,为每种灯光类型构建了HS空间的概率分布。这种分布的任务是为每个输入像素分配一个属于每种光类型的可能性。图4显示了三个不同的似然函数ωT (h, s),其中T ={头灯|尾灯|信号
灯}代表光类型。
在这一点上,我们只需要扩展这个计算来测量给定的像素块是一种或另一种类型的可能性。
图4基于H和S通道的三种不同光类型的似然分布
将像素测量扩展到一个光块理论上,测量整个光块的可能性的最佳选择是将所有像素的概率相乘(或者,为了避免实现中的舍入问题,将它们的概率的对数相加)。然而,这将基于这些像素的独立性的假设,这在我们的实验中还没有被证明是足够健壮的。因此,我们选择使用一种不同的方法并对它们进行平均,这种方法更有力。在给定光类型T的情况下,光斑L的可能性被定义为
在||L||表示像素的数量在光补丁 L.
贝叶斯因子最后,我们需要找到一种方法来测量一盏灯是否有效的被检测到的类型。我们选择比较相对的概率而不是看它们的绝对值,我们将使用贝叶斯因子[16]来达到这个目的。贝叶斯因子让我们从几个概率模型中选择一个最有可能产生给定事件集的模型。贝叶斯因子K被定义为
其中T1和T2是我们要比较的两个假设,在我们的例子中代表了两种不同的光类型。
K的对数称为证据的权重,根据所选对数的基数,可以用不同的单位来度量。以10为基数的对数单位称为ban,我们将其定义为:
表1贝叶斯因子解释
与其他统计假设检验方法相比,贝叶斯因子的主要优点在于对输出值的解释。事实上,使用对数单位,如分贝板,给我们的结果是线性的一个直观的信心概念,和一个规模的解释K分贝板给出了表1由杰弗里斯[16]提出。
因此,我们可以计算出一种简单而有意义的方法来衡量一种光是否属于它最有可能的类型,方法是将它与所有其他类型进行比较,然后使用最低的证据权重。我们现在可以定义两 个光之间的数;量type补丁的差异程度的自信如果他们最有可能属于同一type,否则无穷大.
5车辆跟踪
5.1跟踪算法
下一步是充分了解现场,然后是确保一致性的时间。因此,我们开发了一种从一帧到另一帧跟踪被检测车辆的算法。为了使跟踪更加准确,我们定义了一个标准来评估被跟踪对象是否确实是真实车辆。
第4节中所述的检测到的车辆清单,首先与前一帧中保留的被跟踪车辆清单合并:找到匹配的车辆,即已被跟踪的车辆他们的信心值通过尾灯的D值和之前的信心值之间的加权平均值更新。然后,添加在跟踪车辆列表中不匹配的新检测车辆。为此,我们对车辆可能出现的合理位置做了一些基本假设,并相应地为它们分配一个启动奖金或malus(罗盘星座)。这一过程在5.1.2节中有详细说明。
最后,我们根据车辆的置信度对被跟踪车辆列表进行排序,并再次遍历该列表以检测它们之间的物理不一致性,如5.1.3节所述
当跟踪车辆的置信度在此算法的每次迭代中更新时,我们通过删除置信度低于某一阈值的车辆来完成。
5.1.1跟踪车辆查找和特殊情况处理
一旦在当前场景中检测到车辆,就将其描述符[μx,μy,σx,σy,面积,形状,类型]与存储在跟踪列表中的车辆进行比较,并选择最近的邻居进行匹配。如果没有足够接近的邻居,则在列表中生成一个新条目。
然而,有两种特殊情况需要检测和处理:来自不同车辆的合并灯光和与闪光灯合并的灯光。这两种情况的共同之处在于,它们都会导致光的面积突然增大,这在最近邻匹配阶段很容易被检测到。
在这种情况下,我们希望将一组连接的像素分割成两个或更多的光,为此,我们选择使用一种最初来自非极大值抑制的方法。在4.2.1节中灯都将通过提高分数阈值τ直到断开连接组的像素。如果后者之一的大小小于一种自适应阈值,定义在Eq。8,我们删除它的像素和其他继续提高τ,直到我们得到断开连接组。最后,如果我们没有找到一个令人满意的分区就删除了所有像素,那么我们就不能分割光线。停止标准是因此。
8
其中 ||L|| 为光斑的像素大小,N为组数。
如果通过分割算法找到两个或更多的光,则认为这些光是被分割的,并相应地更新它们与其他光斑的不同度量。否则,光线面积的增加很可能是由闪光灯引起的。由于光线不能被分割,我们需要找到另一种方法来分割主光源和它的闪光灯。
因此,根据被探测到的光的演化,得到了光和闪烁器的中心在t−1和t之间的中心。我们首先将主光的中心设为根据t−1的位置和速度计算的外推值,并将闪光灯的中心设为被探测光的中心。然后我们就可以计算出闪光灯的原始特征和类型。如果检测到的闪光灯类型是闪光灯或与闪光灯相比最多有大量证据的任何其他类型,我们假设检测到的灯确实包含闪光灯。
5.1.2新发现车辆
当检测到的车辆与跟踪列表中的任何车辆不匹配时,将生成一个新条目。为了提高对噪声的鲁棒性,新检测到的不在地平线上或在摄像机视角极限的车辆将受到处罚,以克服由于超车车辆牌照上的缺陷或由于其底部存在辅助前照灯对而导致的问题。此外,汽车的主尾灯是最遥远的,我们不可避免地会在第二个主灯出现在相机的视角之前就开始跟踪这些光源对,从而给他们一个不可忽视的优势。
与此同时,我们还基于这些可能在短时间间隔内出现和消失的假设,防止大多数误报干扰跟踪。在输出视频中显示车辆或在5.2.3节中描述的碰撞预测阶段考虑车辆之前,必须对车辆进行至少一段时间的跟踪。在下一节中描述的步骤中,持久性噪声也被过滤掉了。
5.1.3实物不一致
为了避免由于误报而导致的重建场景的物理不一致,我们定义了一个盒子,在这个盒子的尾灯对周围有一辆车的大致比例,并且考虑到其他车辆都不允许在这个区域有灯。然后,通过将每辆车与其他拥有更高置信度的车进行比较,并降低前一辆车的置信度(如果前一辆车的一个或多个尾灯在另一辆车的盒子里,或者另一辆车的一个或多个尾灯在其盒子里)来进行校正。
5.2运动分析
5.2.1位置估计
计算到已知大小的物体的距离Z的标准公式就是焦距f乘以真实物体的大小L和物体在像面上投影的大小L的比值。这假设道路可以被认为是平面的,这在大多数情况下是正确的。然后
9
其中Wreal为车辆的真实宽度,假设所有车辆的真实宽度为常数,Wsensor为成像传感器上车辆的宽度,由摄像机标定得到,车辆的宽度为像素Wpixels,利用光斑位置为
10
知道车辆所在平面的深度Z,可以推导出方程11。这定义了相机中心和车辆位置之间的横向移动X,假设其他车辆的移动方向与相机光轴大致平行:
其中Ssensor为被测车辆中心与图像中心之间成像传感器上的水平距离,可以通过摄像机标定来计算。
5.2.2数据平滑与插值
当仅使用Eqs. 9和Eqs. 11来计算车辆的位置时,得到的结果是正确的,但它们在时间上的演化有时是抖动的。因此,我们通过样条插值来平滑它们,如下所示:在每一帧,车辆被推入一个存储1秒数据的缓冲区(在我们的例子中是25帧),这是一个适当的时间间隔,有足够的数据来计算稳定的样条。当车辆一直在追踪不到三帧插值(即没有足够的数据),我们使用原始值(μxμy)和(σxσy)灯光的计算。在三帧之后,使用标准的2D样条拟合和插值对这些值进行校正,因为我们对垂直y轴上的相对距离不感兴趣。
最后,我们应用相同的方法来校正距离,本身计算插值的μ、σ。需要注意的是,平滑后的值既没有被存储,也没有考虑到后续的插值。为了使轨迹重建与真实数据保持一致,只存储原始数据。
5.2.3碰撞预测与警告
如前所述,我们已经通过样条插值获得了车辆的位置、速度和加速度。因此,我们有了所有我们需要的信息来进行轨迹预测,从而检测潜在的即将发生的碰撞。
这可以通过警告司机来帮助预防事故。如果在给定的安全延迟(如4秒)内,考虑到空间安全裕度,车辆外推的轨迹将相交,即摄像机所在车辆的轨迹,则触发警告
除了预测碰撞之外,我们还提供了指示活动闪光灯的警告。这是通过在每一帧设置一个信号灯标志来实现的,在每一帧中要么使用信号灯校正算法,要么检测到前灯的类型是信号灯。为了防止闪烁效果,我们使警告持续,只要车辆有一个闪烁标志设置在最后十帧中的任何一帧。
6.结果
我们在这里展示我们的车辆检测和跟踪系统的结果。图1中的屏幕截图显示了我们的系统在标准情况下的最终输出。注意,在输入图像中出现的所有车辆都被检测到,并对它们的位置和相对速度进行估计。图5显示了到达市中心时抓拍的视频。它证实,即使在中等人工照明的情况下,如果相机的曝光设置适当,系统也能正常工作。事实上,当相机的曝光设置为很低时,系统工作得更好,因此只有强烈的光线才能在传感器上看到。
我们还演示了雷达样视图的其他可视化特性。如图6所示,超过50米的车辆显示在为此预留的顶部频带中。他们的正面距离,四舍五入到10米,显示在他们的上方。与其他车辆一样,它们的横向距离由车辆在雷达状框架中的横向偏移来表示。图7显示了一辆汽车的右半遮罩处于激活状态,这个小三角形表示驾驶员通过激活该遮罩指示的方向。最后,在接下来的几秒钟内,由于碰撞危险而触发警告的车辆颜色更深,如图8所示。
图5结果:在市区,在红绿灯处停车
图6结果-远处车辆
图7结果-闪光灯激活
图8结果-安全预警
因为我们相信我们的算法在视频序列中可以更好的判断性能,所以我们提供了它们作为补充材料。由于本节中所有的图形都是由两部分组成的。左边的是原始视频,汽车的边界框和它们的距离(以米为单位)被覆盖。右边是雷达般的场景。底部的盒子和两条线代表了装有摄像机的汽车的前部和摄像机的视角。其他的矩形代表道路上的车辆,从它们的中心开始的线段是它们的速度矢量。
最后给出了该框架的几种失效模式:它本质上不能跟踪尾灯损坏的摩托车或车辆。它也不明确地处理遮挡,但我们认为这是可以接受的,因为对驾驶员的安全最关键的车辆是更近的,因此遮挡。当被遮挡的车辆再次出现时,它们将自动被重新检测和跟踪。显然,它也不能应付路上的颠簸和巨大的斜坡。最后,考虑到我们对车辆等宽的假设,大卡车或非常小的汽车的距离估计将受到一些误差。除了这些情况,我们相信我们的车辆检测和跟踪技术通常能够提供准确和现实的轨迹估计,因此是一个很好的起点,使夜间驾驶更安全。
6.1定量评价
为了更好地评价距离估计算法的精度,我们设计了一个简单的实验来获得一些定量结果。因为在动态的情况下做它将需要特殊和昂贵的设备(即,一个雷达)我们将注意力集中在静态情况上,这是一个很好的近似,因为所有的输入帧都是单独分析的。因此,我们在三个不同的距离(10米、20米和50米)给三辆不同的车拍了几张照片。对于每种情况,我们都进行了10次测量,其平均值如表2所示。可以注意到,当车辆在更远的平行车道上行驶时,其精度会有轻微的下降,但我们仍然认为这些数字代表了可接受的距离估计。
最后,为了证明算法对漏检和误报的鲁棒性,我们手动标记了几个测试视频序列,以区分比较容易的高速公路场景和比较有挑战性的城市中心场景。然后我们一帧一帧地评估我们的算法,计算正确检测、漏检和误报的次数。实验结果如表3所示。从表中可以很容易地看出,误报率非常低,而在高速公路场景中则完全不存在误报。此外,这些实验表明,即使是假阴性的比例低,如预期,在高速公路比在城市中心的场景更好,那里的混乱和交通有更大的影响。
表2静态情况下距离估计的平均误差
表3正确车辆检测、漏检和误报的数量评估
6.2性能分析
为了对系统的性能进行第一次评估,我们计算了它在奔腾D 1.8 GHz双核上每秒可以处理的平均帧数。为了计算计算时间,我们使用了一个不提供任何输出视频的程序版本。在我们处理的所有50个视频中,我们去掉了最好的(47帧/秒)和最差的(33帧/秒)结果。其余处理时间为39 ~ 46 fps,平均43 fps,即在分辨率为720×576的输入帧上平均处理时间为23 ms。
7结论
我们提出了一种夜间车辆检测与跟踪系统,对车辆的位置和相对速度进行估计,并对车辆的行驶轨迹进行预测。通过最大限度地减少假阴性,并使用时间一致性过滤假阳性,我们特别注意了系统的健壮性。
该框架还提供了有助于增强安全性的信息,可以在潜在危险的情况下警告驱动程序。最后以标准摄像机为输入,在普通硬件上实时运行。
未来的工作将包括通过提高输入数据的质量来提高系统的性能。通过选择一个最佳的摄像头和找到一个不合适的曝光,我们可以在减少处理时间的同时提高系统的准确性。我们也正在考虑一个硬件实现的算法,以进一步加快它。