Profile - CN071


CN071

基于SOPC的2D转3D多媒体处理系统

中山大学
微电子学


Finals


[print]


Project

Name of Project:基于SOPC的2D转3D多媒体处理系统

Contact Information

Name:雷东玮
E-Mail:dongweilei@foxmail.com
Telephone:02084114462
Mobile Phone:15013215332
Mailing Address:广东省广州市海珠区新港西路135号中山大学理工学院十友堂4楼ASIC中心

Contest Advisor

Name:庞志勇
E-Mail:stspzy@mail.sysu.edu.cn
Telephone:13480268263

Members

No.NameE-MailEnglish Name
1雷东玮dongweilei@foxmail.comLei Dongwei
2范锡添fxt972858213@sohu.comFan Xitian
3江嘉文804702694@qq.comJiang Jiawen

Project Paper - view as Preliminary(2011/08/29), Final(2011/08/29), Draft, Latest

1. 设计概述 (Preliminary Paper)

(一)设计意图

        2010年被称为“3D消费元年”,各种3D消费电子产品层出不穷,并逐渐受到人们的青睐。而3D电视更是陆续走入普通家庭,为观众带来非凡的视觉体验。但是,由于昂贵的制作成本,3D片源非常缺乏,而2D片源仍然占据主流地位,这成为3D电视普及过程中尤其突出的问题。所以,为了暂时缓解3D片源缺乏的问题,2D转3D技术应运而生,并得到广泛的重视。基于以上背景,本作品打算采用Altera公司CycloneII系列的FPGA为核心,开发具有一定竞争力的2D转3D多媒体处理系统,实现多种功能的无缝切换,包括2D/3D视频播放,2D/3D图片浏览等。

        考虑到软硬件结合灵活强大的功能特性,本作品基于SOPC平台下进行设计,将计算量大、实时性高的功能单元交给硬件来实现,而CPU则可以用于人机交互以及实现实时性较低的功能。因此,系统中有关视频部分的功能实现,主要依赖FPGA丰富的可编程逻辑资源,由硬件来运算。而对于图片浏览等功能,实时性不高,则可以直接交给NiosII CPU进行处理。另外,NiosII还将用于人机交互。通过移植实时操作系统,NiosII可以实现多任务处理,并可引入图形用户界面,更好地完善系统功能和增加用户体验。这样,可以充分发挥硬件和软件各自的优势,大大提高了系统的运算处理能力。

        本作品采用DE2-70开发板,利用摄像头或便携式存储设备获取2D视频或图像进行处理,具备实用性强、应用广泛、可裁剪性高、维护容易等特点。

(二)适用范围

        本系统可以应用于数字电视、手机、平板电脑、数码相机等消费电子产品中,实现2D图像(或视频)到3D图像(或视频)的转换,从而有效解决3D片源不足的问题,并为家庭或个人带来立体图像的视觉享受。而且,由于灵活的可裁剪性,本系统还可以作为多媒体系统的开发平台,开发功能更强、适用范围更广的多媒体产品。

(三)选用Altera器件的原因

        我们选用Altera的DE2-70进行该系统的设计和构建。DE2-70提供的CycloneII2C70 FPGA芯片,具有多达68416个LEs,以及内嵌众多硬件乘法器等资源,完全满足我们系统的设计要求。DE2-70平台拥有丰富灵活的外围设备,提供视音频解码芯片,可外扩的摄像头、VGA接口以及大容量内存等多媒体资源,非常适合我们多媒体处理系统的构建。NiosII运算功能强大,可以进行很多复杂图像处理算法的软件实现。并且,DE2-70平台拥有数量庞大的用户群体,可以方便地通过网络等媒体进行设计的交流与共享。而Altera也提供了大量的教材和范例,非常适合学习使用,极大地提高了我们设计开发的效率。

(Revision: 3 / 2011-08-26 09:31:37)

2. 功能描述 (Final Project Paper)

