本发明属于fpga嵌入式图像处理技术领域,涉及一种空间标志物动态坐标实时捕捉相机。基于fpga并行图像处理,可以在帧率为100帧并且1280×720的高分辨率下,最多可以实时计算出图像中200多个动态标志物的空间坐标。
背景技术:
运动捕捉系统在动漫制作、运动员训练、互动式游戏等领域应用非常广泛。在动漫制作时,可以通过捕捉真人的动作,然后进行三维动画合成,可以极大的提高动画制作的效率,降低了成本,提高了动漫制作的水平。通过捕捉运动员的动作,便于进行量化,结合人体生理学、物理学原理,研究改进的方法,使体育训练摆脱纯粹依靠经验的状态,进入理论化、数字化的时代。还可以把成绩差的运动员的动作捕捉下来,将其与优秀运动员动作进行对比分析,从而帮助其训练。在互动式游戏开发领域,可以利用运动捕捉技术捕捉游戏者的各种动作,用以驱动游戏环境中角色的动作,给游戏者以一种全新的参与感受,加强游戏的真实感和互动性。此外,运动捕捉系统在医疗,机器人,无人机等领域应用也非常广泛
当图像大小为1280×720时,传统的图像处理算法按照中值滤波、边缘检测和重心计算处理完一幅图像时间都在50ms以上,实时性较差,算法复杂度高。针对上述背景内容,提供一种空间标志物动态坐标实时捕捉相机具有重要使用价值。
技术实现要素:
本发明的目的是提供一种空间标志物动态坐标实时捕捉相机,该空间标志物动态坐标实时捕捉相机基于fpga高速并行处理的特点,图像的采集和数据处理都在fpga单芯片中进行。在高帧率高分辨率的条件下,实时性好,结构简单。
本发明采用的技术方案如下:
一种空间标志物动态坐标实时捕捉相机设计,步骤如下:
1.cmos图像传感器电路连接
fpga通过iic总线的sclk时钟和sdata数据信号向将cmos图传感器的寄存器中写入设置的参数。包括工作模式、图像和增益的大小等设置。fpga还向传感器提供12.5mhz的主输入时钟extclk,然后通过传感器的片上锁相环倍频成96mhz的像素时钟pixclk。fpga还要为其提供曝光触发信号trigger,用来控制图像帧率,当trigger为低电平时,就会触发一帧图像,低电平时间的长短决定曝光时间的长短。图像传感器把输出的图像数据dout、输出像素时钟pixclk、帧有效信号fv和行有效信号lv等信号传输到fpga上。通过两排插针将fpga与cmos图像传感器连接起来。
2.microblaze嵌入式软核与fpga的数据交换
ddr3作为microblaze的内存,缓存从双口块ram1中读取的数据段。ddr3通过多端口内存控制器mpmc连接到microblaze内核。microblaze软核通过块ram控制器来读写双口块ram。microblaze通过双口块ram1的控制器从块ram1读取边缘坐标数据;microblaze通过双口块ram2的控制器向双口块ram2写入动态标志物的质心坐标数据。在本发明中,两个双口块ram都是用一个端口用来读,另一个端口用来写。块ram1的端口a是写入边缘坐标数据数据的端口,与fpga图像处理模块相连。端口b是读出边缘坐标数据数据的端口,与块ram1控制器的输入信号端口相连;块ram2端口a是写入动态标志物的质心坐标数据的端口,与块ram2控制器的输出信号端口相连。端口b是读出质心坐标数据的端口,也与切换模块相连。
在microblaze中通过读数据函数xio_in32读取出双口块ram1中的所有边缘坐标数据存储到ddr3中。microblaze软核通过连通域快速检测算法,只需遍历一次ddr3中的边缘坐标数据段矩阵,就可以实时计算出整帧图像中的所有动态标志物的质心坐标,算法过程如下:
(1)对数据进行初始化,total表示一共有多少个数据段。i表示计数数据段的个数,初始化为1,即从第一个数据段开始判断。n表示当前一共有多少个动态标志物连通域,初始化为1。j表示当前判断的是第几个动态标志物的连通域。初始为1。row_num[j]表示第j个动态标志物占有多少行,初始化为1。mark_num表示一共计算了多少个动态标志物的质心坐标。初始化为0。
(2)判断当前数据段个数i是否小于等于total。若不满足条件,依次计算出当前n个动态标志物质心坐标,再把mark_num与n和的值赋给mark_num,结束一帧图像所有动态标志物的坐标计算。若满足条件,则对j赋初值1,即对当前已有的n个连通域逐一进行判断。
(3)判断j是否小于等于n,不满足,说明第i个数据段不在当前的n个动态标志物连通域内,而在一个新的连通域内,增加当前连通域个数,将n的值加1。计算第n个新连通域在x和y方向上的像素,再把i的值加1,对下一个数据段进行循环判断。直到i的值大于total,计算出整帧动态标志物质心坐标。
(4)若j小于等于n,则判断第i个数据段是否在第j个动态标志物的连通域内,若满足,把第j个连通域在x和y方向上的像素分别累加。再把row_num[j]加1,变量i加1,对下一个数据段进行循环判断,直到i大于total。
(5)当第i个数据段不属于第j个动态标志物的连通域时,判断是否隔行。
1)隔行,即当前数据段的纵坐标数据与第j个连通域的最后一行纵坐标数据的差值大于2,则后面的数据段都不在第j个连通域内,因此计算出第j个连通域的质心坐标,mark_num个数累加1。删除第j个连通域,用后一个(第j+1)连通域的数据覆盖掉前一个(第j个)连通域的数据,直到用最后一个(第n个)连通域覆盖掉第n-1个连通域的数据。连通域个数n减1。计算j减1后,再用j加1,即判断当前第i个数据段是否在当前第j个动态标志物的连通域内。
2)不隔行,直接判断当前第i个数据段是否在下一个动态标志物的连通域,计算j=j+1,对下一个连通域进行判断。继续循环判断,直到i大于total。
根据连通域快速检测算法,计算出整帧图像中的所有动态标志物的质心坐标,并把计算出的质心坐标数据存储到ddr3中,再通过写数据函数xio_out8将计算出的质心坐标数据写入到双口块ram2中,计算结果经过切换模块后,输入到fpga的fifoip核中缓存,fifo另一端连接的是千兆网端口。
fpga切换模块输入端是滤波后的图像数据和动态标志物的质心坐标数据。当接收到显示图像的命令时,切换模块把图像数据通过千兆网发送到上位机上进行图像的实时显示;在接收到显示坐标命令时,切换模块把动态标志物的质心坐标数据通过千兆网传输到上位机实时显示动态坐标的轨迹。
本发明的有益结果:
(1)采用iic总线对cmos图像传感器进行配置。
(2)本发明基于fpga的快速并行处理的特点,在fpga中实现对图像数据采集和处理以及计算动态标志物质心坐标的功能,不但简化结构,而且实时性好、处理速度快。而传统运动捕捉系统只能在对图像数据采集存储后,再交由后端进行处理,对图像数据实时处理能力差。
(3)本发明的快速连通域检测算法,算法复杂度非常低,为o(n)。对所有的数据只遍历一次就实现对整帧图像中所有的动态标志物质心坐标的计算,从而保证了系统的实时性。传统算法复杂度高,为o(n2),计算量大、耗时多。
(4)本发明算法实现了对帧率100为帧分辨率为1280×720的图像实时显示功能和最多实时计算并显示200多个动态标志物坐标的功能。实现对高帧高分辨率多个动态标志物质心坐标的实时捕捉,实用性好。
附图说明
图1为本发明的整体流程示意图。
图2为cmos图像传感器的电路连接图。
图3为microblaze与fpga数据交换连接图。
图4为提取动态标志物边缘坐标数据流程图。
图5为本发明连通域快速检测算法流程图。
图6为本发明传感器实时显示图像。
图7为本发明二值化后的图像。
图8为本发明实时计算200多个动态标志物的质心坐标图像。
具体实施方式
以下结合本发明的技术方案与附图对本发明包含的步骤分别进行详细完整的描述。
步骤一,cmos图像传感器电路连接
xilinx公司的fpga通过iic总线的sclk时钟和sdata数据信号向将cmos图传感器的寄存器中写入设置的参数。包括工作模式、图像和增益的大小等设置。fpga还向传感器提供12.5mhz的主输入时钟extclk,然后通过传感器的片上锁相环倍频成96mhz的像素时钟pixclk。fpga还要为其提供曝光触发信号trigger,用来控制图像帧率,每当trigger为低电平时,就会触发一帧图像,低电平时间的长短决定曝光时间的长短。图像传感器把输出的图像数据dout、输出像素时钟pixclk、帧有效信号fv和行有效信号lv等信号传输到fpga上。通过两排插针将fpga与cmos图像传感器连接起来。如附图2所示。
步骤二,fpga图像处理模块对数据进行并行处理
xilinx公司的fpga输入图像接口接收来自传感器的输出信号。fpga的图像处理模块一边对图像数据进行均值滤波,把滤波后的数据输出到切换模块,一边并行处理提取出动态标志物的边缘坐标数据,如附图4所示,过程如下:
(1)首先对图像中的像素灰度值进行二值化处理。将每帧图像中的所有像素的灰度值都分别与阈值进行比较。比阈值大,置为1,否则为0。定义一个4位wire型变量mark_state,用来表示四个连续像素的二值化后的结果。
(2)当mark_state的值为4'b0001,当前的图像列坐标为左边缘坐标x1。当mark_state的值为4'b1110时,当前图像的列坐标为右边缘坐标x2,当前的行坐标为纵坐标y。把这三个数据写成数据段(x1,x2,y)的形式。
(3)检测到右边缘时把双口块ram1的写使能信号bram_wen置为1,开始向块ram1输入数据信号bram_data中依次写入x1、x2和y。然后把bram_wen置0。重复检测右边缘,直到把整帧图像中所有动态标志物的边缘坐标数据全部检测出来。并且把所有的数据段数据存入块双口块ram1中。
步骤四,microblaze嵌入式软核与fpga的数据交换
ddr3作为microblaze的内存,缓存从双口块ram1中读取的数据段。ddr3通过多端口内存控制器mpmc连接到microblaze内核。microblaze软核通过块ram控制器来读写双口块ram。microblaze通过双口块ram1的控制器从块ram1读取边缘坐标数据;microblaze通过双口块ram2的控制器向双口块ram2写入动态标志物的质心坐标数据。在本发明中,两个双口块ram都是用一个端口用来读,另一个端口用来写。如附图3所示,块ram1的端口b是写入边缘坐标数据数据的端口,与fpga图像处理模块相连。端口a是读出边缘坐标数据数据的端口,与块ram1控制器的输入信号端口相连;块ram2端口a是写入动态标志物的质心坐标数据的端口,与块ram2控制器的输出信号端口相连。端口b是读出质心坐标数据的端口,也与切换模块相连。
在microblaze中通过读数据函数xio_in32读取出双口块ram1中的所有边缘坐标数据存储到ddr3中。microblaze软核中连通域快速检测算法的流程图,如附图5所示,只需要遍历一次ddr3中的边缘坐标数据段,实时计算出每帧图像中所有动态标志物的质心坐标,把计算出的质心坐标数据存储到ddr3中,再通过写数据函数xio_out8将坐标计算结果写入到双口块ram2中,计算结果经过fpga的图像或坐标显示切换模块,输入到fpga的fifoip核中缓存,fifo另一端连接的是千兆网端口。
当接收到上位机实时显示图像的命令时,fpga的图像或坐标显示切换模块把图像数据通过千兆网发送到上位机上进行图像的实时显示,如附图6所示为显示的图像,附图7所示为显示的二值化后的图像;在接收到显示坐标命令时,fpga的图像或坐标显示切换模块把动态标志物的质心坐标数据通过千兆网传输到上位机实时显示动态质心的坐标,如附图8所示。