, ,,
(中国酒泉卫星发射中心,甘肃 酒泉 732750)
高速图像数据采集是光学测量技术与方法研究中的一个重要组成部分。近年来,随着 CMOS、CCD等传感器技术的飞速发展,具备高帧频、高分辨率、高稳定性的新一代探测器不断涌现,在极大地推动了光学测量技术飞速发展的同时,也对高速图像采集技术提出了更高的要求。
高速图像数据的采集,一般以总线技术为载体,其可用性直接影响着整个图像采集系统的速度与可靠性。图像实时传输目前常用的总线主要有GigE Vision、IEEE 1394、 USB总线以及Camera Link总线。针对光学测量设备高速、实时采集存储的需求,对现阶段常用的总线技术进行对比分析发现,Camera Link总线兼有高速传输、抗干扰性强、低噪声、通用性强、可靠性高等优点。本文对基于Camera Link的高速图像采集技术开展研究,主要研究内容包括帧频驱动采集与实时检测采集融合的控制方法、改进型双缓存数据采集方法。
为满足高速图像的高精实时数据处理要求,基于Camera Link采集的高速图像应具备:
1)有效性,采集的每帧图像数据均完好无损坏;
2)有序性,图像采集顺序与相机实际拍摄顺序一致;
3)连续性,采集的图像数据流无丢帧。
因此,使用两种算法对采集过程进行控制,一是帧频驱动采集控制,二是实时检测采集控制。
帧频驱动采集控制,其原理是帧频信号与图像数据是一一对应的,帧频信号与附加信息数据是成整数倍对应的。因此,以帧频信号为基准时序,驱动图像数据和附加信息数据的采集,能够保证采集过程连续稳定。帧频驱动采集控制算法流程如图1所示。
图1 帧频驱动采集控制算法流程图
通过等待帧频信号,驱动后续工作过程,在帧频信号到来时同时进行图像数据和附加信息数据的采集,分别放入对应的缓存中。在外部触发结束采集信号后,停止帧频驱动,结束整个采集过程。
该算法采集的图像数据存在丢帧问题,具体表现为采集启动时图像丢帧数量多,后续丢帧数量稳定为1帧,原因是相机在上电初始化后存在一定的数据堆积,而以帧频驱动采集时每次仅采集1帧图像,造成其他数据的丢失,也就产生了采集启动时丢帧数量多的问题。后续采集状态受初始化和图像传输不稳定性的影响,无法保证在每一个帧频信号上升沿触发时都能获取图像,两个帧频信号上升沿之间有时没有图像,有时存在2幅图像却只采集到1幅图像,从而导致图像采集存在持续丢帧的问题。
实时检测采集控制,以图像数据来驱动采集过程,当检测缓存中有最新图像时即进行图像数据和附加信息数据的采集。该算法可以保证按顺序将图像全部获取,从而避免了图像采集过程中丢帧。实时检测采集控制算法过程如图2所示。
图2 实时检测采集控制算法流程图
当检测到缓存中有图像数据时,即驱动图像数据和附加信息数据的采集。因此,在缓存足够大不产生溢出的情况下,该算法能够保证采集到所有图像数据,实现不丢帧采集。
实时检测采集控制能够有效保证图像数据采集的不丢帧,但是仅以图像数据驱动采集,忽略了附加信息数据与图像数据之间的匹配性,导致时间信息不连续,且同步精度误差较大。
当相机采用外触发模式工作时,其拍摄时刻完全由时统终端外送频率决定,确保了相机时序准确,因此相机的原始图像数据不存在丢帧问题。造成两种算法单独使用存在缺陷的原因有两点:一是上电初始化时图像的传输稳定性最差,堆积了图像数据缓存,如果不对数据缓存进行初始清空,会造成后续图像与附加信息匹配的时间同步精度误差增大;二是两个帧频信号之间存在不均匀性,当两个图像数据帧集中在一个帧频信号内传输时,则会造成丢帧。时序特性分析如图3所示。
图3 图像数据采集时序图
融合采集控制算法能够同时解决两种算法单独使用存在的缺陷,其流程如图4所示。
图4 融合采集控制算法流程图
由帧频信号事件驱动图像采集,保证了采集时刻稳定,利于图像与附加信息匹配且时间同步精度较高;在每个帧频周期内使用实时检测采集的方式,将该周期内所有图像数据顺序采集,保证了图像采集不丢帧。此外,在图像采集的初始阶段,进行N个帧频周期的数据消抖,消除缓存的初始不稳定数据流使其不会扩散,根据实际使用情况,N取10便可达到良好效果。附加信息与高速图像采集后,分别放入各自的缓冲区,再建立独立的存储线程从缓冲区中读取数据并组合存储。采用3个独立线程保证了采集和存储工作的并行连续执行,而双缓冲的机制使得各线程之间的速率冗余匹配。该算法能够有效控制高帧频状态下的图像数据和附加信息数据同步采集,确保两个数据流稳定采集不丢帧,时间同步精度得到有效控制。
双缓存数据采集的优点是:可以使用较小容量的内存,不断的缓冲近乎无限量的数据(输入与输出端协同工作),在保持整个系统的可靠性、实时性、连续性等方面的优势更大。
双缓存数据采集流程如图5所示,同时开通0号和1号两个缓存空间加入到相机驱动队列。0号缓存首先接收数据,捕获到一帧完整图像数据后,1号缓存开始接收数据,同时用户程序可以根据自身需要把0号缓存中的数据取出做特定的处理(如写入内存DMA通道中),处理完毕后,再把0号缓存加入到相机驱动队列等待接收下一帧图像数据。1号缓存接收到一帧完整的图像数据,发送消息,0号缓存开始接收数据,同时把1号缓存的数据写入内存DMA通道中,写入完毕,把1号缓存加入到相机驱动队列等待接收下一帧图像数据。以覆盖旧数据的方式,将数据写入两个缓存区,整个采集过程可以如此不断的循环下去,直到采集结束。相比于单缓存采集模式,在双缓存实现机制中,图像接收和图像处理同时进行,回避了接收和处理的相互等待,使得数据的接收过程与处理过程可以重叠交叉,从而提高了数据采集的整体速度和性能。
图5 双缓存数据采集流程图
单缓存、双缓存和多缓存3种采集机制性能实测对比试验结果如表1所示。
表1 几种缓存机制性能实测对比试验结果
通过上述实测对比试验发现,双缓存采集机制的存储速度和性能明显优于单缓存采集机制,不仅采集速度提升明显,且不易发生缓存溢出,可靠性和稳定性都极大提高。而多缓存采集机制的效率和性能虽要优于双缓存采集机制,但效果不突出,并且缓存数量过多时还会给系统带来较大负担,反而影响系统整体性能。
基于以上分析研究,充分考虑到高速相机的采集特性以及Camera Link总线所带来的高速传输效率,在高速图像采集过程中,采用双缓存采集机制,利用DMA技术从相机获取图像数据,可获得与相机所提供的采集速度相匹配的图像处理速度。为了避免在图像采集过程中,由于等待图像传输而导致无谓的CPU负载增大,对双缓存读取使用策略进行了优化和重新设计,采用多线程技术,在进入图像采集状态时,创建一个独立的图像采集线程,用来检测各类状态信号和保存图像。图像采集整体流程如图6所示。
图6 高速图像采集流程图
对双缓存机制的优化主要体现在两个方面:
1)相机参数配置完毕后采用双缓存机制,其中0号缓存用于高速图像采集,1号缓存用于实时图像显示,保证了高速图像采集与实时图像显示的独立运行,避免系统大量的等待时间;
2)考虑到绝对时间的生成与数据的同步采集,都是软硬件配合完成的时序控制过程,实现了数据流从硬件接口到计算机内存的转移,而数据采集通过软件方式完成,为实现这一过程中时序控制,在高速图像采集线程中使用了双缓存机制。
串口数据采集线程与图像数据采集线程在帧频信号的驱动下按时序进行工作,保证了数据采集的同步与正确。缓存数据结构均使用先入先出队列实现,一级缓存有两个:一个存放完整附加信息帧,由3个串口获取的数据和绝对时间重新组合而成;另一个存放原始图像数据数据帧。软件在接收到存储指令后,从下一个帧频信号开始,首先清空一级缓存无用过时的数据,后续的过程中一旦两个一级缓存中均有超过L帧(缓存空间中的保留帧数)的数据,便各提取一帧打包为最终需要的文件格式,放入二级缓存中;文件写入线程在检测到二级缓存中的数据超过L帧时,则将其写入到硬件中保存为数据文件。缓存中预留的L帧数据进行弹性处理,方便进行弹性误差修正。
通过使用优化的双缓存机制,一方面降低了处理等待时间,降低了CPU负担;另一方面,“双缓存采集线程”中的第一级缓存给数据采集线程与数据打包线程间增加了弹性量,第二级缓存在数据打包线程与文件写入线程中增加了弹性量,解决了使用软件方法实现存在的采集-打包-存储三级线程执行的速率不匹配问题,同时通过缓存中预留的弹性处理空间,能够很好地解决相机图像数据帧转移时间带来的滞后误差修正问题。
上述方法参与了4个工作线程及3个缓存中以实现所需的功能,各部分之间的关系如图7所示。
图7 软件结构图
工作线程是软件的核心部分,在软件启动初始化完成后线程便开始不间断进行工作,确保所需处理任务的及时完成,使用线程函数进行实现。
3.1.1 DMA1图像采集线程
图像采集卡同时提供两路图像的采集,DMA1通道对应的是原始图像数据,该线程通过调用采集卡的SDK函数,连续不间断地获取DMA1通道中的最新的图像数据。
3.3.2 DMA2图像采集线程
与DMA1图像采集线程类似,该线程的作用是持续不断从DMA2通道获取图像数据,并将图像数据发送至扩展图像显示模块。
3.3.3 附加信息采集线程
该线程的作用是持续不断获取T、A、E数据,进行解析、计算,并重新拼合成所需要的图像附加信息包,在开始记录图像后放入附加信息缓存中。
3.3.4 数据打包线程
该线程的功能是,实现图像与附加信息的打包,形成一帧完整的测量数据,将其放入测量数据缓存中。
缓存是各线程与功能模块之间进行大批量数据交互的公共数据区域,同时提供大容量的数据缓存空间,作为线程工作速率的同步缓存域。在软件上,使用双端队列能够实现无队列长度约束的首尾元素插入删除。软件包含3个数据缓存,下面分别进行分析。
3.2.1 附加信息缓存
该缓存用于存储附加信息。缓存的附加信息格式符合标准规范,由附加信息采集线程将T、A、E获取并拼合而成,附加信息每次由采集线程插入缓存队尾,由打包存储线程从队首提取数据。
3.2.2 原始图像缓存
该缓存用于存储原始图像数据,由DMA1图像采集线程将原始图像数据插入缓存队尾,由打包存储线程从队首提取数据。
3.2.3 测量数据缓存
测量数据是图像与附加信息在绝对时间上进行缓存,解决数据打包和数据存储速率之间的不匹配性。
经测试,结果表明图像质量良好,附加信息正确,错图率为0,丢帧率为0,可靠性高,易于拓展,记录帧频满足400 Hz、200 Hz、100 Hz、50 Hz等不同需求,解决了原始图像序列与帧频时序不匹配问题,实现了高速图像不丢帧采集,见表2。
表2 400 Hz帧频测试结果
本文研究了基于Camera Link的高速图像采集技术,提出了帧频驱动采集与实时检测采集融合的控制方法以及改进型双缓存数据采集方法,解决了高速图像存储中出现的丢帧率高、可靠性低等问题,并将该技术应用在了光学高速图像采集存储系统,取得了较好的应用效果。实践证明该技术通用性强,具备较大推广价值。
参考文献:
[1] 陈志江, 刘 晖, 肖 泽. 基于帧频信号的图像存储时序控制方法[J]. 计算机测量与控制, 2016,24(8): 304-306.
[2] 李 勇, 刘文怡. 一种高速图像数据采集存储系统设计[J]. 计算机测量与控制, 2013,21(2): 288-295.
[3] 沈崟洵, 郑力新. 基于Camera Link的图像采集系统[J]. 微型机与应用, 2011,30(19): 60-62.
[4] 张 冬. 大话存储[M]. 北京: 清华大学出版社, 2015.
[5] 刘 伟. 基于Camera Link接口的车载便携式图像实时采集与显示系统的设计[D].西安:长安大学, 2013.
[6] 戴 鹏, 王卫东, 任盛伟. 高速车载数字图像采集关键技术研究[J]. 计算机测量与控制, 2014,22(1): 267-269.
[7] 安海磊. 高速数据采集存储系统设计[D].西安:西安电子科技大学,2012.
[8] 张彦梅,柴芳娇. 基于FPGA的高速图像采集系统[J].北京理工大学学报,2010,30(9):1117-1120.