图1 功能描述图

        我们作品的主要功能在于,通过一定的演算处理将视频和图片从2D转换成3D显示,这两项工作占用了我们绝大部分的设计开发时间。除此之外,我们还移植了图形界面和实时操作系统,逐渐形成一个扩展性强的多媒体开发平台。

        以我们的理解,2D转3D就是模拟人类两眼之间的视觉距离,把处于2D平面的元素重新组织,形成彼此合理的空间距离,制造出立体空间感觉的技术。普遍地,算法的基本思想都是通过提取出2D图像的depth cues,根据不同depth cues估计出图像中物体之间的前后关系、空间距离等,从而得到图像的depth map,然后利用DIBR(Depth Image Based Rendering)技术渲染出左右眼图像来合成立体图像。

        而我们的算法也是基于以上思想设计,并从算法的代价和可行性等方面进行优化改进,对视频和图片分别采用了不同的2D转3D算法实现。在众多的depth cues中,我们选择了模糊度作为估计深度的主要依据。

        (1)对于视频的2D转3D,由于实时性要求高,所以主要的模块均由硬件实现,并辅之以软件的运算处理。先用小波变换对图像分块进行模糊度的计算,同时软件执行颜色分割,把图像分割成3个区域。然后,比较3个区域模糊度的统计平均值,最大值的区域作为前景,次者作为中景,最小者为后景。利用DIBR技术把预设深度分配给3个区域,根据亮度规则和原始图像渲染出左眼图像。3个区域的深度均为可调,适用于一般的情况,但保持着这样的关系:前景的深度最小,中景的深度较大,后景的深度最大。最后,原始图像作为右眼图像,与左眼图像合成3D图像。我们选取原始图像作为右眼图像,是因为由相关的文献知道大部分人偏向于右眼,右眼所看到的图像比左眼所看到的图像更为重要。这样处理可以提高合成3D图像的质量。

        (2)而对于图片的2D转3D,主要由软件完成。先用小波变换得到图片整体的模糊度估计,接着经过松弛算法处理,使得前后景的模糊度信息差异更明显,从而较有效地提取出图片的前景和后景。利用DIBR技术对前景和后景分别赋以不同的预设深度值,则可渲染出左眼图像。最后,原始图像作为右眼图像,与左眼图像合成3D图像。

(Revision: 5 / 2011-08-26 16:10:05)

3. 性能参数 (Final Project Paper)

系统参数:

CPU频率:100MHz

VGA分辨率:640*480

3D景深调节范围:0~200pixels

3D图像显示方式:红蓝3D

系统资源占用情况:

图2系统资源占用情况

(Revision: 4 / 2011-08-26 16:14:06)

4. 设计结构 (Preliminary Paper)

        (一)硬件部分

        (1)整个系统的架构

图3系统架构图

        我们采用了软硬件协同设计的思想,系统中包括了纯硬件逻辑和SOPC系统两大部分。通过我们自己编写的一些接口模块,纯硬件逻辑可以跟SOPC系统进行通信,彼此交换数据。

        由CPU控制摄像头采集模块的启动和停止,采集到的图像缓存在SDRAM中。然后,2D转3D模块从SDRAM读取图像数据进行处理,处理后的数据作为左眼图像缓存在SDRAM中,而原始图像则作为右眼图像。接着,左右眼图像同时输出,经过合成后输出3D图像,在VGA显示器上显示。

        (2)SOPC系统的结构

图4SOPC系统结构图

        在SOPC系统中,我们善于利用了Pipeline Bridge的结构。通过Avalon-MM Pipeline Bridge,我们把系统划分为两部分:一部分是高速总线,挂载CPU和内存等需要频繁交换数据的IP;另一部分则是低速总线,用于挂载外设。

        在这里,高速总线和低速总线是相对的。由于各个IP都是分时复用总线,而CPU和内存等IP是需要频繁交换数据的,所以它们占用了总线大部分的频宽。而外设等IP不需要频繁交换数据,因此可将它们挂载到另一条总线上,两条总线通过Avalon-MM Pipeline Bridge桥接。如此设计,能够有效地提高系统的吞吐量,使得资源分布更为合理。

        (3)2D转3D结构框图

