2. 中国科学院云南天文台, 云南 昆明 650011
2. Yunnan Observatories, Chinese Academy of Sciences, Kunming 650011, China
通常情况下,在一个多目标监控的图像采集系统中,尽可能使用同一相机厂商生产的相同类型的相机,例如:安防监控中多相机图像拼接,生产过程控制与监测,基于三维图像的目标识别或运动检测,地基广角相机阵等[1-3]。但在有些特殊的场合,需要观测或监测不同类型的目标,需要根据目标的具体情况配置不同的相机类型。并且,不同相机的图像采集时刻也有不同的要求,有的要求同步采集,有的要求相隔规定的时间,具体取决于各自系统的应用要求。例如,云南天文台前几年研制的第1台多功能天文经纬仪,它配备了3个CCD相机,其中一个Camera Link接口的数字相机采集恒星像和人造星像,另外用两台同轴电缆接口的模拟相机做水平差和轴准直差的测定,各相机采集的时间顺序和时刻有严格的要求[4-5]。其它工业监控或测量系统也有类似的情况[2]。
近年来,随着现代电子技术的飞速发展,各类高速接口的相机不断涌现,如GigE[6], CXP①, USB3[7], IIDC2②等,给图像采集系统带来更大的发展空间。这既给新系统的构建提供了更多的选择,也给开发人员带来了更多的技术挑战。
① http://jiia.org/wp-content/themes/jiia/pdf/standard_dl/coaxpress/CXP-001-2015.pdf
② http://jiia.org/wp-content/themes/jiia/pdf/standard_dl/ngcp/CP-001-2015_TS2015001.pdf
本文介绍由一台USB3接口的CCD相机和一台GigE接口的CCD相机组成的图像采集系统,在统一的外部触发信号作用下进行图像采集的过程、控制方法、系统硬件结构和软件开发方案。对不同厂商生产的USB3接口相机和GigE接口相机进行开发,关键是要解决两相机平台不一致和相互不兼容的问题,以及外触发模式下同步进行图像采集的问题。
1 图像采集系统的总体设计 1.1 图像采集系统的硬件结构本文介绍的图像采集系统是云南天文台一个正在实施项目的前期预研究系统。该系统硬件由一台工作站(PC)和两台CCD相机组成。两台相机中,一台是Point Gray公司GS3系列的USB3接口CCD相机③,另一台是Adimec公司OPAL系列的GigE接口CCD相机④。这两台相机需要按望远镜控制系统的要求同步采集图像,曝光开始的时间差应小于等于5 ms。所以,两台相机都必须带有外同步触发功能,并通过一个望远镜控制系统输出的同步信号进行图像的采集控制。
③ https://www.flir.cn/products/grasshopper3-usb3/
④ https://www.adimec.com/cameras/machine-vision-cameras/opal-series/opal-series-5-5-micron/
系统硬件结构如图 1。来自望远镜控制系统的图像采集控制信号经光电隔离电路一分为二,输出外触发信号1和外触发信号2,它们分别连接到USB3相机和GigE相机的外触发输入口。图像采集工作站的一个USB3接口通过USB线连接到USB3相机,千兆以太网接口通过网线连接到GigE相机。
|
| 图 1 系统硬件结构 Fig. 1 System hardware structure |
系统的工作流程是系统各部分上电后,图像采集工作站分别通过USB3接口和GigE接口,给两台相机发送成像控制指令,设置相机的工作模式和成像参数(如触发模式、曝光时间、增益、采集帧数和帧率等)。当相机处于非外部触发模式时,工作站发送采集指令,控制相机进行成像和图像传输,以及进行图像的显示和存储;当相机处于外部硬件信号边沿触发模式时,来自望远镜控制系统的图像采集控制信号分别触发USB3相机和GigE相机,相机生成各自的图像后自动将图像数据通过UBS线或网线传输至工作站,工作站显示图像并按要求存盘。
1.2 系统软件二次开发的方案这一双相机高速图像采集系统的图像采集软件是在Windows10操作系统下使用Visual Studio 2015作为软件开发平台开发的。USB3相机使用Point Gray公司的FlyCapture2类库,GigE相机使用Adimec公司的Bobcat开发包。在进行二次开发时,发现适用于GigE相机的Bobcat开发包并不能兼容USB3相机的FlyCapture2类库。具体表现为两台相机的库中封装编译好的lib及DLL文件不兼容,且Bobcat开发包为基于32位的解决方案平台,而USB3相机的FlyCapture2类库则是基于64位的解决方案平台,更改任何一台相机平台都会造成库文件不能使用。同时,Bobcat开发包中采用的GenICam标准⑤不支持USB3相机的FlyCapture2类库。为解决这一问题,将USB3相机界面的启动模块程序添加至GigE相机,然后分别使用各自的开发包独立设计界面及后台程序。
⑤ https://www.emva.org/wp-content/uploads/GenICam_Standard_v2_1_1.pdf
系统工作时,两台相机有同步采集的要求。所以,系统的一个重要工作模式就是外部硬件触发模式。在此模式下,图像的采集是由外部触发信号控制,每到来一个外部触发信号,两台相机即采集一帧图像。对于具有时间测量要求或者实时性要求较高的多相机同步控制的场合,一般采用这种外部触发模式。
另外,考虑到系统调试的需要,本文增设了一种工作模式:非外部硬件触发模式,或称为软件触发模式。在此模式下,两台相机进行图像采集是各自独立进行的,两者的成像和图像采集过程没有交集。非外部触发模式包含单帧、多帧图像采集,该模式下两相机为独立运行模式,分别进行控制采集,不具有同步功能。
2 系统软件的设计每台相机的生产销售商都提供一个简单的图像采集程序,但这一演示性质的程序不能满足用户的特殊要求。所以,通常情况下用户必须获得厂商提供的用于相机图像采集软件二次开发的库文件,并在一定的开发环境下自主研发系统软件。
2.1 系统程序设计流程根据前述系统工作流程和软件二次开发的总体方案确定了系统成像控制与图像采集系统软件的基本框架,系统的程序设计流程如图 2。系统上电并稳定运行后,点击工作站桌面程序图标,同时打开GigE相机软件界面和USB3相机软件界面,进入相机参数设置模式,按成像控制的具体要求,人工配置相机参数(如触发模式、曝光时间、增益、采集帧数和帧率等)。在配置完成后,相机处于等待控制指令状态,此时如果设置相机为外部硬件触发状态,则两相机在收到触发信号即开始图像采集,每到来一次触发信号采集一帧图像。如果为非外部触发模式,则相机可选为单帧触发或者连续触发模式,此时两相机处于非同步采集状态,可分别进行独立的采集设置,单独开始,单独结束。
|
| 图 2 程序设计流程图 Fig. 2 Programming flow chart |
本文设计的USB3相机图像采集软件界面分为菜单栏和客户区。菜单栏有设置菜单,用来设置内存中可保存的图像数量。客户区分为采集区域、参数设置区域和触发采集区域。分别依次为单帧、连续采集控制,采集曝光、增益参数控制,软件、硬件触发,加载静态图像、存储设置和格式转换等按钮。
在采集之前需要先进行准备,或称为预备阶段,包括:扫描总线、获取相机全局标识符(Globe Unique Identfier)、初始化连接相机和参数设置。预备阶段完成后,USB3相机图像采集主要使用FlyCapture2软件开发包中两个相机函数StartCapture()和RetrieveBuffer(),一个控制相机开始捕获,另一个控制从相机获取图像。而USB3相机软件的采集和存储功能通过开始函数Start()、采集线程GrabThread()和存储函数SaveImage()实现。
本系统有两种触发方式,USB3相机采集程序通过首先获取需要设定的触发模式,然后将相机设定到相应模式即可实现触发模式的设置,采用FlyCapture2库中TriggerMode结构体及PTTriggerMode枚举类型中的参数进行设置。
另外,所用的相机是一般工业相机,其开发包支持常见的图像文件格式,但不支持FITS格式。由于本项目面向天文应用,需要保存FITS图像,所以需要进行图像文件格式的转换。为此,设计了格式转换对话框,实现将BMP图像保存为FITS文件格式。由于实验使用的USB3相机是彩色相机,需要先将图像转换为16位灰度图,然后再采用相关文献中介绍的方法[8-9]转换为16位FITS文件。
2.3 GigE相机软件设计本文设计的GigE相机图像采集软件界面也分为菜单栏和客户区。菜单栏有File, Tools, Convert, Help 4个选项。File菜单中exit子项为关闭界面功能。Tools菜单中有Buffer Options(默认为8个), Save Image, Save Current Image 3个选项卡,依次分别为设置Buffer大小、保存图像和保存当前图像子功能。客户区分为Connection组框、USB Connection组框、Acquition Control组框、Parameters and Controls组框和Display组框,分别为相机连接区域、USB3相机界面打开、采集控制、参数设置和显示图像功能。
GigE相机在进行采集之前也有一个预备阶段:首先获取接口号、MAC地址、子网掩码和IP地址,然后连接相机,最后向相机寄存器写入参数值来设置相机。GigE相机图像采集的过程是:首先打开一个数据流(或称管道),对数据流对象的缓冲区变量Buffer进行设定;接着开启数据流,此时数据不断刷新到缓冲区,然后通过RetrieveNextBuffer()函数从缓冲区变量Buffer中获取图像数据;最后通过ProcessBuffer(lBuffer)函数将图像数据传递给后续的存储或显示等函数。存储时从Buffer中获取原始数据并使用Store函数将图像保存下来。在进行图像保存时与USB3相机软件同样需要进行格式转换。
GigE相机图像采集系统的软件、硬件触发功能实现方法是:首先使用PvGenParameter类对触发控件的组合框中各参数进行映射,然后使用PvGenCommand类的Execute()函数将设置执行即可实现触发。
关于GigE图像采集软件内存控制,直接定义PVImage类对象以存储Buffer中的数据时提示权限问题,不能自定义PVImage类对象的大小,所以最终选择重新定义结构体SnapImageInfo以定义图像数据格式,然后定义该结构体的数组对象,将Buffer中的数据及参数获取并赋给在内存中定义的结构体SnapImageInfo的对象,从而组成图像保存在内存中。
3 系统测试结果与分析在完成高速图像采集系统硬件的搭建和软件的设计之后,需要对整个系统进行相应的测试。整个测试在一台运行Windows10, 64位操作系统,CPU2.30 GHz的4核笔记本电脑上进行,测试实验分为两部分:软件测试和同步测试。
3.1 软件测试软件测试方案为将相机设定到硬件触发模式,设定图像存储格式为BMP图像,并最终将生成的BMP图像转换为FITS图像格式。内存控制功能为将图像数据使用自定义结构体或类对象以数组形式存储于内存中,测试中通过输出其中图像并存储以验证。分别对GigE相机采集软件和USB3相机采集软件进行测试,记录了经相机采集并转换的FITS文件的头文件的格式、采集参数等信息。
如图 3为软件工作在硬件触发状态的运行图(左侧为GigE相机操作界面,右侧为USB相机操作界面),两相机软件均可正常完成单帧、多帧图像采集,软件、硬件触发,内存控制,存储、格式转换等功能。
|
| 图 3 图像采集系统软件运行图 Fig. 3 Software operation interface of the image acquisition system |
本项目研制要求图像采集系统的CCD图像采集频率每两秒三张图,每张图片大小55 Mb,也就是82.5 Mb/s的数据传输速度。图像采集系统使用的USB3相机像素为1 928 × 1 448,存储的图像深度为24位。图像帧率决定着图像的流畅性,帧率越高,图像越流畅,因此相机输出帧率应保证在12帧/秒以上。将触发信号帧率设置为21帧/秒,此时USB3相机的数据传输量为167.58 Mb/s。GigE相机像素为1 024 × 1 024,图像深度为32位,同时在触发信号21 Hz时数据传输速度为84 Mb/s。可见,均达到项目要求的数据传输速率。
图像采集系统软件的同步测试方案与步骤如下:
(1) 两种测试情况:一是图像采集工作站上电运行后未开启其它应用程序,只运行图像采集程序,称为少任务情况;另一种情况是采集工作站上电运行后,除了开启运行图像采集程序,还开启了多个其它应用程序(如Office、网易云、迅雷等),不过在图像采集时,没有使用其它的程序执行具体任务,称为多任务情况。
(2) 分别在GigE相机采集软件和USB3相机采集软件中外部硬件触发模式下相机采集完成一帧图像到缓冲区时将采集完成的时刻记录到txt文档中,每到来一个触发信号就采集一帧图像,同时记录一次时间信息;外触发信号设置成连续3 000个脉冲,即每个相机连续进行3 000次图像采集。
(3) 使用MATLAB软件将GigE相机采集软件和USB3相机采集软件采集的txt文档中的时间数据读入并做差,生成数据分布图,并由差值计算均值及方差。
3.2.2 同步测试结果及分析对软件运行两个时间信息文档进行保存和分析,信息包括:USB3相机采集时刻记录表和GigE相机采集时刻记录表。原始的时间格式为时分秒毫秒,一共9位。先将记录时刻转换成毫秒(ms),然后将USB3相机与GigE相机数据相减,得到每次完成图像采集的时间差。在少任务和多任务两种情况下,两个相机完成图像采集的时间差如图 4(a), (b)。这种测试进行了十几次,实验数据差异很小。图 4(a), (b)只是其中一次测试结果。图中,横坐标是图像采集次序(或者说帧数),纵坐标是每次完成图像采集的时间差。
|
| 图 4 图像采集系统同步测试结果。(a)少任务情况;(b)多任务情况 Fig. 4 Synchronized test results of the image acquisition system. (a) In the case of fewer tasks; (b) In the case of Multi-task |
对于图 4(a),上方有3个点处于20 ms左右及两个点处于4 ms左右的情况,是由于图像采集程序运行于Windows操作系统下,而Windows系统是抢先式分时多任务操作系统,时间片约10~15 ms。操作系统在采集软件的运行过程中给予其他应用或设备分配一定的处理时间,因此造成部分采集记录时刻的误差。另外,两图中出现的以毫秒为单位的整数级差,是由系统测试时采集时间的精度为毫秒所致。
对两种情况的统计结果:少任务情况下,时间差均值为15.290 7 ms,方差为0.748 0 ms;多任务情况下,时间差均值为15.474 5 ms,方差为3.132 8 ms。
实际上,通过外部同步信号触发的多相机图像采集系统,各相机的曝光时刻在毫秒量级都是同步的。如果不考虑Windows操作系统的影响,理论上两个相机的图像采集完成的时间差固定。两个相机都按设置帧率(21帧/秒)计算,这个固定的时间差应该是0.362 6 ms。也就是说,在毫秒量级,完成图像采集也是同步的。实验中出现的同步性差异,是指各相机将图像传输到计算机并由计算机采集完成的时间差。这个时间差的统计结果验证了Windows系统其它程序对两个相机组成的图像采集系统带来一定的时间差。这说明基于Windows操作系统构建的双相机图像采集系统,要获得10 ms以内的同步性能,采用软件触发不可能达到小于5 ms的同步曝光要求,必须采用具有外部信号边沿触发功能的相机构成多相机图像采集系统,并且系统运行时,应该尽可能减少其它任务或程序的运行。
文[2]介绍的双相机同步控制的织物质量检测系统在软件触发下两相机图像捕捉时间差为100~600 ms,而硬件触发下两相机图像捕捉时间差为500~600 ms。与其相比,说明本文介绍的系统及设计方法的可行性和优越性。
4 结束语本文介绍了由UBS3接口相机和GigE接口相机构成的同步高速图像采集系统的结构,探索了UBS3相机和GigE相机在互不兼容的开发包下的协同开发方法,编写并实现了便捷控制。两相机的控制软件实现了相机单帧、多帧图像采集,显示图像,软件、硬件触发,采集参数设置,图像存储,格式转换等功能。对图像采集系统进行了软件测试和同步测试,系统及软件运行稳定,同步测试结果说明系统达到了设计要求。另外,文中也讨论了Windows操作系统对图像采集任务的影响。
| [1] | 王荣本, 李琳辉, 金立生, 等. 基于双目视觉的智能车辆避障物探测技术研究[J]. 中国图象图形学报, 2007, 12(12): 2158–2163 |
| [2] | 金少搏, 赵凤霞, 李纪峰, 等. 基于多相机同步控制的织物质量检测技术研究[J]. 机械研究与应用, 2016, 29(4): 190–192, 195 |
| [3] | 张升华, 黄垒, 魏建彦, 等. 交流伺服系统在天文望远镜中的应用研究初探[J]. 天文研究与技术, 2017, 14(3): 337–346 |
| [4] | LI B H, ZHANG Y G, YANG L, et al. Imaging acquisition system with three CCD cameras[C]//Proceedings of the SPIE. 2012. |
| [5] | 张益恭, 李彬华, 杨磊, 等. 多功能天文经纬仪图像采集系统[J]. 天文研究与技术——国家天文台台刊, 2014, 11(1): 72–79 |
| [6] | FEITH W. Pro and con of using GenIcam based standard interfaces (GEV, U3V, CXP and CLHS) in a camera or image processing design[C]//Proceedings of the SPIE. 2015. |
| [7] | 李达伦, 李彬华, 晏佳. 基于USB3.0的EMCCD相机高速数据传输系统的研究[J]. 天文研究与技术——国家天文台台刊, 2014, 11(3): 255–263 |
| [8] | 汪燕芳, 赵可新, 卢晓猛. 用VC实现FITS和BMP格式的转换[J]. 微计算机信息, 2006, 22(4): 121, 232–233 |
| [9] | 季凯帆, 曹文达, 宋谦. FITS、BMP和SCR图象格式及相互转换[J]. 云南天文台台刊, 1996(2): 60–64 |



