基于FPGA的双目视觉同步采集系统设计
2013-08-13温小艳杨荣骞吴效明黄毅洲
温小艳,杨荣骞,吴效明,黄毅洲
(华南理工大学生物科学与工程学院,广东 广州 510006)
手术导航系统具有缩短手术时间、有效提高手术精度、减少手术创口以及并发症等优点,被越来越广泛地应用在临床上,空间定位技术作为手术导航的关键技术之一,其精度决定了导航系统的精度[1-3]。光学定位以其高精度和使用方便等特点被有效地应用在手术导航系统中[4-5]。在光学定位系统中,首先要解决的是两台相机同步问题,不能同步或同步误差较大都将削弱并且限制定位的精度。一般采用的图像采集工具为工业相机,但其在出厂时功能和时序等特性已经封装好,不能外部控制其每一帧图像采集的开始。图像传感器则可利用外部逻辑根据需要进行配置,使其工作在被动模式,同时外部逻辑产生控制时序,使得两相机在该控制时序下同步工作,因此通过外部逻辑来控制图像传感器可以有效地解决两相机不同步的问题。
基于传统计算机的光学定位系统通过串行处理CPU来控制运算和操作,这使得对两相机数据的操作在时间上不同步,因此降低了系统的精度同时也减慢了处理速度。当今电子技术迅速发展,大规模集成电路器件的性能不断改善、速度不断提高,从而使研究基于现场可编程门阵列(FPGA)的图像采集系统成为可能。本文利用FPGA初始化OV7620使其工作在被动模式;利用FPGA产生场同步Vsync和行同步Hsync使得两相机同步工作,同时对两相机图像数据进行亚像素提取;SDRAM作为图像数据和亚像素坐标的缓存区;根据上位机的命令完成USB传输。
1 图像同步采集系统设计
该系统的流程如图1所示。
图1 图像采集系统流程
1.1 硬件模块设计
该系统采用ALTERA公司的DE2-70开发板作为硬件平台;以美国Omni Vision公司的CMOS彩色图像传感器芯片OV7620作为图像采集工具,该芯片内建的SCCB(Serial Camera Control Bus)接口提供一种简易的控制其内部寄存器的途径[6-8];USB芯片采用CY7C68013,其集成了USB2.0收发器、串行接口引擎(SIE)、增强的8051微控制器和可编程的外围接口,该芯片可以工作在Slave FIFO模式。
1.2 软件模块设计
软件模块利用Verilog HDL语言,以QuartusⅡ9.1为软件开发平台。
1.2.1 OV7620被动模式设计
OV7620采集图像主要用到3个同步信号:像素时钟PCLK、行同步Hsync和场同步Vsync,其中,Vsync的下降沿代表一帧图像的开始,上升沿表示一帧图像的结束,Hsync高电平可以有效开始一行数据的采集,PCLK上升沿表示一个图像数据的采集。主动模式下,这3个信号均由OV7620输出至外部逻辑,每个相机均按自身产生的Vsync时钟开始每帧图像的采集,无法通过外部控制实现同步。即使是相同型号的相机,其采集每帧图像有一定的时间差,如果相机长时间采集,时间差累加,会造成两相机图像的不同步。为解决该问题,该系统采用OV7620的被动模式来解决相机不同步的问题。
OV7620的被动模式是由FPGA产生行同步Hsync和场同步Vsync并输入至相机,相机根据该信号的有效沿作为每帧图像采集的开始。如果输入同一个控制信号给两台相机,那么两台相机就可以根据该信号判断何时开始每一帧图像的采集,从而实现两相机同步工作,其被动模式时序要求如图2a,其中CLK为相机工作时钟27 MHz,Ths>6× Tclk,Ths< Tvs<2×858× Tclk。该系统采用 Tvs=640× Tclk,Ths=100×Tclk,Vsync产生如图2b所示。
图2 OV7620被动时序
为使OV7620工作在被动模式,通过SCCB初始化其内部寄存器。OV7620功能寄存器的地址为0x00~0x7C。由于SCCB完全兼容I2C总线,因此在设计过程中利用FPGA的两个I/O口模拟I2C总线接口的时钟线SIO_1和数据线SIO_0。在该系统中,OV7620的初始化后工作模式为:被动模式、输出像素分辨率640×480、VGA模式、逐行扫描、16位YUV(取其8位Y输出)。其主要的寄存器配置如表1所示。
表1 寄存器配置
1.2.2 图像采集
OV7620相机图像的采集严格地受PCLK、Hsync和Vsync时序控制。PCLK上升沿数据稳定,此时可以有效采集一个图像数据。Hsync上升沿可以开始一行数据的采集,当采集的宽度达到640,一行采集结束。Vsync上升沿表示一帧图像的到来,下降沿时可以开始一帧图像的有效采集,当采集到480行,一帧图像采集结束。在设计Verilog程序时,采用两个计数器X_Cont和Y_Cont分别对图像的行和列进行计数,如图3所示,其中iData为相机输出数据,oData为采集到的图像数据。图像数据以及亚像素提取坐标值需要进行缓存,来满足USB传输时钟的要求,该系统用两片SDRAM作为两相机图像数据和亚像素数据的存储区。
图3 OV7620图像采集流程
1.2.3 亚像素提取
应用于手术导航的光学定位系统,只需获取安装在手术器械上标记点的三维信息。标记点映射到二维图像表现为光点的形式,该光点的中心被认为是标记点的映射中心,通常以光点区域的亚像素值作为光点的中心,本文采用灰度加权平均法来计算亚像素坐标[9]。假设手术工具上安装有n个标记点,在第j(j=1,2,…,n)个光点区域有m个像素点的灰度值大于指定阈值t,第i(i=1,2,…,m)个像素点的坐标表示为qi=[qix,qiy]T。该点的灰度值表示为vi。则该光点的亚像素坐标可以由下式得到
OV7620以逐行的方式产生图像数据。通常一把手术器械上会安装多个标记点,利用上式计算亚像素坐标的关键是正确区分每一个大于阈值的点属于哪一个光点。由于在实际光学定位应用中,手术器械上不同标记点在一帧图像上一般不会重叠并且会有一定的距离。该系统利用距离信息l来准确地把每一个大于阈值的像素点划分到相应的光点区域。具体过程如下:
1)设定合理的距离阈值l和图像阈值t,随着像素时钟,对采集到的每个数据进行判断,找到第一个大于阈值的点,并把其作为第一个标记点的起始点P1,并把该点作为P1的1×5的矩形查找区域的左上顶点P1′,该查找区域随着P1′的变化而不断变化。
2)找到第二个大于阈值的点,如果该点与P1的距离小于l并且在以P1′为顶点的查找区域内,则该点被认为是标记点P1的临近点,此时P1′移到该点;否则把该点作为第二个标记点的起始点记为P2,此时第二个标记点的查找区域的左上顶点P2′=P2。
3)同样的方式找到第三个大于阈值的点,并计算该点与P1的距离,如果小于l并且属于P1′的查找区域,则该点是P1的临近点,P1′移到该点,继续扫描;如果大于l,则计算其与P2的距离,如果该距离小于l并且属于P2′的查找区域,则该点被认为是P2的临近点,P2′移到该点,如果与P2的距离大于l,则该点被认为是第三个标记点的起始点,记为P3。
4)通过同样的方式,找到n个标记点的起始点以及其临近点,由于图像存在噪声等干扰因素,根据标记点的成像规律,如果检测到的某个标记点的临近点的个数小于10个,则认为其为噪声点。至此,根据上式可以得到每个标记点的亚像素坐标。
1.2.4 USB传输
在该模块设计中,采用端点2作为OUT方向,端点6作为IN方向,每包数据的大小均为512 byte,其状态跳转如图4所示。
图4 USB收发数据状态转换
IDLE:初始化所有参数。
READ_EVENT:端点指向2OUT。
READ_READY:USB的输出控制信号u_sloe有效。
DATA_READY:读信号有效,读取数据,如果该缓冲区非空,进入READ;如果缓冲区为空并且camera_choose和subpixel_choose均无效,在该状态等待;否则进入WRITE_EVENT。
READ:读信号无效。
WRITE_EVENT:指向端点6。
WRITE_READY:写信号有效,把相机数据或者亚像素数据写入端点6的缓冲区,若缓冲区未被写满,进入WRITE;若已被写满,进入READ_EVENT查询有没有新的指令。
WRITE:写信号无效。
上位机采用编码的方式发送命令,FPGA通过解码来确定发送图像数据(camera_choose有效)还是亚像素坐标(subpixel_choose有效),然后把相对应的数据写入端点6的缓冲区。因为USB的读操作和写操作不能同时进行,所以每写入一包数据,需返回查询上位机是否有命令,如果上位机有命令,则根据上位机的命令进行跳转,否则继续读取相应数据。
2 系统测试结果
在光学定位系统中,两相机是否同步工作对定位精度的影响很大。该系统首先采用FPGA的两个I/O端口模拟I2C总线对OV7620内部寄存器进行配置,使其工作在被动模式,再通过FPGA产生场同步信号Vsync同时输入给两相机,使其同时开始每一帧图像的采集,从而达到定位系统中两相机的同步采集,图5为示波器显示的两相机的帧同步信号。
图5 FPGA产生的Vsync信号(截图)
利用QT编写上位机,验证图像采集、亚像素提取的准确性以及USB传输速度,其界面如图6所示。当上位机选择读图像数据时,两相机拍摄手术器械上标记点,该标记点由近红外二极管发光贴片组成,两相机图像同时显示,如图6a所示,通过定时器可以观测到每秒每个相机可以传输23帧图像,达到光学定位对于图像实时采集的要求;为了有效滤除环境光的干扰,在相机镜头前添加近红外滤光片,图6b所示的是添加滤光片之后标记点在两相机中的成像。当上位机选择读亚像素坐标,通过文本框显示出对于当前图像所提取到的亚像素坐标。为了验证该亚像素坐标提取是否准确,把得到的亚像素坐标还原到图像中,图6b中“+”的中心即为亚像素坐标,证明本系统采用的亚像素提取方法可以准确地得到亚像素坐标;当上位机选择“停止读”按钮,此时上位机停止接收USB传送的数据。
图6 上位机验证
3 结论
本文以FPGA作为主控制器,初始化OV7620使其工作在被动模式;由FPGA产生Vsync和Hsync使得两相机同步工作。对采集到的数据通过灰度加权平均法得到每个标记点在图像上的亚像素坐标。利用FPGA的并行计算,对两相机的图像采集、亚像素坐标计算、存储以及USB传输并行处理。结果表明,该双目视觉同步采集系统工作稳定,两相机同步工作,上位机正确接收两相机图像并实时显示、亚像素坐标提取准确,良好地解决了传统光学定位系统两相机图像采集不同步的缺点。
[1]吴剑.三维高精度光学定位技术及其临床应用[D].北京:清华大学,2004.
[2]姜立君,甘东兵,王国荣.基于双目视觉传感的计算机辅助骨外科手术导航模型[J].华南理工大学学报:自然科学版,2006,34(2):67-72.
[3]张丽.数字化手术导航系统的原理与应用[J].医疗卫生装备,2010,31(1):110-111.
[4]党潇.基于FPGA的手术导航红外光学空间定位系统的设计研究[D].北京:清华大学,2010.
[5]张衍儒,武颍.双目三维定位的视频运动检测控制系统设计[J].应用天地,2009(7):57-59.
[6]宋海吒,唐立军,谢新辉.基于FPGA和OV7620的图像采集及VGA显示[J]. 电视技术,2011,35(5):45-47.
[7]OV7620 Datasheet V2.1[EB/OL].[2012-05-25].http://wenku.baidu.com/view/50692ca1284ac850ad0242ab.html.
[8]沈华,王俞心.基于FPGA的I2C总线主控制器的设计与实现[J].航空计算技术,2007,37(6):109-111.
[9]YANG R,YANG W,CHEN Y,et al.Geometric calibration of IR camera[J].Journal of Lightwave Technology,2011,29(24):3797-3803.