图5 2D转3D结构图

        在2D转3D中,我们利用了图像的模糊度来估计元素之间的前后关系。首先,小波变换提取图像的高频部分,然后对图像分块计算各宏块的模糊度,从而得到整张图像的模糊度估计。而颜色分割用于对图像进行分割区域,由于颜色分割采用了较复杂的算法,不利于硬件实现,所以我们用软件实现。

        由颜色分割得到图像的3个区域,比较各区域的模糊度,越模糊越靠后。接着,根据前面得到的各个区域的前后关系,由DIBR模块来为各个区域分配深度,从而渲染出左眼图像。

        (二)软件部分

        (1)图像2D转3D流程图

 图6 图像2D转3D流程图

        (2)颜色分割算法流程图

图7 颜色分割算法流程图

        (三)系统实物图

图8 系统实物图

(Revision: 3 / 2011-08-26 09:28:38)

5. 设计方法 (Final Project Paper)

        (1)图像的模糊度估计

        通常,图像各个部分的模糊度都是不一样的,前景往往比较清晰,而后景则比较模糊。下面图9是比较典型的一张图像,图像中的男子是前景,而树丛是后景。我们可以看到,作为前景的男子比作为后景的树丛清晰得多。因此,我们可以利用前后景之间模糊度信息的差异,把前后景分割开来。

图9聚焦图像

        在一幅图像中,高频部分是像素值变化较快的像素集合,而低频部分则是像素值变化较慢的像素集合。图像中的前景是比较清晰的,保留了较为完整的细节信息,所以包含大量的高频分量。相反,图像中的后景是比较模糊的,主要包含的是低频分量。通过测量图像的空间频率,我们可以估计出图像中各部分的模糊度。

        于是,我们采用小波变换来分析图像的空间域高频分量。如下图10所示,离散小波变换可以表示成由低通滤波器和高通滤波器组成的树状结构。通过小波变换,我们可以分离图像的高频分量和低频分量。

图10小波变换树

        下图11是二维小波变换的子带结果图。该图表示了4个子带,LL表示水平和竖直方向均为低通滤波的结果,HL表示竖直方向是高通滤波而水平方向是低通滤波的结果,LH表示竖直方向是低通滤波而水平方向是高通滤波的结果,HH表示水平和竖直方向均为高通滤波的结果。

