基于Camera Link总线的CCD高速图像采集技术*

2011-01-25 07:53:36程祖桥季凯帆王传军
天文研究与技术 2011年4期
关键词:队列个数内存

程祖桥,邓 辉,王 锋,,梁 波,季凯帆,王传军,许 骏

(1.昆明理工大学云南省计算机技术应用重点实验室室,云南 昆明 650051;2.中国科学院云南天文台,云南 昆明 650011)

天文图像采集与处理是天文技术与方法研究中的一个重要组成部分。近年来,随着CCD(电荷耦合元件)技术的发展,具备高速度、高分辨率、高可靠性的新一代CCD探测器不断涌现,在极大推动天文技术发展的同时,也对CCD采集中的总线技术与软件技术提出了更高的要求。

总线是数据传输的载体,其可用性直接影响着整个图像采集的速度与可靠性。视频图像实时传输常用的总线主要有千兆以太网(GigaEthernet)、IEEE 1394(Firewire-火线)、Camera Link总线以及USB总线。4种总线定位特点明显,优势各异。根据新一代天文高速、全频段观测的要求,在现阶段对Camera link总线进行分析、对比,给出基于Camera link总线的高速CCD图像采集方法,具有明显的实用价值。

1 Camera Link总线

Camera Link总线是一个工业高速串口数据和连接标准,它是由Basler、Cognex、Coreco、DALSA、Data Translation、Datacube、Matrox、National Instruments、PULNiX America等13家数码相机供应商和图像采集公司在2000年10月联合推出的[1],旨在为数码相机和个人计算机间的高速、高精度数字传输提供一种标准。标准的基础是美国National Semiconductor公司的驱动平板显示器的Channel Link技术[2]。

根据应用要求的不同,Camera Link标准提供了基本架构(Base Configuration)、中阶架构(Medium Configuration)和完整架构(Full Configuration)3种讯号接脚规范[2]。目的在于解决数据传输速率问题。目前在Base Configuration和Full Configuration接脚规范中,最高传输速率可达2.38 Gb/s和7.14 Gb/s[1]。根据CCD采集的速度和分辨率的要求,可以选择不同的接脚规范,以满足不同的要求。

千兆以太网(GigaEthernet)、IEEE 1394(Firewire-火线)、Camera Link总线以及USB总线中是目前最为常见的技术,有不同的厂商分别在这4种技术上实现了高速CCD的信号采集与控制。表1列出了4种总线的对比。

表1 4种主流总线技术对比Table 1 The comparison of four mainstream bus technologies

表1可以看出,与另外3种总线技术相比,Camera link总线兼有高速、高分辨率、通用、可靠、标准、热插拔等优点,比起IEEE 1394总线,具有更强的通用性和灵活性。Camera Link总线具有占用CPU较少,传输速率高,I/O同步能力强的优点。Camera Link接口可以方便地利用直接存储器存储(Direct Memory Access-DMA)技术,大大提高了CPU使用效率,PCI-E总线接入确保了Camera Link的高性能处理效率。这几年采用千兆以太网的CCD产品也较多,千兆以太网技术在Optimized模式下占用CPU也较少,但是比起Camera Link来,较低的传输速率制约了其在CCD图像采集领域的广泛应用[3]。

但Camera Link也存在一些问题,主要表现在:存在支持设备少(每卡一个设备),使得购置成本相对偏高,传输距离较短。此外,Camera Link接口本身的机械尺寸较大(1.55英寸×0.51英寸),决定了采用该接口的CCD摄像机尺寸不能做的太小。

2 基于Camera Link的高速CCD图像采集技术实现

2.1 高速CCD图像采集工作流程

