2.3 DSP三维重建模块
为了应对三维图像大数据量复杂高速运算的需要,这里采用了两片TigerSHARC 201芯片并行三维重建运算。由控制FPGA对两片DSP所要处理的图像进行任务分配,DSP结合预处理FPGA存入FIFO的数据和PCI总线所给处理参数进行定标参数计算、坐标计算、三维重建和构型。由于TS201内部集成的总线仲裁机制,双DSP可以实现无缝连接,大大减小了多DSP协调工作的设计难度。DSP间的连接是依靠其拥有的全双工LinkPort,它采用LVDS(低电平差分信号)输入数据。链路口能独立或同时工作,在时钟的上升沿和下降沿锁存数据。链路时钟频率最高可以与处理器核相同,高达500MHz,每个链路能完成500Mbps的单向数据传输。每个DSP的4个LinkPort合起来最大的通透率为4.0Gbps。连线短且简单,不需要额外的辅助电路,且可有效防止连线长引起的信号畸变。LinkPort传输协议由控制FPGA完成。
2.4 PCI通信接口模块
根据三维信息获取系统的速度传输要求,采用PCI接口完成该系统与通用PC的信息交互。PCI接口控制器是硬件部分的控制中心和数据交换中心,它接收设备驱动程序的命令和数据,配置和控制系统的各个模块使其协调工作,完成系统任务;它还负责将采集到和处理后的数据通过PCI总线转送给通用PC。本系统采用PLX公司的32bit/33MHz PCI9030作为接口芯片,串行EEPROM-FM93CS56L电可擦除只读存储器保存PCI9030的配置信息。
2.5 系统控制与数据交换模块
控制单元对处理器的数据处理单元和输入数据格式转换单元以及所有FIFO存储器产生控制,与预处理FPGA配合完成DSP的LinkPort协议。由于数据处理单元中为流水处理,在控制单元的设计中要特别注意由流水线产生的固定周期的延时,延时的周期数等于相应流水线的级数。控制单元还与PCI接口连接,接收来自主计算机的控制信号和背景阈值等信息。控制FPGA还是SAA7111A、PCI接口和DSP之间的图像和信息交换的桥梁,为其提供所需要的参数和数据信息。
3 软件设计与实现
3.1 图像预处理算法
如图3,激光带预处理算法的实现[2]为:由于有激光帧和无激光帧是依次交替产生的,因此首先要保存一帧有激光帧,在其下一帧,即无激光帧到来时,将保存的有激光帧和当前无激光帧的相同行、列的点相减,再对结果进行亮度提取,处理完成后的数据存入目标缓存。
如图4,实现提取轮廓线算法分为三个部分[3],首先由计算比较模块对输入像素点的值与预先计算好的阈值进行比较,判断其是否为目标像素;然后利用一个序列检测模块进行一维尺度滤波以去除某些噪声点;再经过一个边缘检测模块,提取出每行的第一个目标像素作为目标的左边缘点;完成后将此点所对应的列地址数据存入目标缓存。在某些情况下,可能整行都检测不到边缘点,这时将0存入目标缓存作为无边缘点的标识。
提取中心线算法实现比较简单,只需对目标缓存的写允许信号加以控制,使RGB数据只能在每行的中心点处写入目标缓存即可。
3.2 三维重建和构型
如图5所示,高速DSP将根据预处理信息得到的激光标志线、轮廓线和中心颜色线数据与源数字化图像结合起来进行三维重建。首先根据获取的图像标志点数据结合控制点三维坐标数据计算出系统定标数据;其次根据轮廓线计算物体外表面展开图,再依据定标数据结合展开图和机械参数对图像中的坐标点进行计算,给出数据集,输出深度数据文件;最后对多次扫描的数据进行融合,将离散点构型成立体模型(或立体彩色模型),将模型生成DXF、STL等数据文件传入PC机,使用后端处理软件进行显示[3]。
3.3 算法实现
图像预处理算法设计使用Verilog HDL在Xilinx公司的ISE8.1集成编译环境下成功实现;FPGA开发流程不再赘述。
DSP三维重建算法已使用C语言在ADI公司Visual DSP++环境下成功实现[4]。算法实现步骤如下:①用C语言编程实现算法。②使用Visual DSP++编译器将源程序编译成目标文件。③根据产生的目标文件,分析结果及源程序结构并优化源代码。④应用TigerSHARC 201评估板进行运算时间评估。⑤重复上述步骤直至达到系统实时性要求,最后下载到目标板。
整个系统联机运行稳定,满足设计要求,实时性好。
实时三维图像信息处理以其数据量大、速度要求高、处理过程复杂的特点使其难以使用集成电路实现。本文研究的以目前最新高性能处理器的FPGA+DSP为核心架构的三维图像处理系统精心设计了算法的硬件实现,充分利用了两种处理器的长处。实验表明,该系统有着良好的性能,对实现基于网络的实时三维扫描应用,如三维传真、机械远程加工、快速成型和虚拟现实,有着重要的意义。