图11二维小波变换分带输出

        HH子带的滤波结果中,非零系数的数目代表了高频分量的多少。因此,对图像执行二维小波变换,计算HH子带的滤波结果中非零系数的数目,即可估计图像的模糊度信息。由前面的分析可以知道,非零系数越多,模糊度越低。

        在本系统中,我们采用了简单高效的基于提升算法的5/3小波变换,其公式为:

        其中,x(n)表示图像灰度值,c(n)表示小波变换后的高频系数,d(n)表示小波变换后的低频系数,n是整数。

        在实际中,我们可以按照如下步骤进行模糊度的估计:

        Step1:用的卷积核来对原始图像进行空间滤波,滤波结果即为二维小波变换的HH子带;

        Step2:将滤波后的结果划分成多个8*8的宏块;

        Step3:统计每一个宏块中非零系数的数目,作为该宏块的模糊度。非零系数越多,模糊度越低。

        (2)颜色分割

        由于图像的每一个像素的模糊度都有可能不同,甚至相邻像素的模糊度发生突变,所以为了保持图像的一致性,避免渲染3D图像时可能产生的大量空洞,我们引入了颜色分割来对图像分割区域。

        在颜色分割中,需要进行颜色空间的转换,从RGB空间转换到YUV空间。而环境的光照强度是难以控制的因素,所以应该优先考虑U分量和V分量。在本设计中,我们利用K-means聚类算法对图像中每一个像素的V分量去分类,以达到颜色分割的目的。

        K-means聚类算法能将某个属性值相近的对象划分为一类。其工作过程可以描述如下:首先从N(N为图像像素总数)个数据对象中任意选择K(K为聚类数)个数据对象作为初始聚类中心,而对于剩下的数据对象,根据它们与这些聚类中心的相似度(用欧式距离来衡量),将它们分配给最相似的聚类;然后,重新计算每种聚类新的聚类中心,新的聚类中心是聚类所有数据对象的平均值。如此不断重复,直到每种聚类新的聚类中心与初始聚类中心相同,聚类就结束。在实际中,只需要每种聚类新的聚类中心与初始聚类中心相差一个很小的值,就可以认为聚类结束。

        (3)模糊度松弛

        松弛算法是一种应用于边缘检测的算法,我们将其引入来对图像的模糊度信息进行处理。经过松弛算法处理后,图像的模糊度信息将会更加明显,便于我们将前后景分割开来。

        松弛算法的步骤如下:

        Step1:将图像划分为多个8*8宏块;

        Step2:计算当前宏块的模糊度,作为该宏块的信度c(k)(e);

        Step3:计算相邻8个宏块的平均信度,即平均模糊度caver(k)(e);

        Step4:由c(k)(e)和caver(k)(e),更新当前宏块的信度为c(k+1)(e)。更新过程如下:若平均信度caver(k)(e)大于预设阈值Threshold,则c(k+1)(e)=c(k)(e)+q;否则,有c(k+1)(e)=c(k)(e)-q(其中q为常量);

        Step5:重复10次Step3和Step4,算法结束。

        (4)亮度规则

        在渲染出左眼图像的时候,我们采用了自己设计的亮度规则。分析大量的红蓝3D图像可以知道,红蓝3D图像的出屏和入屏与周围环境的亮度有关。当周围环境亮度较高时,红色分量在青色分量左边会造成出屏效果,否则为入屏效果;当周围环境亮度较低时,红色分量在青色分量左边会造成入屏效果,否则为出屏效果。

        而在本系统中,我们希望3D图像的前景有出屏效果,而中景和后景有不同程度的入屏效果。所以,我们采取了如下办法:

        首先,判断当前像素是属于前景,中景还是后景。然后,判断当前像素的周围环境的明暗程度。分开3种情况讨论:

        1、如果当前像素属于前景,当周围环境较亮时,根据预设深度把当前像素移动到右眼图像对应像素的左边;当周围环境较暗时,根据预设深度把当前像素移动到右眼图像对应像素的右边。

        2、如果当前像素属于中景,当周围环境较亮时,根据预设深度把当前像素移动到右眼图像对应像素的右边;当周围环境较暗时,根据预设深度把当前像素移动到右眼图像对应像素的左边。

        3、如果当前像素属于后景,当周围环境较亮时,根据预设深度把当前像素移动到右眼图像对应像素的右边;当周围环境较暗时,根据预设深度把当前像素移动到右眼图像对应像素的左边。

        用下述方法判断当前像素的周围环境的明暗程度:计算图像中每一个像素3*3邻域的亮度平均值,若亮度平均值大于亮度最大值的一半,则认为当前像素的周围环境较亮;否则,认为当前像素的周围环境较暗。对于部分邻域像素超出图像边界的问题,可以采用边界扩展的方法去解决。

        (5)算法的仿真测试

        1、视频2D转3D算法仿真

        在硬件实现之前,我们都采用Matlab来对算法仿真测试。Matlab提供的图像处理工具包,使测试变得简单可行。测试选择的是前后景较为明显的图像,如下图12所示:

图12原始图像

        经过小波变换后,提取图像的高频部分,然后把图像分成8*8宏块,统计各宏块非零系数的数目作为该宏块的模糊度。非零系数越多,模糊度越低。整张图像的模糊度估计如下图13:

图13模糊度估计图

        可以看到,这种方法较好地表明了图像中元素的前后关系。可以此为依据,对图像的元素归类。

        同时,我们采用颜色分割的方法去分割图像区域,分成3类,分类效果如下图14:

