本实用新型涉及3D传感测量技术领域,具体涉及一种双目立体视觉系统。
背景技术:
双目立体视觉是计算机视觉的一个重要分支,即由不同位置的两台或者一台摄像机(CCD/CMOS)经过移动或旋转拍摄同一幅场景,通过计算空间点在两幅图像中的视差,获得该点的三维坐标值。测量方式目前主要分为主动3D测量和被动3D测量。
目前主动3D测量主要原理为通过光学系统打出有结构编码的光,通过成像通过解码获取三维结构,另外一种TOF主要通过测量发送的光束与返回光束之间的相位差进行距离测量。主动式的3D测量主要应用场景为室内的体感交互或是室内机器人。在室外因为阳光导致环境光中含有大量红外光,导致无法产生有效的测量。因此被动式的双目立体系统是比较合适的选择,并且也可以扩展到室内使用。
关于双目立体视觉的研究已经很多年了,学术界提出了很多种算法,也取得了不错的结果,但目前存在的最大的问题是:还没有很好的平台能承载算法的实时性运算需求,通常能取得比较好效果的算法运算量更加大。
目前的双目立体视觉系统的常见方案分为两种:其一为双目+高性能PC方式;其二为双目+高性能GPU方式。采用上述方案的主要原因在于被动式双目立体视觉涉及到的算法复杂度很高,因此需要很强劲的运算单元。选用以上的运算系统有以下几个缺点:成本高,难以小型化,运算单元的动态负载使得实时性有限,很难保证一致的实时性。
技术实现要素:
针对现有技术中的缺陷,本实用新型提供的双目立体视觉系统,选用了FPGA平台实现,集成度高、处理速度快,满足了实时性的要求,将双目立体视觉技术带到可商用的级别。
本实用新型提供的一种双目立体视觉系统,包括:左图像采集单元、右图像采集单元、同步信号生成单元、FPGA处理器、数据输出接口;所述左图像采集单元、所述右图像采集单元与所述同步信号生成单元连接,所述所述左图像采集单元、所述右图像采集单元与所述FPGA处理器连接,所述数据输出接口分别与所述FPGA处理器的输入端连接,所述FPGA处理器的输出端与所述数据输出接口连接;所述左图采集单元包括第一镜头和第一图像传感器;所述右图采集单元包括第二镜头和第二图像传感器;所述同步信号生成单元用于产生同步触发信号,并将所述同步触发信号发送给左图像采集单元和右图像采集单元;所述FPGA处理器用于获取所述左图像采集单元和所述右图像采集单元输出的像素点,进行畸变与立体矫正处理、立体匹配,输出真实物理深度。
本实用新型提供的双目立体视觉系统,使用FPGA作为实际运算处理单元,集成了图像传输、矫正、输出接口,使得双目立体视觉系统可以做到高度集成,使得小型化成为可能,使用定制的电路进行运算,一方面通过并行加速和流水线方式保证了系统的最小延时,获得较高的实时性,另一方面因为运算资源的独占性,使得实时性得到保障。
优选地,还包括补光单元,所述补光单元用于发射补光。
优选地,所述补光单元的光源为红外光源或可见光光源。
优选地,还包括光亮度传感器,所述光亮度传感器与所述补光单元连接,所述光亮度传感器用于检测周围的光亮度,根据检测结果控制补光单元进行补光。
优选地,还包括纹理增强单元,所述纹理增强单元用于发射结构光。
优选地,所述纹理增强单元的光源为红外光源或可见光光源。
优选地,所述第一镜头和所述第一图像传感器之间、所述第二镜头和所述第二图像传感器之间装有IR滤镜。
附图说明
图1为本实施例所提供的双目立体视觉系统的结构框图;
图2为本实施例所提供的双目立体视觉系统中的同步信号生成单元;
图3为本实施例所提供的双目立体视觉系统中的数据采集模块;
图4为本实施例所提供的双目立体视觉系统中的畸变与立体矫正处理模块;
图5为实时坐标映射计算模块的FPGA电路设计;
图6为本实施例所提供的双目立体视觉系统中的立体匹配模块;
图7为本实施例所提供的双目立体视觉系统中的深度计算模块;
图8为本实施例所提供的双目立体视觉系统中的输出结构模块。
具体实施方式
下面将结合附图对本实用新型技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本实用新型的技术方案,因此只是作为示例,而不能以此来限制本实用新型的保护范围。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本实用新型所属领域技术人员所理解的通常意义。
如图1所示,本实施例提供的一种双目立体视觉系统,包括:左图像采集单元1、右图像采集单元2、同步信号生成单元3、FPGA处理器4、数据输出接口5;左图像采集单元1、右图像采集单元2与同步信号生成单元3连接,左图像采集单元1、右图像采集单元2与FPGA处理器4连接,数据输出接口5分别与FPGA处理器4的输入端连接,FPGA处理器4的输出端与数据输出接口5连接;左图采集单元包括第一镜头和第一图像传感器;右图采集单元包括第二镜头和第二图像传感器;其中,第一图像传感器和第二图像传感器可以选用CMOS或CCD;同步信号生成单元3用于产生同步触发信号,并将同步触发信号发送给左图像采集单元1和右图像采集单元2;FPGA处理器4用于获取左图像采集单元1和右图像采集单元2输出的像素点,进行畸变与立体矫正处理、立体匹配,输出真实物理深度。
其中,同步信号生成单元3通过时钟晶振结合FPGA内部的PLL实现时钟倍频,并采用FPGA内部的计数器生成高精度的脉冲触发信号提供给左图像采集单元1和右图像采集单元2,其具体实现方式如图2所示,通过一个计数器实现同步触发信号的生成,使用一个高频基数时钟作为输入,到使能信号有效时,开始计数,达到计数上限时产生同步触发信号。左图像采集单元1和右图像采集单元2采集图像的帧率相同,比如时钟频率为F(单位:Mhz),要想达到帧率为m(单位:帧每秒)时,需要的计数上限T为T=F/m。
FPGA处理器4中主要包括以下几个部分处理单元包括:数据采集模块、畸变与立体矫正模块、立体匹配模块、深度计算模块和输出接口模块。
数据采集模块用于获取左图像采集单元1和右图像采集单元2输出的像素点,分别顺序输入第一双端口RAM和第二双端口RAM。在FPGA中的具体实现如图3所示,第一CMOS和第二CMOS各自拥有自己的像素时钟,以不同的时钟分别向各自的FIFO中输入数据,然后在同一个时钟下逐个像素依次输出至第一双端口RAM和第二双端口RAM,以达到同步CMOS1和CMOS2采集输出的像素点。本实施例采用的数据采集方法与传统的软件端采集frame buffer机制不同,本实施例采用基于FIFO和双端口RAM缓存技术实现流水线处理,不做过多的图像缓存(传统的方式需保存一帧或多帧图像后再进行后续处理),及时将接收到的像素点输出进行下一步处理。
由于双目成像系统在成像过程中会有畸变,且左图像采集单元1和右图像采集单元2很难做到光轴平行,输出的左、右图像很难实现平面对齐,因此在立体匹配之前需要进行畸变与立体矫正处理,以保证图像无畸变且满足极线约束。本实施例的畸变与立体矫正模块同时对第一双端口RAM和第二双端口RAM中的像素点进行畸变与立体矫正处理,并将结果分别输入第三双端口RAM和第四双端口RAM,供后续模块处理,提高了处理效率。畸变与立体矫正模块设计如图4所示,图像缓存写逻辑模块不断将前端接收的像素点写入双端口RAM,当图像坐标递增模块接收到开始信号,开始触发实时坐标映射计算模块工作,逐个计算出校正图像的第一校正坐标(或第二校正坐标)对应在左图(或右图)中的第一原图坐标(或第二原图坐标),同时将第一原图坐标输入坐标地址映射模块和像素值读取模块,进而从双端口RAM中读取与第一原图坐标相邻的像素点的像素值,然后双线性插值模块根据获取到的多个像素值和第一原图坐标(或第二原图坐标)的小数点分量插值得到第一校正坐标(或第二校正坐标)的像素值,依此类推,计算校正图像的下一个坐标对应的像素值。图像递增单元的速度受限于前端的双端口RAM的写入速度,原因在于校正图像从映射后的原始图像获取像素值时需保证图像缓存中存在映射的像素点。图5为整个实时坐标映射计算模块的FPGA电路设计,使用基本的加减乘除基本单元进行计算,大大提高了运算速率。在最终双线性插值计算环节,根据FPGA资源和计算特性,将浮点计算转换为定点计算,使用了6位定点,将浮点运算转换为整数运算和移位运算,节省了FPGA资源,提供了运算速率,具体计算方式为:
a=64*α
b=64*β
a=64-a
b=64-b
d=abA+(64-a)bB+a(64-b)C+(64-a)(64-b)D
d=d>>12
tmp1=(A-B)*a+(B<<6)
tmp2=(C-D)*a+(D<<6)
d=(tmp1-tmp2)*b+(tmp2<<6)
d=d>>12
立体匹配模块用于读取第三双端口RAM和第四双端口RAM中的像素点进行立体匹配,得到左图与右图匹配对应的像素点的视差。立体匹配模块的整体设计框架如图6所示,通常立体匹配算法需要很大的存储空间,本实施对立体匹配算法进行了针对于FPGA的设计,大大减少了对存储的要求,结合图6其处理流程为:分别从第三双端口RAM和第四双端口RAM中提取左图和右图的像素点,分别进行sobel梯度计算,得到左图和右图中的像素点的梯度信息。计算左图的像素点的梯度信息与右图中聚合窗内所有像素点的梯度信息的SAD值,选取SAD值最小的像素点作为第一匹配代价结果,根据左图的像素点和右图的第一匹配代价结果之间的坐标距离得到左图视差,同时用相同的方法得到右图视差。然后,选择左图视差和右图视差中的一个作为视差输出,并对输出做中值滤波。其中,聚合窗的尺寸和形状可根据实际需求进行选择。本实施例在立体匹配过程中的特征点选取上使用的是图像局部的相对大小关系而不是绝对大小,因此对于环境的适用性更强。
深度计算模块用于根据视差得到像素点对应的真实物理深度。主要使用标定参数中的焦距f以及基线b,计算公式为z=f*b/D,其中D为步骤S4得到的视差,z为当前处理的像素点对应的物理真实深度。如图7所示,使用FPGA中的DSP资源进行浮点运算,计算为流水处理,因此对资源的消耗仅为一个乘法器与一个除法器。
输出接口模块用于选择输出的数据,同时根据数据输出接口5对应的协议配置不同的接口。如图8所示,输出接口模块可以根据需要选择各种原始图像、中间处理图像和最终结果输出,还可以FPGA的硬件可编程特性定制不同的输出接口,以适应不同的数据输出接口5,如LVDS、USB等。
本实用新型提供的双目立体视觉系统,使用FPGA作为实际运算处理单元,集成了图像传输、矫正、输出接口,使得双目立体视觉系统可以做到高度集成,使得小型化成为可能,使用定制的电路进行运算,一方面通过并行加速和流水线方式保证了系统的最小延时,获得较高的实时性,另一方面因为运算资源的独占性,使得实时性得到保障。
本实用新型提供的双目立体视觉系统还包括补光单元6,补光单元6用于发射补光。补光单元6可以在外部光照不够的情况下发光,以获得比较好的成像质量。补光单元6的光源可以为近红外波段也可以为可见光波段。
为了使系统能适应低光或黑暗的环境,本实用新型提供的双目立体视觉系统还包括光亮度传感器,光亮度传感器与补光单元6连接,光亮度传感器用于检测周围的光亮度,根据检测结果控制补光单元6进行补光。
考虑到环境中的弱纹理区域,本实施例提供的双目立体视觉系统还包括纹理增强单元7,纹理增强单元7集成了结构光投射模组,在弱纹理区域可打开结构光投射模组,发出结构光,如条纹或是随机斑点等,增强了环境光纹理,提高了测量的准确度。纹理增强单元7的光源可以为红外光源或可见光光源。
为了提高系统的环境适应性,第一镜头和第一图像传感器之间、第二镜头和第二图像传感器之间装有IR滤镜,IR滤镜的作用为滤除红外光。其中,第一镜头和第二镜头均为相机专用镜头,镜头上不加近红外滤出膜,使得近红外能透过;在不使用红外补光单元6和红外纹理增强单元7时可将IR滤镜开关打开,在需要使用近红外波段进行补光或是补充纹理时关闭红外滤镜开关。
最后应说明的是:以上各实施例仅用以说明本实用新型的技术方案,而非对其限制;尽管参照前述各实施例对本实用新型进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本实用新型各实施例技术方案的范围,其均应涵盖在本实用新型的权利要求和说明书的范围当中。