一种基于多摄像头的大场景远程实时监控系统
2022-01-05王连明
甄 好,王连明
(1.东北师范大学物理学院,吉林 长春 130024;2.海南热带海洋学院海洋科学与技术学院,海南 三亚 572022)
0 引言
远程全景监控可用于智能驾驶、遥感图像观测、工业园区监控等领域[1-2].在军事信息系统中也有着广泛的应用,战场环境信息是影响指挥决策的关键部分,及时获得有效、全面的战场环境信息可使指挥官知晓自身情况、敌方情况,从而及时、有效地做出相应决策[3].现有的视频采集系统通常采用焦距、视场角不变的单一摄像头进行图像采集,由于摄像头焦距的限制,很难采集到大场景图像.大范围的视频监控多采用多个摄像头,但在终端通常只分别显示各个摄像头采集到的图像,没有形成完整的大场景图像,不利于使用者观察.专业的鱼眼摄像头及360°全景摄像头成本较高,采集到的图像易发生畸变,且观测的距离有限,很难推广使用[4].目前远程监控多采用网络摄像头,网络摄像头同样存在焦距固定、视场角受限、无法采集大场景图像的问题,此外,网络摄像头的传输速率通常只能达到100 MB,无法实现高速传输.
为解决以上问题,设计了一种基于多摄像头的大场景远程实时监控系统,系统采用多个普通的模拟摄像头进行视频采集,节约了成本,而且便于操作.经千兆以太网高速传输到上位机后,通过OpenCV编写图像拼接程序并使用GPU对拼接程序进行加速,可快速获得全景图像.
1 系统总体架构
本文系统主要由视频采集传输单元以及远程图像拼接与显示单元构成.系统总体架构如图1所示.视频采集传输单元主要负责对视频进行采集、处理、传输,该单元由视频采集模块和网络传输模块组成.视频采集模块使用摄像头进行采集,单个模块最多可连接4个摄像头.采集完毕后,将视频数据送入视频解码器以及FPGA进行处理.处理完毕后,将数据送入网络传输模块进行传输,网络传输模块包括FPGA和千兆网卡芯片,可完成对数据包的打包及发送.为实现n个摄像头图像的采集,可通过交换机连接多个视频采集传输单元,从而获取更大场景的图像.
图1 系统总体架构
远程图像拼接与显示单元由视频接收与显示模块和图像拼接与显示模块构成,可完成对视频的接收、显示以及图像的高速拼接.视频接收与显示模块利用上位机网卡以及接收程序完成视频数据的接收并经过处理显示单个摄像头采集到的视频.为满足对大场景图像的需求,图像拼接与显示模块在上位机借助图像拼接技术,完成了对大场景图像的获取,并借助GPU等工具加快了图像拼接的速度.
2 视频采集传输单元
2.1 视频采集模块
为获取远距离的图像,采用焦距较大的模拟摄像头进行采集.为便于后续处理,需将模拟摄像头采集到的模拟视频信号转换为数字信号.本文设计采用BNC口作为模拟摄像头的接口,借助TW2867视频解码芯片获得数字视频信号[5].FPGA具有高性能、低成本、灵活、稳定等特点,可以调用多种外设实现对视频数据的传输与处理,完成对数据的高速处理及操作.故采用FPGA作为主控芯片,完成所需功能.本单元视频采集模块框图如图2所示.
图2 视频采集模块
为实现多路监控、节省管脚,需在主控器FPGA中通过I2C接口配置TW2867内部寄存器,使其配合108 MHz将四路时分复用数据复合至一路输出.单个通道的视频数据符合BT.656标准.四路数据视频时分复用后格式如图3所示.
图3 时分复用后数据格式
分离后的BT.656标准的图像数据存在无效数据,进行裁剪后可得到4∶2∶2的YCbCr数字视频流.需将YCbCr视频流数据通过计算转换为RGB格式的数据,才能在显示终端进行显示.计算公式为
R=1.164(a(Y)-16)+1.596(b(Cr)-128),G=1.164(a(Y)-16)-0.813(b(Cr)-128)-0.392(c(Cb)-128),B=1.164(a(Y)-16)+2.017(c(Cb)-128).
(1)
在FPGA中,为加快数据处理速度,采用三级流水线:通过移位相加计算每一个乘法、将乘法的结果相减、完成移位操作并进行溢出检查.这种处理方式减少了寄存器的使用,较好地处理了速度与延时的关系,降低了关键路径的时延,完成由浮点型数计算出整型数的功能,得到RGB格式的数据.
得到的RGB格式数据为隔行数据,需将其转换为逐行数据以便在监控端显示.为了减少计算量、不损失分辨率,采用场间插值法,利用奇偶场合并成一帧图像.该方法通过改变DDR2读写地址的映射实现转逐行操作.为了实现对DDR2的控制,将控制DDR2的程序进行了两层封装[6-7]:第一层封装主要是借助状态机实现指定长度的页突发读写操作;第二层封装可实现乒乓操作[8],并根据读、写FIFO中的数据个数决定是执行突发读操作还是突发写操作.
2.2 网络传输模块
相较于串口和USB等数据传输方式,网卡可快速传输大量数据,准确性较高、传输距离远,更适用于远程传输[9-10].我们选用千兆网卡RTL8211EG芯片将数据通过网线以及交换机传输到远程图像拼接与显示单元,RTL8211EG到MAC(FPGA)之间的传输接口采用GMII接口.其向FPGA输出125 MHz的参考时钟,可与远程图像拼接与显示单元自协商匹配成千兆网传输模式进行传输.通过交换机进行扩展,可完成无限多个摄像头数据的传输.本文设计以8个摄像头为例,使用NETGEAR的8口千兆GS308交换机完成硬件连接及数据传输.
网卡只具有PHY层功能,所以需要在FPGA内部完成对数据包的打包,传输视频采集模块处理完毕的数据.网络传输模块框图如图4所示.
图4 网络传输模块框图
相较于TCP,UDP是无连接的协议,一次握手快速建立连接即可传输数据,为实现高速传输,采用UDP协议并利用状态机完成对以太网帧的发送[11],其状态转移如图5所示.
图5 数据发送状态机
程序从空闲状态开始运行,进入发送前导码状态,待前导码以及帧起始定界符发送完毕,开始发送以太网、IP、UDP首部数据.为了便于修改,将以上数据存在ROM表中,当状态机处于相应状态时,采用地址寻址的方式将数据取出并发送.在FPGA端ROM表中设置不同端口号,可通过端口号区分不同的视频采集模块.
南朝诗文用典遭人诟病之处,即在于因炫才逞博而使事忘义,故有“淫文破典”之弊;而有人因这一弊端,便认为抒情性诗文不贵于用事,从而反对用典,又未免矫枉过正。从沈约对用典的态度中可以看到,他实际上是要求能在直寻与隶事、性情与才学之间,找到适当的平衡点。这样,用典对抒情就会起到积极的作用。这个平衡点简单地说就是人工与自然的统一,虽出机杼,而泯于自然。
为了提升传输的速度,使用乒乓操作将数据写入寄存器中,读取时,先读取第1张图片的第1行数据,此时第2张图片的第1行数据也已经存储好,而第1张图片的第2行数据并未存储完毕,故先读取第2张图片的第1行,接下来读取第3和4张图片的第1行.再读取第1张图片的第2行,直至完成4张图片的传输.为了在上位机区分不同的摄像头,将UDP数据的第1个8 B数据作为摄像头标记.
完成一个UDP数据包传输后,进入CRC校验状态.循环冗余检查(CRC)是一种数据传输检错功能,可保证数据传输的正确性和完整性.CRC校验数据发送完毕后,进入发送结束状态,网络设备和组件在接收一帧之后,需要一段短暂的时间来恢复并为接收下一帧做准备.
3 远程图像拼接与显示单元
3.1 视频接收与显示模块
图6 上位机图像处理程序
远程监控处理系统使用英特尔公司的Intel© Ethernet Connection I219-V的网卡芯片接收数据.借助MFC编写接收程序,可完成多路实时监控.上位机程序进行初始化之后,创建套接字并绑定套接字和IP地址,在开始键按下的情况下接收数据,将图像存入数据缓冲区,一张图像缓存完毕后开启对应线程进行数据处理,采用量化补偿的方法,将传输的RGB565数据转换为可以直接显示的RGB888数据[12],待480行全部转换完毕后,开始显示图像.无须接收新图像时,关闭套接字并清除套接字库.
每个接收程序只能绑定一个端口号,采用交换机进行扩展后,需在上位机开启多个程序接收来自不同图像传输处理系统的图像.
3.2 图像拼接与显示模块
为了使本文设计更好地应用于大场景监控以及机器视觉中,进行图像拼接是十分重要的.实现图像拼接主要包含图像获取、图像预处理、图像配准和图像融合等过程.为完成高速拼接,需使用NVIDA 公司的GeForce GT730显卡对拼接程序进行加速.拼接流程如图7所示.
图7 图像拼接流程
为了保证图像拼接的实时性以及较高的成功率,采用SURF算法检测图像特征点[13-14],并对重叠部分的图像进行配准操作,将所有图像两两匹配,将置信度高于门限的所有匹配合并到一个集合中.
在GPU上实现SURF算法,需要对不同阶段的算法进行并行化分.算法主要分为积分图像的计算、特征点检测、特征描述三部分[15].每一部分对图像进行复杂运算时,可利用GPU并行计算的优势,将积分图像的运算映射到GPU上,分别开启线程计算所需数据.
将SURF算法映射到GPU上时,需先用CPU将相应图像转换为灰度图,并上传到GPU中进行下一步运算,得到相应信息后传回内存中.根据Amdahl定律,此时加载图像及灰度图转换所占的时间变大,成为限制拼接时间的关键因素[16].因此需使用多核CPU进行计算,将加载图像及灰度图转换操作移至另一个CPU核上,与GPU对图像的处理并行进行.
摄像头的摆放与参数对图像拼接亦会造成一定影响,在程序编写中,我们添加相机标定部分的内容[17],采用光束平差法,对相机参数进行矫正,并对图像进行柱面投影[18],降低视差的影响.图像拼接完成后,为减小拼接痕迹,在图像的拼接处需进行接缝查找并在接缝处用多频段融合法做融合处理[19].
在摄像机固定之后,图像拼接相应的参数不会再发生变化,本程序在初始化部分完成特征提取、匹配、变换矩阵等参数的计算.拼接时不再逐帧对以上信息进行计算.
4 系统总体测试
采用8个摄像头采集8路数据通过视频采集传输单元传输至远程图像拼接与显示单元.经过测试图像清晰无抖动,可达到实时性传输,传输速率达912 MB,实验结果如图8和9所示.
图8 端口号8080和9090接收界面
图9 发送数据速度
图像拼接的时间与图像的复杂程度、图像的拍摄距离以及图像的个数有着密切的关系.实验中,需注意摄像头的摆放问题,为采集到高质量的拼接图像.需尽可能将摄像头摆放在同一水平面上,并在多台摄像头拍摄的图片至少存在30%重合的条件下将摄像头间隔一定距离排开,若场景距离较远、视野较大,可采用平行放置的模式摆放摄像头,若须获得全景图像,可结合摄像头焦距及视角,采用旋转放置的模式摆放摄像头.本次实验对图8中采集到图像进行拼接,得到结果如表1及图10所示.结果表明,本系统可完成8张图像的采集及拼接,经初始化之后,拼接时间可达0.38 s.拼接后图像较为清晰完整,没有出现重影、明显色差或接缝.
表1 远程拼接测试结果
拼接8张远程图像效果见图10.拼接后全景图清晰度较高,接缝处并无明显的拼接痕.
图10 8张远程图片拼接效果
5 结论
本系统借助模拟摄像头、视频解码器、FPGA、千兆网卡、交换机、GPU以及计算机设计了视频采集传输单元以及远程图像拼接与显示单元,完成了对大场景图像的获取及传输.可通过交换机连接多个视频采集传输单元,获取多个摄像头的图像,尽可能多的获取场景内的信息,并通过千兆网卡完成高速传输,借助上位机以及GPU完成对图像拼接,得到信息较为完整的全景图像,并可达到较高的拼接速度.