图14颜色分割图

        同样,分割的效果令人较为满意。当然,不排除有部分像素分类错误,但这不影响最终的3D效果。

        最后,经过合成的红蓝3D图像:

图15红蓝3D图

        戴上红蓝滤色眼镜后,我们能够较为明显地看到图像的景深,具有较强的立体空间感。

        2、图片2D转3D的算法仿真

        对图片的2D转3D,我们也是采用上面的图片来进行仿真。首先,运用了小波变换来估计图像的模糊度。所以,模糊度图如图13所示。接着,对图像的模糊度信息执行松弛算法,松弛后的效果如下图16:

图16松弛后的模糊度估计图

        可以看到,松弛会使图像的模糊度信息区分得更加明显。于是,我们想到用阈值化的方式来把较为明显的前景提取出来。执行阈值化后如下图17:

图17二值掩膜

        上图17是一个二值图像,前景为1,后景为0。最后,我们就利用此掩膜把图像中的前景提取出来。

图18图像前景

        可以看到,尽管提取的前景中包含了一部分空洞,但是整体效果不错。

        把图像分割成前景和后景,然后对前景赋予较小的深度,后景赋予较大的深度,则可渲染出3D图像,如下图19所示:

图19红蓝3D图

        (6)软硬件协同设计

        SOPC的最大特点就是它的可编程性,可配置性。Altera提供的SOPC Builder是一个非常强大实用的工具,只需几个步骤就能将自定义IP挂载到总线上,界面友好,方便易用。而且,在SOPC Builder中,Altera已经提供了很多常用的IP,高度可配置,使得我们构建系统更加灵活,真的是"From concept to system in minutes"。

图20SOPC系统界面

        1、软硬件协调

        本系统充分发挥软硬件各自的优势,在视频的2D转3D中,把颜色分割的算法用软件去实现,其余都由硬件实现。颜色分割把结果存放在SSRAM中,供硬件使用。

        首先,CPU要得到硬件端采集到的图像去执行颜色分割处理,于是我们编写了一个接口模块,一边的端口与硬件逻辑相连,另一边的端口则是Avalon总线协议的标准端口。这个接口模块负责把硬件采集到的图像以Avalon的协议写到SOPC系统的存储器中,那么CPU则可从存储器中获得图像数据。由于两边的数据速率不一致,所以接口模块用了一个FIFO对数据缓冲同步。而硬件要得到颜色分割的结果,则必须遵循Avalon总线协议去与SSRAM通信,所以我们也同样编写了一个相似的接口模块,负责读取SSRAM的颜色分割结果到硬件端。在系统的多个地方,都可以看到我们这样的自定义接口模块。

        下图21,是我们的自定义接口模块的RTL视图。

图21自定义接口模块的RTL视图

        在软硬件协同中,我们通过一个Buffer来把软件和硬件分离,却又联系在一起。软件运算出来的结果存放在Buffer中,接着硬件自发性地去读取。

