实施立体视觉系统的构架与设计分析
2017-05-10张为
摘 要:双目立体视觉系统的原理在于模仿人类的双眼,通过一定的立体匹配算法计算出场景中各物体的深度信息,以完成三维重构、测距等功能。早期的立体視觉研究主要集中在算法优化上,各种各样的立体匹配算法被提出来。就目前最新的立体匹配算法而言,其效果已经可以媲美理想的场景深度。本文主要就双目立体视觉原理和实时立体视觉系统结构进行详细分析,然后结合实际对实时立体视觉系统的模块设计详细探究。
关键词:双目立体视觉系统;系统设计;方法
随着视频技术的发展,使用硬件实现实时的双目立体视觉系统也有了越来越多的研究,但是其硬件实现却一直存在计算精度和资源消耗这对矛盾,复杂的算法势必需要消耗更多的硬件资源,有些较新的算法甚至根本不适合使用硬件来实现。
1双目立体视觉原理和实时立体视觉系统结构分析
1.1双目立体视觉原理分析
双目立体视觉系统以人类的视觉系统为基础,通过双目摄像机获取双目图像,以各种不同的算法来计算出场景的深度信息,再通过对这些深度信息进行三维重构,以实现从二维空间到三维空间的转换。
1.2实时立体视觉系统结构分析
1.2.1camera_in模块
此模块为基于PE1005S摄像头的采集模块。当基于不同的摄像头模组时,可模块可以通过简单修改以配置不同的摄像头,如ov9710、ov7740等。
1.2.2video_det模块
此模块功能为检测所采集图像的实时分辨率,检测到的分辨率会实时保存下来,可以通过PLB总线进行访问。有了这个模块,就可以根据检测出来的分辨率来控制数据在DDR中的存放以及正确地显示图像。
1.2.3xsvi_in_ddr模块
此模块将从两路XSVI接口传送过来的数据通过两个FIFO进行缓存,然后通过两个独立的写时序状态机模块生成独立的MCB接口时序,最后由主控制电路controller进行仲裁和控制等并通过一个MCB接口写到DDR中。由于在大部分情况下,系统中DDR的写入时钟频率都与摄像头数据时钟频率不同,故所使用的FIFO只能是异步的,这样数据才不会错乱。
1.2.4ddr_to_xsvi模块
此模块预先通过读时序状态机模块将DDR里的数据缓存在FIFO里,然后根据外部来的数据请求信号将数据从FIFO里读出来,以XSVI接口传给下一个模块。同样,在大部分情况下,由于系统中DDR的读取时钟频率都与显示图像的时钟频率不同,故所使用的FIFO只能是异步的。
1.2.5video_gen模块
此模块在PLB总线来的控制下可以生成多种标准格式的视频信号,如VGA(640×480)、SVGA(1024×768)、SXGA(1280×1024)、UXGA(1600×1200)、720P和1080P等。另外,在整个系统的分布调试阶段,此模块还可以在未与实际视频数据连接的情况下生成指定格式的测试彩条,以对显示部分的各模块进行测试。
1.2.6dvi_out模块
此模块将XSVI接口的图像数据信号转换成DVI接口的信号。由于图像的时序部分已经有video_gen模块完成了,此模块的功能只是简单的数据格式转换已经同步。
1.2.7depth模块
此模块是整个系统的核心部分,所有的立体视觉算法都将在这个模块中进行。从数据流动的顺序主要包括代价初始化、代价融合、动态规划三个模块。其中,代价初始化通过census转换和SAD两种方法生成用于后续匹配运算的两种初始代价,代价融合将两种初始代价按一定的比例融合起来,动态规划用来寻找匹配点。另外,为了使生成的深度图更加准确,系统中还使用了图像矫正来处理由于摄像头组安装不规范和镜头畸变造成图像数据不匹配,背景去除和中值滤波用来优化生成的深度图。
2实时立体视觉系统的模块设计探究
图像处理系统平台构成。图像处理系统平台是双目立体视觉系统的基础,也可以说是所有图像处理算法验证的基础。因此在验证双目立体视觉系统的性能之前必须先搭建好完善的图像处理系统平台,主要包括图像采集、图像存取、图像显示三部分。例如图像显示模块,图像显示模块主要由分辨率生成模块video_gen和DVI时序模块dvi_out组成[4]。video_gen模块用来生成不同分辨率的视频所需要的标准时序,由两个计数器和两个状态机组成,行计数器和行状态机用来生成行同步时序,而场计数器和场状态机用来生成场同步时序。
实时立体视觉模块,双目立体视觉模块主要由disparity_rd和disparity_wr两个模块组成。disparity_rd模块通过一个MCB接口轮流地从内存控制器中读取出左右两幅图像以及背景图像,并将它们分别缓存在三个异步FIFO中,然后由一个控制电路使它们完全同步地输出给disparity_wr模块。而disparity_wr模块则先将输入进来的三路数据送到stereo_matching模块计算深度图,然后在控制电路的配合下将生成的disparity通过一个MCB口存入内存控制器中。由于整个系统考虑了模块化设计,本模块中使用的mcb_rd和mcb_wr与图像存取模块中的是完全相同的,大大节约了开发时间。
其他辅助模块,如图像矫正,首先,CoordGen模块根据提供的矫正矩阵计算出对应的坐标存到CoordFifo中,然后Controller模块根据坐标的整数部分控制RdDataCtr模块从内存中读出所需像素点存到两个DataRam中,最后CorrectCtrl模块根据坐标的小数部分对取出来的数据进行运算并放到DataFifo中等待读取,图像矫正过程就完成了。其中,坐标保留小数部分和一次读取内存的两段数据是为了进行插值算法,使矫正后图像不会出现锯齿,而矫正矩阵则是通过Matlab在实验阶段计算出来的。
3结语
综上所述,此次主要分析了大量国内外有关双目立体视觉系统的算法以及各种不同的实现方案,详细描述了所设计的双目立体视觉系统中各个模块的实现方式。在这些相应分析下就能有助于设计目标的实现。
参考文献:
[1]薄雪峰,全海英,刘志成,谭国庆,何玉.被动式立体视觉研究进展[J].北京生物医学工程.2013(05):1-2.
[2]Guivant.J,Nebot.E,Baiker.S.Autonomous navigation and map building using laser range sensors in outdoor application[J].Journal of Robotic Systems,2014,17(10):565-583
[3]周清海等.基于FPGA的多通道全景SoC设计与实现[D].深圳:深圳大学,2013:2-4.
[4]韩超,邓甲昊,邹金慧,韩敏.基于差分均值背景提取和矩阵分区目标检测算法的研究[J].北京理工大学学报,2015,32(12):1247-1257.
作者简介:
姓名:张为,性别:男,籍贯:安徽,出生日期:89/09/27,湖北工业大学研究生,现任旭予腾贸易(上海)有限公司,职务:设备工程师。