使用德国PCO公司(http://www.pco.de)的高性能CCD产品,CCD相机型号PCO.4000,内存1 GB,全分辨率4008×2672。相机图像采集工作流程如图1。在CCD相机中,CCD由独立制冷电路(具有测温和反馈控制功能)制冷,CCD采集到的图像模拟信号经模数转换器(ADC)(图1,A/D)转换成数字数据存入相机内存(camRAM),通过Camera Link接口转入计算机内存,再进行后续处理(如存入硬盘等)。在相机内存camRAM中,存在两种图像存储模式,即记录模式(recorder mode)和FIFO缓冲模式(FIFO buffer mode),由相机控制总单元控制。在FIFO缓冲模式下,图像数据从camRAM按顺序实时传给所连接的计算机内存。本文所采用的模式是记录模式(recorder mode)下的实时观测(live view)模式,记录子模式(recorder submode)为环形缓存(ring buffer)。相机最多可以配置2个ADC,双ADC配置能提供更高的A/D转换效率。通过直接存储器存取(DMA)技术,与相机相连的计算机从Camera Link采集卡高速获取图像数据。

2.2 PCO相机软件开发包

表2列出了PCO相机软件开发包[4](SDK)中的主要功能函数,其他品牌所提供的SDK也基本具备这些功能。

2.3 基于Camera Link的高速CCD图像采集总体设计

在高速CCD图像采集实现过程中,充分考虑到相机的高速采集特性以及Camera Link总线所带来的高速传输,采用DMA技术从相机内存获取图像数据,获得与相机所提供的采集速度相匹配的图像处理速度。为了避免在图像采集过程中,由于等待图像传输而导致无谓的CPU负载增大,整个设计采用了多线程技术,在进入图像采集状态时,创建一个独立的图像采集线程,用来检测各类状态信号和保存图像。图像采集整体流程如图2。

图1 CCD图像采集示意图Fig.1 Schematic diagram of CCD image acquisition

表2 主要函数功能表Table 2 The table of main functions

图2 图像采集流程图Fig.2 Flowchart of image acquisition

配置相机参数过程中,调用SDK中的PCO_SetPixelRate、PCO_SetBitAlignment、PCO_SetADCOperation、PCO_SetBining、PCO_SetRoi、PCO_SetDelayExposureTime函数,完成图像模拟信号从传感器的读出速率、原始图像数据的Bit顺序、模拟转换器ADC的个数、面元、ROI以及延迟/曝光时间参数配置。调用PCO_AllocateBuffer成功申请缓存空间后,系统创建图像采集线程,由图像采集线程完成从相机内存camRAM中读出图像数据,通过Camera Link传输到计算机内存,然后进行相应的后续处理。

2.4 图像采集

图像采集中,根据申请缓存的数量和缓存队列使用情况,可以选择单缓存采集或者多缓存采集设计。在图3所示申请DMA缓存空间过程中,单缓存需要向计算机申请一块缓存空间,双缓存则需要申请两块缓存空间,理论上也可以构建更多的缓存用来进行图像采集,但根据在实际系统设计中的实验数据,多缓存情况下与双缓存相比不会有更大的性能提高,因此本文着重讨论单缓存与双缓存模式下的图像采集技术。下面以把所采集到的图像数据存储到硬盘为例,说明单缓存处理和双缓存处理的实现细节。

图3 单缓存模式流程图Fig.3 Flowchart of the single-buffer mode

图4 双缓存模式流程图Fig.4 Flowchart of the dual-buffer mode

在单缓存数据存储线程中,调用PCO_AddBuffer把缓存空间加入到相机驱动队列,调用WINAPI的WaitForSingleObject[5],等待从Camera Link接收图像数据。系统捕获到来自相机控制单元产生的接收图像数据完毕消息,把内存中的数据写入到硬盘。写入完毕,把缓存加入到相机驱动队列,等待下一张图像数据接收。

双缓存数据存储线程的不同之处在于,两次调用PCO_AddBuffer把0号和1号缓存空间加入到相机驱动队列,0号缓存先接收数据。调用WINAPI的WaitForMultipleObjects,捕获到0号接收到一张完整图像数据的消息,1号缓存开始接收数据,同时把0号缓存中的数据写入硬盘,写入完毕,把0号缓存加入到相机驱动队列等待接收下一张图像数据。1号缓存接收到一张完整的图像数据,发送消息,0号缓存开始接收数据,同时把1号缓存的数据写入硬盘,写入完毕,把1号缓存加入到相机驱动队列等待接收下一张图像数据。如此循环往复直到采集结束。

在多缓存数据处理过程中,首先触发的一定是0号缓存接收数据完毕的消息。因为在增加缓存空间时,多个缓存空间以队列形式加入到相机驱动上。先增加的缓存先接收图像数据,只有当前面缓存完整接收一张图像数据后,驱动队列上排在后面的缓存才开始接受数据。

在单缓存实现机制中,只有前一张图像数据被处理完成后,才开始后一张图片数据的接收。很显然,图像数据处理过程中所消耗的时间越长,则图像接收的等待时间越长,整体图像采集处理速度就会越慢。

在双缓存实现机制中,图像接收和图像处理同时进行,回避了接收和处理的相互等待,使得数据的接收过程与处理过程可以重叠交叉,从而提高了数据采集的整体速度和性能。

3 影响图像采集速度的几个重要参数及实测

根据厂家资料描述,在实际应用过程中,模数转换器(ADC)的数量和图像模拟信号读出速率(PixelRate)这两个参数的不同设置对图像采集速度和质量有很大的影响。其中ADC个数是影响图像存储速率的重要因素。由于图像数据是模数转换器(ADC)把图像模拟信号转换而成的,故ADC个数越多,图像数据转换的时间就越短。调PCO_SetADCOperation可以对ADC的个数进行配置,ADC的数目只能是1个或者2个。当ADC数目为2时,必须对ROI值进行相应的调整,要求水平坐标上的像素必须对称,这虽然限制了ROI的设置,但好处是模数转换的时间会减少接近一半。

PixelRate是指图象模拟信号从相机传感器读出的速率,Pixelrate值越大,则获得图像帧的速率就越大,但会导致图像噪声增大,图像质量差。调用PCO_SetPixelrate函数可以对图像模拟信号读出速率进行设置,不同的CCD相机读出速率可选择的范围不同。

为进一步验证在高速图像采集中这些参数的具体影响,结合前面讨论过的不同的缓冲区数目会带来图像采集处理整体速度上的不同,针对单缓存数据采集存储和双缓存数据采集存储,在不同的ADC个数和PixelRate参数组合下进行速度测试。采集卡采用Matrox公司的CameraLink采集卡,使用了Camera Link标准中的基本架构(Base Configuration)讯号接脚规范。工作站采用Intel酷睿i7920 CPU,内存4 GB。采集分辨率为相机的全分辨率4008 pix×2672 pix。编程语言为Delphi 2010版本。实验中考虑了两组比对,分别是ADC数为1和2以及PixelRate都为32 MHz时的情况(为确保获得最高采集存储速度,PixelRate采用最大值),测试结果见表3。

表3 不同参数组合下单、双缓存采集存储速度对比Table 3 Comparison of acquisition speeds of single-and dual-buffer modes under various parameter sittings

表中的每组存储速度结果是通过4次相同测试所得的平均值,会存在一定的误差。实验证明,ADC个数对高速采集至关重要,ADC个数都为1,Pixelrate都为32 MHz时,单、双缓存采集存储速度基本上是相等的。但ADC个数为2时,采集速度显著上升,双缓存技术下可以达到290帧。此外,无论是单缓存,还是双缓存技术,最高速度分别可达每分钟270、290帧,这已经接近了厂商指标中在全分辨率情况下的最高采样速率5帧/秒,充分表明本文实现的单、双缓存技术是可行的。

从实验结果来看,在同等情况下,双缓存和单缓存采集的存储速率相差并不大。这是由于实验中只对图像进行高速写入阵列盘操作,没有对图像进行比较复杂的处理,详见分析2.4节单双缓存采集图像采集,故双缓存的速度只比单缓存高出10%左右。在系统开发时,如果在中间处理过程增加高低位转换以满足FITS格式存储要求等处理时,双缓存的速度可以保持在当前的采集速率,而单缓存采集速度就会明显下降,双缓存或者多缓存的优势会更加明显。

4 结论

本文对基于Camera Link总线的CCD高速采集技术进行了系统的调研,分析对比了Camera Link总线技术及其优缺点,在此基础上,对基于Camera link接口的高速CCD采集技术进行了深入的研究,着重讨论了基于单缓存与双缓存的高速采集技术和相应的技术实现。经实际测试,文中所实现的技术稳定、可靠,CPU负载低,采集速度基本达到了CCD相机厂商给出理论上的最高采集速率,取得了良好的实现效果。

[1]Camera Link Interface Standard Specification [M/OL].http://www.cekli.com/articles/pdf/camera-link-interface-standard-specification.

[2]Basler Vision Technologies.Camera Link Technology Brief[M/OL].http://www.baslerweb.com/beitraege/unterbeitrag_en_26198.html.

[3]National Instruments Corporation.Choosing the Right Camera Bus [EB/OL].http://zone.ni.com/devzone/cda/tut/p/id/5386.

[4]PCO AG.Pco.Camera Software Development Kit(SDK)for WindowsXP [CP/CD].http://www.cookecorp.com/software/pco4000/.

[5]John Ayres.The Tomes of DelphiTMWin32 Core API Windows 2000 Edition [M].United States of America:Wordware Publishing,Inc,2001.

猜你喜欢
队列个数内存
怎样数出小正方体的个数
队列里的小秘密
基于多队列切换的SDN拥塞控制*
软件(2020年3期)2020-04-20 00:58:44
等腰三角形个数探索
怎样数出小木块的个数
“春夏秋冬”的内存
当代陕西(2019年13期)2019-08-20 03:54:22
在队列里
怎样数出小正方体的个数
丰田加速驶入自动驾驶队列
基于内存的地理信息访问技术