技术领域
[0001] 本发明属于机器视觉领域,尤其涉及一种可用于FPGA实现的点坐标均匀化方法、系统及介质。
相关背景技术
[0002] 随着机器视觉技术的发展,其在图像识别和目标检测方面取得了显著成果,进一步提升了机器视觉的准确性和实时性。现代工业制造中,机器视觉技术被广泛应用于产品质量检测、自动化生产线上的物体定位和识别,提高了生产效率和产品质量,降低了人工成本。
[0003] 线激光3D相机作为机器视觉系统中的重要组成部分,基于三角测量原理,通过激光发射器发出激光线,投射到物体表面形成反射。反射光被镜头捕获,最后通过镜头反射到感光芯片上。感光芯片接收到反射光的信息后,经过内部算法处理,依次经过中心提取和三维重建,生成物体的三维轮廓数据。这种技术与机器视觉系统中的图像处理和分析技术紧密相连,机器视觉系统利用这些数据进行进一步的图像处理和分析,以实现物体的识别、测量和检测等功能。
[0004] 三维重建后的每条激光轮廓三维轮廓坐标均包含X坐标(横向)和Z坐标(纵向高度),数据量大,增加了传输带宽压力,同时由于经过三维重建算法处理,将会形成离散且非均匀的点云数据,影响最终模型的细节表现和质量。
[0005] 因此本发明为了解决上述问题,提供了一种可用于FPGA实现的点坐标均匀化方法、系统及介质。
具体实施方式
[0022] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0023] 如图1所示,本实施例首先提供一种可用于FPGA实现的点坐标均匀化方法,该均匀化方法包括以下步骤:步骤一:获取待均匀化的坐标点数据,设定沿横坐标方向均匀分布的采样点集合,以使采样点集合对应横坐标区域能够覆盖坐标点数据。
[0024] 以经过标定的线激光3D相机为例,设图像宽度为m,则均匀化之前,包含m个坐标点,其三维重建后的图像轮廓只包含横坐标与纵坐标,即重建后的轮廓三维坐标为:(X[0],Z[0]),(X[1],Z[1]),(X[2],Z[2]),......,(X[m‑2],Z[m‑2]),(X[m‑1],Z[m‑1]);沿横坐标方向均匀分布的采样点集合则需要结合坐标点进行纵坐标插值,通过采样点集合对应横坐标区域覆盖坐标点数据,便可以有效结合所有坐标点数据对附近的采样点纵坐标进行插值,采样点集合中相邻采样点的X坐标间隔为v,均匀后点数为n。
[0025] 采样点集合对应横坐标区域覆盖坐标点数据具体可以包括以下二种情况:情况一:采样点集合对应横坐标区域左边界小于所有坐标点最小横坐标,右边界
大于所有坐标点最大横坐标,通过该方式能够结合所有坐标点进行采样点纵坐标插值,避免遗漏有效坐标点,其中,有效坐标点为能够准确反映物体表面特征的点。
[0026] 情况二:根据有效坐标点的分布情况,以确认采样点集合对应横坐标区域左边界和右边界,使得采样点集合对应横坐标区域左边界小于有效坐标点最小横坐标,右边界大于有效坐标点最大横坐标。对于重建之后的X坐标和Z坐标,可能有很多无效坐标点,这些无效坐标点是指那些无法准确反映物体表面特征的点,它们可能因为各种原因在点云中出现,如噪声、畸变、遮挡或系统误差等,因此通过放弃无效坐标点附近的采样点插值,能够有效利用有限的计算资源,提高运算效率,其中,无效坐标点可以通过实际场景或经验进行判断。
[0027] 下面结合具体场景对采样点集合的设置进行说明:线激光3D相机实际使用过程中,三维重建后的坐标点X坐标基本相对0对称,因此,采样点集合中的采样点数量可以设置为偶数,且采样点集合对应横坐标区域左边界与右边界相对零对称,左边界与采样点集合中第一个采样点横坐标位置相对应,其中:
左边界为:
右边界为:
对于情况二,由于重建之后的X坐标和Z坐标可能有很多无效值,因此为了区分均
匀化之后的有效值和无效值,可以在设定均匀分布的采样点集合后,对各采样点的纵坐标进行初始化,以使各采样点纵坐标具有一个初始标识值z_void。
[0028] 设均匀化后数组为ZU[n],初始化ZU[n]中每一个值为z_void,z_void为极大或极小的标识值。
[0029] 步骤二:采集任意两个相邻坐标点数据,计算得到两个相邻坐标点之间的采样点数量及位置。
[0030] 对于FPGA来说,可以并行进行数据处理,因此可以同时对任意两个相邻坐标点数据进行采集,数据包括两个相邻坐标点的X坐标和Z坐标,由于采样点集合沿横坐标方向均匀分布,因此便可以通过两个相邻坐标点的X坐标来计算得到两个相邻坐标点之间的采样点数量及位置。
[0031] 如图2所示,其中黑点为实际坐标点,竖线为X采样点,在两个实际坐标点之间可能存在多个采样点,即需要根据两个实际坐标点插值出采样点的Z坐标。
[0032] 作为该步骤的具体实施方式,可以通过获取两个相邻坐标点横坐标方向上左侧的采样点数量差值,以作为两个相邻坐标点之间的采样点数量,具体如下:设数组Need[m]为每个坐标点与前一个坐标点之间需要插值的采样点数所构成的
集合,数组A[m]为当前坐标点之前已经插值的采样点数所构成的集合;
则可通过如下方式计算数组Need[m]中每个值Need[i]:
[0033] 即:
[0034] 令一个常数数组为C[m],其每个值C[i] 的计算方法如下:
[0035] 数组C中小于0的数表示当前这个坐标点处在X_border_left坐标左边,不需要做处理;数组C中的数大于n,表示当前这个坐标点处在X_border_right右边,也不需要处理;则可得到如下递推关系:
Need[i] = C[i] ‑ A[i]
可得:
C[i] = A[i] + Need[i]
初始:
A[0] = 0
Need[0] = C[0]‑A[0]=C[0]
第一次:
A[1] = A[0]+Need[0]=C[0]
Need[1] = C[1] ‑ A[1] = C[1] ‑ C[0]
第二次:
A[2]=A[1]+Need[1]=C[0]+C[1]‑C[0]=C[1]
Need[2]=C[2]‑A[2]=C[2]‑C[1]
第三次:
A[3]=A[2]+Need[2]=C[1]+C[2]‑C[1]=C[2]
Need[3]=C[3]‑A[3]=C[3]‑C[2]
第k次:
A[k] = C[k‑1]
Need[k] = C[k]‑C[k‑1]
由于常数数组C在给定重建坐标点输入后即可计算得出,因此针对每一个有效坐
标点可单独计算,实现快速并行化的X坐标均匀化。
[0036] 作为该步骤的具体实施方式,可以通过获取当前坐标点前一个坐标点横坐标方向上左侧的采样点数量,以左边界为起始坐标位置,结合采样点间隔计算得到两个相邻坐标点之间的各采样点位置,具体如下:对于一个重建后有效的坐标点(X[i],Z[i]),其与前一个点(X[i‑1], Z[i‑1])之间需要插值的点数为Need[i]=C[i]‑C[i‑1],如果Need[i]为0,则跳过不做处理,否则进行下述计算:
如图3所示,两个相邻坐标点之间第1个采样点的X坐标为
,
第j个插值点的X坐标为:
步骤三:计算两个相邻坐标点连线的直线斜率,以作为两个相邻坐标点之间各采
样点的斜率值。
[0037] 通过两个相邻坐标点的X坐标和Z坐标便可以计算出两个相邻坐标点连线的直线斜率,进行线性插值计算各采样点的Z坐标,斜率值K计算公式如下:K=(Z[i]‑Z[i‑1])/(X[i]‑X[i‑1])
步骤四:统计两个相邻坐标点之间各采样点位置,并根据对应斜率值分别计算两
个相邻坐标点之间各采样点的纵坐标插值,以作为所有采样点的输出结果,实现坐标均匀化。
[0038] 对于所有坐标点的X坐标和Z坐标通过采样点纵坐标插值的方式,最终只需要输出n个Z坐标,能够有效减少传输带宽。同时能够用于FPGA并行计算,计算速度快。通过改变相邻采样点的X坐标间隔,可以有效提升X方向上的分辨率。
[0039] 作为该步骤的具体实施方式,可以通过获取两个相邻坐标点之间的各采样点位置与前一个坐标点之间的横坐标距离,结合前一个坐标点的纵坐标以及各采样点的斜率值计算得到两个相邻坐标点之间各采样点的纵坐标插值,纵坐标插值的具体计算公式如下:ZU[C[i‑1]+j‑1]=K(XU[j]‑X[i‑1])+Z[i‑1]
从图2可以看出,当两个实际坐标点之间的采样点数量分布较多时,即意味着缺失点数较多,便可以将这些采样点统计为无效点,即:
如果计算得到两个相邻坐标点之间的采样点数量大于预设阈值,则不再计算两个
相邻坐标点之间各采样点的纵坐标插值,最终将会以初始标识值z_void输出。
[0040] 为了便于理解上述过程,下面将结合具体的数据进行解释:假设v=10,n=20,m=7,则
X_border_left = ‑100,X_border_right=100
各坐标点坐标为:
(X[0],Z[0])=(‑125,15),(X[1],Z[1])=(‑104,15),(X[2],Z[2])=(‑25,15),(X[3],Z[3])=(‑17,17),(X[4],Z[4])=(3,7),(X[5],Z[5])=(16,11),(X[6],Z[6])=(102,9);
根据各坐标点坐标,计算常数数组C:
(‑2,0,8,9,11,12,21)
初始化ZU数组均设为‑10000;
因为可以并行计算每一个点,此时选择索引为4的坐标点进行样例计算:
其坐标为(X[4],Z[4])=(3,7),上一点坐标为(X[3],Z[3])=(‑17,17),C[4] = 11,C[3]=9,则两点之间需要插值的点数为C[4]‑C[3]=2,则斜率值K计算公式如下:
K=(7‑17)/(3+17)=‑0.5
则索引为4的坐标点与索引为3的坐标点之间第一个采样点纵坐标插值计算公式
为:
ZU[C[3]]=ZU[9]=K(X_border_left+C[3]v‑X[3]) + Z[3]=13.5
第二个采样点纵坐标插值计算公式为:
ZU[C[3]+1]=ZU[10]=8.5
其他点可采用同样的方法计算。
[0041] 如图4所示,本发明第二方面还提供一种可用于FPGA实现的点坐标均匀化系统,包括:采样点分布模块,用于获取待均匀化的坐标点数据,设定沿横坐标方向均匀分布
的采样点集合,以使采样点集合对应横坐标区域能够覆盖坐标点数据,详细计算方式可以参考步骤一。
[0042] 相邻坐标分析模块,用于采集任意两个相邻坐标点数据,计算得到两个相邻坐标点之间的采样点数量及位置,详细计算方式可以参考步骤二。
[0043] 斜率统计模块,用于计算两个相邻坐标点连线的直线斜率,以作为两个相邻坐标点之间各采样点的斜率值,详细计算方式可以参考步骤三。
[0044] 坐标统计模块,用于统计两个相邻坐标点之间各采样点位置,并根据对应斜率值分别计算两个相邻坐标点之间各采样点的纵坐标插值,以作为所有采样点的输出结果,实现坐标均匀化,详细计算方式可以参考步骤四。
[0045] 本发明第三方面还提供一种计算机可读存储介质,包括计算机程序,所述计算机程序被处理器执行时实现上述均匀化方法。
[0046] 在实际应用中,计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质可以是但不限于电、磁、光、电磁、红外线或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD‑ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合。在本实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0047] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0048] 计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0049] 可以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行,或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0050] 在本说明书的描述中,参考术语“一个实施例”“示例”“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0051] 以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。