刘来成,周文晖,楼 斌,郑 宁
(杭州电子科技大学计算机应用技术研究所,浙江杭州310018)
三维立体显示有着广泛的应用前景。是未来发展的一种趋势[1]。立体显示技术通常分为戴眼镜或裸眼两类,虽然裸眼立体显示技术具有不受观看设备的限制,但目前裸眼立体显示技术存在观看距离受限,以及更易产生视觉疲劳等不足。因此当前主流立体显示技术通常是采用分时和分色技术[2]。采用FPGA实现分时/分色立体显示具有占用空间小,设计灵活;可以脱机运行,相比于PC机更方便简洁,易于移植;相比于DSP、ARM等有并行运算、速度快的优势。通过相关参数的修改,系统能适用于不同分辨率的显示器,具有很好的适用性。近期Istavan Andorko和ZHANG Guangwei等人分别提出了基于FPGA的分时立体显示系统[3,4]。但这些系统功能较为单一,只实现分时显示。本系统针对当前基于FPGA立体显示系统的不足,提出一种基于FPGA的集分色和分时技术于一体的多模式立体显示系统。
人眼有分辨三维物体空间位置的能力,从而对现实世界的事物有形象的感知和判断。形成深度感的主要因素是两眼存在视差,观察物体时两眼存在一定间距,左右眼中成像略有差异,通过大脑的分析综合,左右图融合为单幅图像而产生立体感[5]。立体显示技术大致分为:分色、分时、分光以及光栅式显示等。它们具有的共同点:左右眼分别看到左右视图[6]。
分色技术的原理是左图红分量经过红镜片进入左眼,右图蓝绿分量经过蓝色镜片进入右眼[7]。如图1所示,分别将左图红分量和右图蓝绿提取,合成一张红蓝图片,戴上红蓝眼镜观看时,左眼看到红色的左图,右眼看到蓝绿的右图,双眼看到的不同图像经过融合在大脑中呈现出立体效果。分时立体显示是将两路图像序列快速交替的显示,通过液晶开关眼镜,当显示器显示左(右)图像时左(右)镜片透光而右(左)镜片不透光,原理如图2所示。
红蓝眼镜价格便宜,片源多,普通显示器就能支持,但立体感及色彩较差。分时立体的质量好,色彩保真度高,缺点是片源少,液晶开关眼镜也较贵,对显示器要求也高。实验表明,帧频为85Hz时,视频的闪烁已经很轻,达到100Hz时,可保证立体图像清晰无闪烁[6]。
图1 分色立体显示原理示意图
图2 分时立体显示原理示意图
该系统使用自制双目子卡采集视频,子卡使用两片Micro生产的MT9M111 CMOS感光芯片。通过I2C对芯片配置,获得两路帧率为15fps、RGB565格式,1 280×1 024分辨率的视频。RGB565彩色模式一个象素占两个字节,在FPGA中拼接成一幅完整信息的图片。左右两幅视频乒乓缓存到SDRAM中,分别将左图的红和右图的蓝绿分量提取出来合成实现分色显示。将左右两幅图像序列交替显示实现分时显示。系统的硬件结构框图如图3所示。
图3 系统的硬件框图
FPGA芯片为Altera低成本、高密度Cyclone®II系列的EP2C70。逻辑单元(LE)68 416个,250个M4K嵌入存储器区块,嵌入RAM 1.1Mb,每个区块有4 096位存储器,150个嵌入乘法器,有4个用于系统时钟管理的PLL。SDRAM的数据总线宽度为16bits,最高支持166MHz的读写频率。输出端D/A芯片为3通道10 bits高速数模转换芯片ADV7123,最高支持分辨率1 600×1 200,100Hz刷新频率。
该系统使用两片32MB SDRAM分别作为两路视频数据的乒乓帧存,并通过4端口SDRAM控制器使用。4端口SDRAM控制器包括两个写入端FIFO和两个读出端FIFO,如图4所示(虚线框),本设计中所使用的FIFO的大小为512×16bit。4个异步FIFO主要用于实现不同时钟域数据同步的功能。写入端有FIFO A和FIFO B,进入FIFO的时钟为27MHz,从FIFO中读入到SDRAM的时钟为166MHz;在控制器的读出端有FIFO C和FIFO D,它们写入FIFO的时钟为166MHz,从FIFO中读出时钟为VGA控制模块的时钟108MHz。
图4 4端口SDRAM控制器
该系统中,将SDRAM分配两个独立的1 280×1 024×2字节的地址空间,并分别结合两个写FIFO和两个读FIFO,实现两帧数据的乒乓缓存与读取。
写入数据时,相邻两帧乒乓写入到FIFO A和FIFO B中,根据选择信号Sel_write进行判断相应的FIFO是否满256字写入SDRAM中。在读出端,根据选择信号Sel_read判断FIFO A和FIFO B乒乓读取,判断到读满256字后切换到另外的FIFO,实现乒乓操作。并将读到FIFO中的数据送到下一级VGA Controller进行处理。
在分时显示方案中,使用双路图像序列交替控制模块,实现双路读取的切换以及单路中A、B两个帧地址空间的切换。
同步信号发射器,通过开发板上的USB口供电,接受FPGA处理后的视频信号作为输入;连接CRT显示器上显示,通过输出端口连接到主动式快门3D分时立体眼镜上。同步信号发射器上有一个左/右眼互换键,可以将立体眼镜的左/右眼影像对调互换,每按键一次即左/右眼对调一次,用来同步立体眼镜与显示器上的信号。
双路切换:通过判断帧信号的上升沿实现rFont信号的反转,使用rFcont信号来控制切换左右路的读取操作。具体为,rFcont为0时,读取左路一帧数据,即向左路发送读有效信号;反之,为1时,读取右路一帧数据。从而实现左右图的分时读取操作,时序如图5所示。
分色显示方案中左图红分量和右图蓝绿分量合成为一幅图像。通过VGA控制模块发出的读有效信号,实现左右两路帧缓存的同步读取,将左路R分量低位补0,拼接为8bit数据赋给VGA控制模块的R通道;同时,将右路G、B分量分别补零拼接为8bit数据,分别赋给VGA控制模块的G通道和B通道。最终显示一帧包含左图的R分量和右图的G、B分量的立体图像,如图6所示Signal Tap II采集的波形。
图6 红蓝拼接模块
分时、分色两种模式之间可以通过模式寄存器来切换,如图7所示。切换信号到来时,不一定发生在下一帧图片刚开始的时候,此时切换就会造成画面混乱。通过检测帧开始来解决。切换信号到来后,检测到下一帧信号开始就转到另一种模式。如果显示器的刷新频率不足85Hz,采用红蓝立体显示模式观看效果较好,否则就用液晶开关眼镜观看分时立体视频。
图7 分时与分色两种模式切换的时序图
为达到更佳显示效果,双目光心的距离(基线)不宜过大,一般选取人双眼的间距65mm。分色显示:显示器分辨率为1 280×1 024,戴上红蓝眼镜能得到明显立体效果。分时显示时调整分辨率为1 280×1 024,刷新频率为74Hz时,屏幕有稍微的闪烁;调整分辨率为640×480,刷新频率为84Hz时,屏幕闪烁明显减轻。对比文献3中提出的系统,使用的是Xilinx生产的Virtex 4 FPGA,该系统使用的Cyclone II系列的FPGA,占用资源少,性价比更高。
FPGA的型号为EP2C70F896C6,资源使用情况如表1所示:该芯片中有68 416个LE资源,其中4%在这个工程中使用,3%用于实现组合逻辑,3%用于实现寄存器,即时序逻辑;组合逻辑与时序逻辑的使用比例是1:1。引脚总数为622个,使用了232个,占了37%。该器件的片内存储器总大小是1 152 000bits,在该工程中使用了858 112bits,使用率是74%。
表1 FPGA的使用资源
该文就当前立体显示中最被广泛使用的分时和分色技术,基于FPGA平台进行了设计与实现。设计中将分时和分色两种方案集成在一个系统中,减少了重复工作,并实现了通过模式寄存器高效切换。另外,该系统还具备双目场景的同步抓取,实现了简单的立体相机功能。通过实际的演示观看,能达到很好的实时立体效果。系统可作为立体显示的原型样机,同时FPGA芯片丰富的资源给后续算法、功能的加入提供了空间。
[1] 李小方,王琼华.自由立体显示器观看视疲劳[J].液晶与显示,2008,23(4):464-467.
[2] 王琼华,王爱华.三维立体显示综述[J].计算机应用,2010,30(3):579-581.
[3] Istvan Andorko,Peter Corcoran,Petronel Bigioi.Hardware implementation of a real-time 3D video acquisition system[C].Basov:National University of Ireland,2010:920-925.
[4] Zhang Guangwei,An Zhiyong.FPGA-based hardware to achieve the stereoscopic display[C].Beijing:Changchun University of science and technology,2008:1 732-1 735.
[5] 张宇辉,吕国强,胡跃辉,等.立体显示的双目模型算法及实现[J].计算机工程与应用,2006,42(5):65-67.
[6] 康立民.立体照片的拍摄及合成[J].北京机械工业学院学报,1996,11(2):30-42.
[7] 李娟,关祥宏.基于微机的三维真立体显示技术评述[J].铁路勘察,2005,31(2):24-27.