图22自定义IP

        这样做的好处是,使得软件和硬件之间的协调工作变得容易。

        2、硬件加速

        在最初设计的SOPC系统中,所有的软件运算均由运行在100MHz的NIOS2完成。由于颜色分割和前后景提取的算法中涉及大量的浮点数运算,即使用了fast类型的NIOS2,而且加大了CPU的指令缓存和数据缓存,还是未能满足我们的设计要求。特别是执行颜色分割的程序,很长时间才能得到分割结果。

        于是,我们想到了Altera提供的强大硬件加速功能。在自定义指令、自定义外设和C2H三种方案中,考虑到实现调试难易程度和性能的提升比例,我们选择了使用自定义指令和C2H。在软件代码中,重复循环是非常耗时的运算。而C2H对重复循环运算有很大的性能提升,所以我们将软件程序中很多的重复循环运算用了C2H的加速方案。另外,浮点数运算也会消耗CPU较长的时间。因此,我们采用了自定义指令的加速方案。

        采用了以上的加速方案后,软件的运行速度得到了非常大的提高,满足了我们的设计要求。

        (7)移植UCGUI图形界面

        为了提供友好的人机界面,我们在作品中移植了UCGUI图形界面系统。UCGUI是一种专门为嵌入式应用而设计的开源图形支持系统,适用于任何带标准编译器的8/16/32位CPU,并能在单任务或多任务环境中完美运行。而且,它占用的资源较少,非常适合于我们构建经济实用的嵌入式系统。

        移植UCGUI,需要修改GUIConf.h,GUITouchConf.h和LCDConf.h三个文件,以适应我们的硬件平台。GUIConf.h文件定义了UCGUI的系统参数,如是否支持操作系统,缓冲区大小等。GUITouchConf.h文件则定义了触摸屏的参数,本系统不支持触摸操作,所以可不必理会。而LCDConf.h文件则是移植过程的难点,它定义了液晶屏的硬件配置参数,如色深,分辨率等。本系统采用了888的RGB格式,分辨率为640*480。图形界面直接显示在VGA显示器上,所以我们编写了VGA硬件控制器来对显示器进行控制,并添加了相应的驱动文件支持。

        (8)移植UC/OS2实时操作系统

        UC/OS2是一种可移植的,可植入ROM的,可裁剪的,抢占式的实时多任务操作系统内核。它具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。由于UC/OS2众多的优势,而且提供源代码,便于我们学习使用。于是我们选择了UC/OS2去扩展系统的性能,提高系统的执行效率。更为欣喜的是,Altera公司已经把UC/OS2移植到NIOS2上,我们可以直接使用。

(Revision: 2 / 2011-08-26 08:54:54)

6. 设计特点 (Preliminary Paper)

  1. 本作品通过2D转3D技术,将2D影像转换为3D影像,并可在2D/3D影像和动态/静态之间进行切换,实用性非常强,具有广阔的应用前景。
  2. 本作品提供图形用户界面,用户可以在可视化的界面中对系统进行多种模式的设置,灵活方便。
  3. 本作品移植实时操作系统到NiosII,可进行多任务处理,例如可将系统分为前后台,为系统的功能扩展和后续开发做准备。  
  4. 本作品利用SOPC进行设计,合理分配软硬件资源,极大提高了系统的运算处理能力。
  5. 本作品提供2D转3D的单芯片多媒体处理方案,实现高度集成的片上系统。
(Revision: 2 / 2011-08-26 09:36:06)

7. 总结 (Final Project Paper)

        通过近4个月的学习与探索,我们终于设计完成了“基于SOPC的2D转3D多媒体处理系统”,并达到了预期的效果。

        首先,通过学习Altera公司详细的文档和Terasic公司的例程,我们充分利用了DE2-70开发板上的资源,实现了一个集成UC/OS2操作系统和UCGUI图形界面的多媒体处理系统。该系统具有友好的用户界面,允许用户自由选择切换3D视频播放、3D图片浏览以及2D视频播放和2D图片浏览这几种功能,具有极高的用户体验度。

        其次,系统搭建时软硬件所实现功能的合理安排,使得在外围资源紧缺的情况下,仍能够顺利实现复杂且计算量大的算法,并取得令人满意的效果。

        另外,作为刚刚修完大三课程的学生,这次的比赛大大锻炼了我们的动手能力和思考能力,同时提高了团队成员间的合作水平,让我们深刻理解了FPGA项目开发的各个过程。通过充分的可行性研究、严谨的项目计划、合理的进度安排和高效的团队合作,我们解决了各方面的困难,圆满地完成了作品。这给我们每一个人都留下了一段难忘的经历和一笔宝贵的财富,相信这次比赛会对以后我们参加相关科研项目起着非常大的积极作用。

        由于时间仓促和资源有限,系统尚有些不令人满意的地方。我们计划对2D转3D的算法进行进一步的完善,并实现主动快门式3D等功能。

(Draft / 2011-08-26 09:06:25)