附件-软件著作权说明书_第1页
附件-软件著作权说明书_第2页
附件-软件著作权说明书_第3页
附件-软件著作权说明书_第4页
附件-软件著作权说明书_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、简 1.1开发背 1.2系统总体设 显著性特征区域检 1.2.2实时适 详细功 菜单 公共 ..............................................................................................图像面 状态 开发环 硬件配 可编程图形处理器 环 二 图像适配的流 图像适配的一般过程如图2-1所示 动漫适配的过 基于全局对比度的显著性区域检 基于直方图的对比 基于区域的对比 基于网格变形的适配方 基于非均匀缩放优化的变形模 三角网格结构拓 三 算 目标网格中边的理想长度计 实际变换矩阵计 线性系统求 纹 四、结果展 Salient选区操 动 网格变形效 重要内容轮廓清晰且背景不复 重要内容轮廓不清晰且与背景融 重要内容轮廓清晰且但背景比较复 1.1开发背

动漫是动画和漫画的合称。动画(animation或anime)或者卡(cartoon)所指的是由许多帧的画面连续时的过程。漫(comics或manga)一词在中文中有两种意思。一种是指笔触简练,用分镜式手法来表达一个完整故事的多幅绘画作品。“动漫”中的漫画,一般均指后者。随着大众文艺日趋多元化以及数码特效技术的不断创新,以漫画、卡通、动漫、以及多内容产品为代动漫产业得到了蓬勃发展,其中动漫以其便捷随身、直接互动,受众基础雄厚等优势成为3G时代动漫产业中一个极具潜力的增长点。然而,在其发展过程中也着诸多,其中最主要的一个在于移适配成本,另一方面极容易导致用户体验不随着移动电子设备的蓬勃发展,如何在这些分辨率、尺寸、大都面向自然,甚少见到专门针对动漫素材适配的方法。虽然这然的动漫场景。事实上动漫是一类比较特殊的,具有很强的矢量特点,的是由一些特征线条来刻画的物体和场景,而动漫的是由特征线条来刻画,这类方法无法适用如图1-上,然而其本质上仍然是一种基于像素的方法因此需要一种基于几何的动漫重要性度量新方法;其次,动漫的动漫(a),然而并不适用于一些矢量特征比较明显的动漫(b1-2所示,在动漫中很多时候会采用若干条线条来刻画物体某个图1-2.艺术家常常会采用多条线条来表示物体的局部特征或到某种表意效以达到更好的表意效果,然而,当把适配到较小的移动终端体效果,因此在适配时就需要对这些线条进行合并,即定义一个针是可以在PC端生成结果再传回给用户的终端设备,然而这样做1送的,考虑到动漫市场本身的庞大,需要的服务器的数量无疑是非常可观的2由于每次传送时需要通过服务器,这也增度有效地控制适配过程,减少重要内容的。能分析动漫中特最后,做到在移动终端上高效的实现上述的适配算法以满互乃至1.2系统总体设1、自动检测显著性特征区2、手动选取显著性特征区3、显著性特征图功c、导入显著性特征1.2.2实时适1、生成三角网2、显示/隐藏三角网3、显示/隐藏显著性9性9性格详细功板区、状态栏和主画布。各大模块的大概布局设计如图1-4所示:1-4.总体界面布局设下面将分别详细说明这五大块里的各种菜单1-6菜单栏文件1-7文件菜单文件菜单栏主要有以下功能打开:打开本地。保存:保存编辑好的另存为:如果未保存,则直接保存,否则另外保关闭:关闭当前窗口,如果未保存则提示保存,否则直接闭视图1-8视图菜单:控制的显示。状态栏:控制状态栏的显示窗口新建窗口:创建新的窗口以加载。排列:窗口以排列方式显示显著性区域选择1-10显著性区域选择菜单椭圆工具:创建椭圆显著性选显示Salient:显示Salient保存Salience:将用户制作的Salient保存至本地。加载Salience:从本地加载Salient。清空Salience:清空Salient选区,以便重新选择显示1-11菜单显示原图:仅显示原始显示Canny边缘曲线:显示Canny边缘线条。显示Canny边缘点:显示Canny线条的稀疏点。显示全部网格:显示的整体网格。适配1-12菜单适配菜单栏主要有以下功能网格计算:计算整张的三角形网格。公共公共栏在菜单栏下,放置一些常规工具和状态选择按钮1-13公共栏主要操作包括撤销:撤销当前操作放大:放大当前窗口内的。缩小:缩小当前窗口内的参数显示工具:同1.3.1.5介绍的显示工具,提供快捷方式通过输入百分比或者像素大小等参数,进行的缩放通过直线或者曲线工具对区域进行调整控制一系列图像的显操作都是针对画布上的线条或的。1-14图像面板区1-15像适配操作状态状态栏位于界面底部,显示当前的一些状态信息1-16状态栏状态栏主要包括:当前操作状态以及操作对象信开发环CPU:InCorei5-3330SRAM:8.00GGPU:NVIDIAGeForceGT可编程图形处理器图Uni(GPU处理单元,通常也称之为可编程图形硬件(图7GPU概念在20世纪70年代末和80年代初被提出,使用单片集成电路(monolithic)作为图形,此时的GPU已经被用于和动画方面,它能够很快地进行几张的(仅限于此)2080年代末90年代初这段时间内,基于数字信号处理(digitalsignalprocessorchip)的GPU被研发出来,与在1991年,S3Graphics公司研制出第一个单2D加速器,到了1995年,主流的PC图形厂商都在自己的上增加了对2D的支持。与此同时,固定功能的视窗出PC市场。1998年NVIDIA公司宣布modernGPU的研发成功,标志着GPU研发的历史性突破成为现实。通常2070年代末到1998年的这一段时间pre-GPU时期,而自1998年往后的GPU称之为modernGPU。在pre-GPU时期,一些图形厂价格也是非常的高modernGPU使用晶体管(transistors)进行计算,在微In在2.4GHz的PentiumIV上使用5千5百万(55million)个晶体管;而NVIDIA在GeForceFXGPU上使用超过1亿2千5百万(125million)个晶体管,在NVIDDIA7800GXT上的晶体管达到3亿2百万(302million)个。回顾ModernGPU的发展历史,自1998年后可以分为4个阶段。NVIDIA于1998年宣布ModernGPU研发成功,这标志着第一代ModernGPU的诞生,第一代ModernGPU包括 2TI的Rage和3Dfx的Voodoo3。这些GPU可从1999到2000年,是第二代modernGPU的发展时期。这一时期的GPU可以进行三维坐标转换和光照计算(3DObjectTransformationandLighting,T&LOpenGLDirectX7都的操作也扩展到了立方体纹理(cubemap。NVIDIA的GeForce256,GeForceMAX,ATI的Radeon7500等都是在这一阶段研发的2001年是第三代modernGPU的发展时期,这一时期研发的GPUvertexprogrammability(顶点编程能力GeForce3,GeForce4Ti,ATI的8500等。这GPU允许应用程序指定一个序列的指令进行顶点操作控制(GPU编程的这同样是一个具有开创意义的时期,这一时期确立GPU编程思想一直延续到2009年的今天,不但深入到工程领域帮助改善人类日常生活(医疗、地质勘探、、等而且开创或延伸了计算机科同时,Direct8和OpenGL都本着与时俱进的精神,提供了支持vertexprogrammability的扩展。不过,这一GPU还不支持,在第四代modernGPU时期,迎来同时支持vertexprogrammabilityfragmentprogrammability的GPU。第四代modernGPU的发展时期从2002年末到2003年。NVIDIA的GeForceFXATIRadeon9700同时在市场的舞台上闪亮登场,这两种GPU都支持vertexprogrammability和fragmentprogrammabilityDirectXOpenGL也扩展了自身API,用以支持vertexprogrammability和fragmentprogrammability。自2003年起,可编程图形硬件正式诞生,并且由于DirectX和OpenGL锲而不舍的追赶潮流,导致基于图形硬件的编程技术,简称GPU编程,也诞生。恭喜GeForce和ATI的硬件研发DirectX和OpenGL的研发,也可以休息下了,不用斗vertexprogrammabilityfragmentIEEE324元向量,4具有高带宽的内存传输能力(>27.1GB/s支持绘制到纹理功能(Rendertoexture,TTGPUVS上节阐述GPU的发展历史,那么为CPU之外要发展GPU?GPU的vertexprogrammability和fragmentprogrammability究竟在何处有着怎样的优1-5GPUCPU在结构上理。CPU执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行(请回忆OS上的时间片轮转算法,而GPU具有多个处理器核,在一个时刻可以并行处理多个数据1-5GPUCPU的不GPU采用流式并行计算模式,可对每个数据进行独立的并行计其它同类型数据,例如,计算一个顶点的世界位置坐标,不依赖1-62D图像上每个像素点的颜色值CPU上运算的C++GPU上,则只需图1-6CPUGPU的不同编可能有人会问道:既然GPU在数据处理速度方面远胜CPU,什么不用GPU完全取代CPU呢?因为GPU在许多方面与CPU相到实现(CPU上则可以方便的实现个典型的例子是射线的ps_4_0之前的profile版本都不支持或不完全支持循环控制流语(目前在软硬件方面都已得到改进。由GPU编程完全依赖于图电脑的使用在4-6年,所以在2012之后,旧式显卡的更新换代会基本结束这也制约了GPU编程技术的使用。最后GPU编程必须掌握计算机图像学相关知识,以及图程的资料较为匮乏,这些都导致了学习的难度。在早期,GPU编language的兴起,在GPU上编程已经容易多了。环JDK(JavaDevelopmentKit,Java开发包,Java开发工具)是一个写Java的运行环境还有开发者编译,调试和运Java语言写applet和JDK(JavaDevelopmentKit)SunMicrosystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的JavaSDK(Softwaredevelopmentkit。·javac编译器,将源程序转成字节–·javadoc–文档,从源码注释中提取文·jdb–debugger,查及给开发员使用的补充库,如的库、IDL库。JDK中还包括各种例子程序,用以展示JavaAPI中的各部分。各部分代码之间的关系,有利于理解Java面象的设计思想。JDK的另一个显著特点是随Java(J2EE、J2SEJ2ME)版本的升级用开发非常,不能进行复杂的Java开发,也不利于团体协JDK一般有三种版SE(J2SE),standardedition,标准版,是通常用的一个版本EE(J2EE),enterpsiseedtion,企业版,使用这种JDK开发J2EE应用ME(J2ME),microedtion,主要用于移动设备、设备上的管许多编程已经使用第的开发工具,但JDK仍被当作JavaJDK由一个标准类库和一组建立,测试及建立Java实用程序组成。其JavaAPI是一些预定义的类库,开发需要用这些类来Java语言的功能。JavaAPI包括一些重要的语言结构以及基本图形,网络和文I/O。一般来说,JavaAPII/O部分对于运行作为JDK实用程序,工具库中有七种主要程序Javac:Java编译器,将Java源代码转换成字节ava:Java解释器,直接从类文件执行Java应用程序字节代appletviewer:小程序浏览器,一种执HTML文件上的Java小程序的Java浏览器。Javadoc:根据Java源码及说明语句生成HTML文档。Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。调用的C过程的头Javap:Java反汇编器,显示编译类文件中的可功能和数据,建立,现在是由WillowGarage提供支持。OpenCV是一个基于BSDLinux、AndroidMacOS操作系统上。它是轻量级的并且高效的,是由一C函数以及少量C++类构成,并同时提Python、、Ruby等语言的接口,实现图像处理及计算机视觉方面很多的通用算法,而不依赖于其他外部库。OpenCV致力于真实世界的实可以通过In 的IPP的高性能多函数库来得到更高的处理速OpenCV的主要应用领域包括物体识别、人机互动、人脸识别、1、图像数据操作,例如内存分配与、图像、设定和转换等2、图像或的输入输出,支持文件或头的输入,图像或式近、狄劳尼三角化、椭圆拟合等。7、头定标,主要包括寻为了便于管理和扩充OpenCV整个库,整个库被分成几个,结构分析、运动分析与对象、照相机定标、模式识别和三维重建等相关函数。2、cvaux-辅助函数库,主要提供匹配、3D等 时包括出错处理的一些基本函数。4、highGUI-GUI函数库,提供一些OpenCV的显著特点是跨平台、免费、开源、代码优化、速度快、OpenGL英文全称为OpenGraphicLibrary是一个开放性的图形库。它SGI公司为其图形工作站开IRIS演变而来的,是图形硬件的一种接口。该接口中包含超过700个函数,这些函数可型的独立于硬件的接口,OpenGL并未包含用于执行窗口任务或者用来控制OpenGL应用程序所使用的特定硬件。另外,OpenGL值提供同时,OpenGL也是一个状态机,它者很多的状态变量,它阶段叫做OpenGL渲染1-7显示了这些顺序,但是没有严格规定OpenGL必须采用这样的实现,它提供了一个可靠的指南,可以细的介绍可参考《OpenGL编程指南》。1-7OpenGL渲染二、动漫适配的过如图2-2所示。首先从内存中导入一张动漫,如(a)所示。然后会就原图(a)进行canny轮廓检测,生成一张canny检测图,如(b)(b)中白色的线条即为就原图(a)检测出来的物体轮廓线。canny轮廓线、边界线以及其他可人为添加的接着可对原图(a)进行显著性特征区域的检测,生成一张saliency,如(c)所示。saliency图中白色部分标记为显著性区域,黑色部分标记为非显著性区域。当所有信息都准备好了以后,会根据,著性的三角形。这时可以对调整大小,得到调整后的,如(e)所示。最后将还原成图(f图中重要物体都得到了很 图2- 图像适配过程基于全局对比度的显著性区域检显著性源于视觉的独特性、不可性、稀缺性以及奇异性,而学科研究出来的,与感知和处理视觉刺激密切相关。人类注意力比度的显著性区域检测方法来实现动漫的显著性区域检测。视力观察的基础上,应用了一种直方图对比度方法(HistogramContrast,HC)来为用输入图像颜色统计特征的图像像素定素的色差来定义的。比如I中的像素Ik的显著值被定义如下:其中D(Ik,Ii)是空间L*a*b中的IkIi之间的颜色距离度量。方程1经过扩展像素等级得到以下形式,其中N是图像I中的像素数量。很容易察觉在这种定义之下,由此,从具有相同cj的像素被组合在一起的角度重新整理方程2,其中,cl是像素Ik中的颜色值,n是不同像素颜色的数fj是图像I中像素颜cj出现的频率。需要注意的是,为了避免显著区域意味着如O(n2)≤O(N),那么计算效率可以被提高O(N)。因此,了2563种可能的颜色,这比图像的像素数量要多的多。这就讲颜色的数量减小到123=1728。考虑到自然图像中的颜色仅颜色覆盖图像像素不低95%的颜色,最终达n=85个颜色。中最邻近的颜色替代。图2-3中为典型的量化样例。图2-3输入图像(左,计算出图像的颜色直方图(中。直方仅仅使用43直方图bin彩并且依然保留了显著性检测所需的值,用相似颜色的显著值平均来代替每个颜色(以L*a*b*距离所用的方法选择m=n/4个最近的颜色作为代表来改善颜色c的显著值,如下其中 是颜色c和它的m个最近的颜色ci之 。值得注意一下,这里使用一个线性变化的平滑权值(TD(c,ci))来为颜色2-4颜色空间平滑前(左)、后(右)每种颜色的显著性值(归为123种不同的颜色,所用的方法同样12RGB颜色空间中进行的,但是为了与人类感知更加符合,在L*a*b*的颜L*a*b*的颜色空间L*∈[0,100],*,b*∈[127,27]*RGB颜色空间中量化,而在L*a*b*的颜色空间中测量距离,可以得到最好的结果,然而,无论单独在RGB颜色空间或单独在L*a*b*颜色空间中同时进展量化到。2-5通过FelzenszwalbHuttenlocher割方法产生的图像来很耗时,这里将采用了一个对比度分析方法:区域对比度(RegionRC当中,首先把输入图像分割成数个目标区域,然后计算区域等级由稀疏直方图对比得到区域3个区域k,通过测量其与图像中的其他区域的颜色对比度来计算它的其中w(ri)是区域ri的权值,Dr(rk,ri)是两个区域间的颜色距离度量。这里使用ri中的像素数目w(ri)来强调与更大区域的颜色对比度。区域r1和r2之间的颜色距离被定义如下:其中fcki)是第i个颜色ck,i在第k个区域rk中的所有的nk个颜作为这个颜色的权值,来的反映这个颜色与主要颜色之间的差稀疏直方图表示法来高效的和计算。空间的区域对比对于任何区域rk,基于空间区域对比度的显著性是这样定义的其中,Ds(rk,ri)是区rk和区域ri之间的空间距离,σs控制空间权值的强度。越大的σs值越能减少空间权值的影响,使得较远的区控制网格的变形技术、骨架驱动变形技术、基于网格曲面的变形动漫适配中所采用的网格变形技术——非均匀缩放优进行网格变形。因为构造的三角网格中包含原图像的显著性信为了完成在问题描述中所说的从源网Mp到目标Mq的变缩放变换能希望在变形的过程中尽量地保证显著性区域的比不的,所以希望网格中的三角形在沿着x轴和yp∈p沿x和y子x和y,可以得到一个放缩矩阵,记作然而,事实上网格中的每个三角形tp∈Mp所做的是一个tp到tq的仿射变换。每个仿射变换的线性部分(即旋转和缩放)都可以用一2X2的雅各比矩阵来表示。而这些雅各比矩阵对于每个们的值取决于变形后的网格Mq。特别地,Jt(q)与三角形tq中的所其中At为三角形tp的面积,ll.llF表示Frobenius范数虽然有很多种矩阵范数供选择,但是这里采Frobenius范对能量方程的极小值进行求解。另外,Frobenius范数还可以确保根据Pinkall和Polthier等人的结果,公式(8)所表示的缩放变换能量可以写成显示形式:(9)其中,θit是三角形t中与边(pit,pi+1t)相对的角,如图2-所示图2-6参数化网格中三角形之间的变近于非均匀放缩Gt,也就是使得所有三角形都趋于进行没有旋转们希望在网格放缩变换的过程当中相邻三角形的非均匀放缩矩阵尽可能地接近,即保证三角形朝向的一致,如2-7所示,这样得到的其中𝐴𝑠𝑡=(𝐴𝑠−𝐴𝑡2𝜎𝑠𝑡=(𝜎𝑠−𝜎𝑡

分能量𝐸𝑠和𝐸𝑚是关于目标网格坐标顶q={𝑞𝑣,𝑣∈𝑉}和三角形非均匀放缩矩阵G={𝐺𝑡,𝑡∈𝑇}的二次型函数。这样不同的网格变形问题实际上可标q感,而G只是作为一个辅助的变量。在目标中保持c的几何特性不发生改变,即保证结果图中c的形状,由此三个连成的两条边的关系可以表示 其中𝑟𝑖是(Cpi,Cp)和(Cp ,Cp 夹角𝜃𝑖均等于0 2-8特征曲线中的边角关显著度约所以在这里专门设计了一个针对重要三角形进行均匀放缩变换边界约一点,就有两种类型的边界约束需要考虑i如果pi在左边界上,则qx=0。ii如果pi在右边界上,则qx=width-1,其中width是目标图像的宽度iii如果pi在下边界上,则qy=0。iit如果pi在左边界和右边界上,则sy=sy。tt如果pi在上边界和下边界上,则sx=sxt因此,网格变形的总能量可以通过上述的三个能量求和到其中μ和λ是用户自定义的权通过上文的描述可以容易的看出总的网格变形能量方程是知向量z。这样(13)中总的能量方程就可以被简写为:其中C是一个从(13)中分离出来的一个已知的稀疏矩阵因此,的最终目的:最小化控制网格变形的能量方程(14)可以通过求解一个稀疏线性系统来得到。参数方Cholesky分解是以忽略不计,所以算法的总体执行效率还是比较高的1、拓网格是封闭的网格中没有复杂边和孤立点,复杂边和孤立点如图2-9此的网格结构只需要支持单纯的三角形网格而不需要支持多边图2-9非流形网格中的孤立点(左)和复杂边(右2、算可以网格中任意一个顶点、边和面可以通过一条给定的边,该边所在的面。因为的可以通过给定的边,该边的起始顶点或终止顶点给定一个顶点,通过该顶点至少可以以它为起可供选择,即翼边结构、四方边缘结构半边结构。2-10翼边结构(左)四方边缘结构(右针)连成每一个面和边界,如图2-11所示。对于每一个半边数据结构来说,至少需要以下几个数据成半边的起始它所在面或边界上的下一条边(程序中为逆时针方向它的终止点的面,不进行半边取反,就可以得到该面的三个顶点。因此,三、算目标网格中边的理想长度计需要在x和y轴方向独立地求解目标网格𝑀q中每一条边相对于原网格𝑀p中边的缩放比例。以x轴方向为例,为求解该方向上3-1缩放比例的源图像和目标图像的分辨率分别记作𝑤𝑝×𝑤𝑝和𝑤𝑞×𝑤𝑞。这对于𝑀p中的顶点pi=(pix,piy)Ti=1·,n,如pi为于3-1中的最上那么其缩放比例还与重要物体的缩放比例有关。假设直线y=yt(3-其中,Z𝑂𝑝𝑗是𝑂𝑝𝑗的缩放因子,如图3-1(a)中的网格所示。𝑝𝑖=(x,yt)在红色的矩形当中,那么𝑙𝑂𝑝1=𝑙𝑂𝑝2=0;如Pi在蓝色或者绿色的矩形中0𝑙𝑂𝑝1=0而𝑙𝑂𝑝2>0;否则𝑙𝑂𝑝1和𝑙𝑂𝑝20。同理,可以计算出顶点𝑝𝑖在y轴方向上的虚拟缩放比例。进而每条e(pi,pj)的缩放比例通过求取x和y方向上的出点𝑝𝑖和入点𝑝j缩放比例因子的均值得到。具体算法如下所m_tmTriMesh:Mesh数据类型,用来存放原网格𝑀p的结构p,q:Point数据类型,用来存放线段的两个端点bLineParYAxis:boolean数据类型,标示求取缩放比例的方向ratio:double数据类型,存放顶点的虚拟缩放比得到m_tmTriMesh与线段(p,q)相交面的集合分别计算出原图像和目标图像在x或y方向上的长for(fList中的每个面{if(f中有孤立点)continue;if(f是重要三角形)找到f中的三个顶线段s为三角形(a,b,c)与线段(p,q)相交所得到的线段if(s存在){dLengthRe-}}returnratio;假设𝑠𝑥𝑖𝑗和𝑠𝑦𝑖𝑗分别为原网格𝑀𝑝中的边e(𝑝𝑖𝑝𝑗)x和y方向上么目标网格𝑀𝑞中边e(𝑞𝑖,𝑞𝑗)的合理长度如下:(3-具体算法如下算法3-2计算目标网格中边的理想长m_tmTriMesh:Mesh数据类型,用来存放原网格Mp的结3-1计算顶点v在x和y方向上的缩for(m_tmTriMesh中的每一条边{向量vEdge←e的出点-e的入点计算e的出点和入点序号nVer0和nVer1doubledX_ratio←(nVer0x方向缩放比例nVer1在x方向缩doubledY_ratio←(nVer0y方向缩放比例nVer1在y方向放比例}的初始化顶点坐标qi=(qix,qiy)Ti1·,n也可以很容易的计算得到。实际变换矩阵变换矩阵,即文提到的雅各比矩阵𝐽𝑡(q)。对于重要三角形∈𝑇∗,它的实际变换矩阵可以很容易地求解出来。具体算法如下算法3-3重要三角形实际变换矩阵计m_tmTriMesh:Mesh数据类型,用来存放原网格Mp的结beta:double数据类型,存放用户设定的参for(m_tmTriMesh中的每一个面{获取原图像长度和宽度}return以通过使得‖𝐽−𝐺‖F2最小得到,即使得如下公式最小:(3-由GowerJ等人[33]的Procrustes分析可知,这一问题可以转换为对雅各比矩阵𝐽𝑡(q)进行SVD分解(sigularvalue position,即奇异值分解)得到。其中𝐽𝑡(q)的SVD分解可以表示如下:(3-其中,U是一个正交变换,Σ为一个伸缩变换,𝑉𝑇是另外一个正交变换。公式3-4还可以被进一步展开如下:(3-如图3-2所示,正交变换𝑉𝑇会将参数域上面的两个正交向量𝑉1和𝑉2转换为正交的单位向量𝑙𝑢=(1,0)和𝑙𝑣=(0,1);Σ变换则将这两个向会将两个向量为曲面的切平面𝑇𝑝上的𝑈1和𝑈2两个向量。因此我3-2雅各比矩阵的SVD根据曲面的几何性质可以知道,曲面上的变形主要分为三类。一类是保角的变形(以下简记为ASAP),即在后的角度上3-3所示3-3三类变形的效果图。其中(a)为原三角形,(b)中的黑色三角形为目标三角形,红色三角形为ASAP效果,蓝色三角形为AAAP效果,绿色三角形为ARAP效果小均为1。那么为使公式3-3最小的Gt可以表示如下:(3-即Gt值为雅各比矩阵𝐽𝑡(q)的旋转分量,公式表达如下:(3-其中,要求𝑈V𝑇的行列式为正。具体算法如下算法3-4非重要三角形实际变换矩阵m_vGList:ArrayList<Mat_DP>数据类型,存放重要三角形的换矩if(mL行列式不为正{}线性系统求当Gt已知时,网格变形能量E是关于𝐪𝐢的线性最小二乘问题。(3-其中t(i,j)是包含半边(i,j)的三角形,he={(i,j)}是所有半边的集合,θij是三角形t(i,j)中与半边(i,j)所对应的角,如图3-4所示。(3-3-5所示。具体算法流程如下Step4:对step3中构造的稀疏线性系统进行求解,得到最终的目纹理对于给定的两个三角形列表,每个列表中各有l个三角形,记𝑃𝑖𝑗,i=1,2,j=0,…,l-1。首先需要计算中间三角形。假设一个混合中t01之间,将三角形𝑃𝑖𝑗的三个顶点𝑉𝑖j𝑘,k=1,2,3。对于每对(3-其间三角形的顶点综合了原先两个三角形的顶点坐标依次扫描转换得到。对于每一个像素p∈𝑃𝑗(t),它的三个重心坐标(3-𝑷𝟏𝒋𝑷𝟐𝒋(3-则最后对应像素点p的RGB值c(p)可以推导如下:(3-在实际操作中调用了功能强大的OpenGL库来帮助实现纹理这部分代码。的每一个像素,取出该像素的RGBA值。glBindTexture创建纹理对象并指定为二维的纹理。接着调用glTexEnvf定义纹理之后的定义了沿S和T方向的重复纹理方式,即当纹理到的区域超过[0.0,1.0]范围时重复之前的纹理。最后通过调用gluBuild2DMipmaps函数生成原图像的纹理。中的每一个三角形,调glBegin(GL_TRIANGLES)函数开始绘制三角形,将变形前顶点坐标ptVerOrig(标准化到[0,1]区间)的三格还原为目标图像的纹理。素点p’的重心坐u,v,wu=SPBC/SABC,v=SAPC/SABCw的值可以通过w=1-u-v得到。进而可以通过u,v,w的值找到原网格三角形中p的坐标。最后将p像素所对应的RGB的值p’点,完成整个图像的过程3-6重心坐标插具体代码如下四、结果展本提供灵活多样的salient选区选择功能。要进行的非需要使用工具将用户认为重要的区域涂黑,制作好Salient即可。Salient是0-255的灰度图像,某个三角形网格区域越黑,表明该程度的变形。图4.1展示了使用不同的选择工具进行Salient区制作的过程 4-1手动选择显著性区域过除了手动地绘制salient之外,本还能够保存已制作好的Salient。也可以通过加载已有的Salient来直接确定显著性区域。Salient如下图所示。4-2Salient4-3格计形所处区域灰度值越大,Salient值越大。最终Salient值被到区间[0,1]中。变形算法根据Salient值大小进行网格变换的计算。动漫网格变形效这里通过3组动漫的网格变形效果来展示本的保真效果。每组中(a)为原图,(b)为原图对应的网格图重要内容轮廓清晰且背景不 重要内容轮廓不清晰且与背 重要内容轮廓清晰且但背景比较复 技术文件: 本67(包括封面拟审会签批厦门大学学一、简 系统总体设 位图矢量 手动绘制矢量化曲 编辑曲 详细功 菜单 公共 .................................................................................................调板 状态 主画 开发环 硬件配 可编程图形处理器 环 二、...............................................................................动漫素材特征线条矢量化技 曲线拟 扩散曲 扩散曲线结 基于扩散曲线的位图矢量化过 基于GPU的泊松方程快速求解方法研 三、算 梯度幅度的非极大值抑 一阶差分算 二阶差分算 特征点选 斜率探测 主曲线分析 三次贝塞尔曲线插 多重网格算 限制算 延拓算 四、结果展 整体效果展 手绘方式创作矢量 位图矢量 边缘检 一阶差分算法检测曲线 二阶差分算法检测曲线点实 基于GPU的扩 颜色值和模糊值的扩 残差与网格层数的关 位图是在70年代伴随着帧缓存的出现而诞生的。位图是由无数状参差不齐而失真,如图1-1所示。另外,由于位图是以排列的像素集合体形式被创建的,所以不能单独操作局部图1-1矢量图、位图放大后效果对比矢量图具有许多优点,主要表样色彩层次丰富的真的图像效果。(a)径向渐变(b)线性渐变1-2矢量图支持的颜色渐变目前基于矢量的一些绘图工具在如何复杂的颜色渐变方很低。2007年Sun对渐变网格进行了改进,提出了一种用于优化手1-3变网格材的平台,如1-4所示;还能够将现有的位图动漫自动转化为矢量作为开发理念,极大的提高了矢量动漫素材的开发效率。本不实现位图矢量化的功能,而且还提供强大的矢量图绘制编辑功能1-1手绘式矢量图制图本具有以下几个创新点系统总体导入直接通过鼠标或手绘板即可,可手动选择曲线左右两侧的编辑曲位置和形状编编辑线上控制点一调整曲线位置,编辑线外控制点调整曲线形调整起止控制点左右两侧的颜色,并扩散到整幅交换此曲线左右两侧删模糊可调整曲线的模糊度,使颜色梯度过渡更图1-6矢量素材制作功能模块板区、状态栏和主画布。各大模块的大概布局设计如图1-7所示:1-7.总体界面布局设下面将分别详细说明这六大块里的各种菜单菜单栏目前分为文件、编辑、视图、窗口四部分1-9菜单栏文件1-10文件菜单栏文件菜单栏主要有以下功能打开:根据文件的类型判断,可载入和xml文件保存:可以保存成和xml两退出:退出程编辑1-11编辑菜单栏撤销:快捷键Ctrl+Z重做:得到当前选中的对象的副本视图1-12菜单视图菜单栏主要有以下功能缩小:单次缩实际大小:原来大窗口1-13菜单窗口菜单栏主要有以下功能:隐藏或显示调板区:隐藏或显示调板公共公共栏在菜单栏下,放置一些常规工具和状态选择按钮1-4公共栏主要操作包括,锐平滑:使曲线更加平重做:重做上一次撤销的编其曲线左侧颜色:设置曲线左侧曲线右侧颜色:设置曲线右侧显示位图:设置是否允许画布显示位中的工具是整个系统的工具,技术的体现1-中的工具可以分为以下绘矩形:按住ctr键,绘制正弧形:需输入弧形参数:起始角度,终止角度,和弧半选择曲线:直接单击曲线,选中。Ctr+左键为多选,可选择多对按下鼠标左键并拖动鼠标,建立弹性选区,选区内的所有对象选抽取曲线:状态栏显示抽取进修复:对扩散后的矢量图进行局部修调板调板区位于界面右侧,用来安放操作过程中常用的各种调1-16调板区调板区主要包括标准色:系统提供的标准颜1-17标准色调色:通过调节RGB的值来添加自定义颜1-18调色自定义颜色:调色下添加的自定义颜色全部保存在这1-18自定义颜色粗细(范围从0.1~9.9)1-19画笔粗细设置曲线的模糊值,和模糊的状态设置按钮配合1-20模糊度状态状态栏位于界面底部,显示当前的一些状态信息1-21状态栏状态栏主要包括显示鼠标在主画布中显示当前图像缩放比显示制作单位信主画开发环CPU:InCorei5-2500RAM:4.00GGPU:ATIFirePro可编程图形处理器图7.可编程图形硬Uni(GPU处理单元,通常也称之为可编程图形硬件(图7GPU概念在20世纪70年代末和80年代初被提出,使用单片集成电路(monolithic)作为图形,此时的GPU已经被用于和动画方面,它能够很快地进行几张的(仅限于此。在20世纪80年代末到90年代初这段时间内,基于数字信号处理(digitalsignalprocessorchip)的GPU被研发年,S3Graphics公司研制出第一个单2D,到了1995年,主流的PC图形厂商都在自己的上增加了对2D的支持。与此同时,固定功能的视窗(fixed-functionWindowsaccelerators)由于其高昂的价格而慢慢退出PC市场。1998年NVIDIA公司宣布modernGPU的研发成功,标志着GPU研发的历史性突破成为现实。通常2070年代末到1998年的这一段时间pre-GPU时期,而自1998年往后的GPU称之为modernGPU。在pre-GPU时期,一些图形厂价格也是非常的高modernGPU使用晶体管(transistors)进行计算,在微(microchip 在2.4GHz的PentiumIV上使用5千5百万(55million)个晶体管;而NVIDIA在GeForceFXGPU上使用超过1亿2千5百万(125million)个晶体管,在NVIDDIA7800GXT上的晶体管达到3亿2百万(302million)个。回顾ModernGPU的发展历史,自1998年后可以分为4个阶段。NVIDIA于1998年宣布ModernGPU研发成功,这标志着第一代ModernGPU的诞生,第一代ModernGPU包括 2TI的Rage和3Dfx的Voodoo3。这些GPU可CPU进行像素缓存区的更新,并可以光栅化三角面片以从1999到2000年,是第二代modernGPU的发展时期。这一时期的GPU可以进行三维坐标转换和光照计算(3DObjectTransformationandLighting,T&LOpenGLDirectX7都的操作也扩展到了立方体纹理(cubemap。NVIDIA的GeForce256,GeForceMAX,ATI的Radeon7500等都是在这一2001年是第三modernGPU的发展时期,这一时期研发的GPUvertexprogrammabilit(顶点编程能力GeForce3,GeForce4Ti,ATI8500等。GPU允许应用程序指定一个序列的指令进行顶点操作控制(GPU编程的本,这同样是一个具有开创意义的时期,这一时期GPU编程思想一直延续到2009年的今天,不但深入到工程领域帮助改善人类日常生活(医疗、地质勘探、、等,而且开创或延伸了计算机科同时,Direct8和OpenGL都本着与时俱进的精神,提供了支持vertexprogrammability的扩展。不过,这一GPU还不支持prograabiit(,在第四代modernGPU时期,迎来同时支持vertexprogrammabilityfragmentprogrammability的GPU。第四代modernGPU的发展时期从2002年末到2003年。NVIDIA的GeForceFXATIRadeon9700同时在市场的舞台上闪亮登场,这两种GPUvertexprogrammability和fragmentprogrammabilityDirectXOpenGL也扩展了自身的API,用以支持vertexprogrammability和fragmentprogrammability。自2003年起,可编程图形硬件正式诞生,并且由于DirectX和称GPU编程,也诞生。恭喜GeForce和ATI的硬件研发人DirectX和OpenGL的研发,也可以休息下了,不用斗vertexprogrammability和fragmentIEEE324元向量,4提供分支指令,支持循环控制语句具有高带宽的内存传输能力(>27.1GB/s支持绘制到纹理功能(Rendertoexture,TT3.2.3GPUVS上节阐述了GPU的发展历史,那么为CPU之外要发展GPU?GPU的vertexprogrammability和fragmentprogrammability究竟在何处有着怎样的优势?图8展示了GPU和CPU在结构上的差异,CPU大部分面积为控制器和寄存器,与之相比,GPU处理。CPU执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行(请回忆OS上的时间片轮转算法,而GPU图8.GPU和CPU的不同架GPU采用流式并行计算模式,可对每个数据进行独立的并行计图9中代码目的是提2D图像上每个像素点的颜色值CPU上运算C++代码通过循环语句依次遍历像素;而GPU上,则只需图9.CPU和GPU的不同编程方可能有人会问道GPU在数据处理速度方面远CPU,为什么不用GPU完全取CPU呢?因为GPU在许多方面与CPU相比尚有不如。首先,虽然GPU采用数据并行处理方式极大加快了运致“需要知道数据之间相关性的”算法,在GPU上难以得到实现(但在CPU上则可以方便的实现,一个典型的例子是射线与不规条不紊地工作。在早期的OpenGLfp2.0fp3.0以及DirectX的ps_4_0之前的profile版本都不支持或不完全支持循环控制流语句(目前在软硬件方面都已得到改进。由GPU编程完全依赖于图形硬件,故而较早版本GPU并不支持一些常用的编程需要,而现在很多个用在4-6年,所以在2012之后,旧式显卡的更新换代会基本结束也制约了GPU编程技术的使用。处理API,入门门槛较高,学习周期较长,尤其国内关GPU编程的资料较为匮乏,这些都导致了学习的难度。在早期,GPU编程只能使用汇编语言,开发难度高、效率低,不过,随着高级Shaderlanguage的兴起,在GPU上编程已经容易多了3.2.3基于GPU的科学可视化计算(VisualizationinScientificComputing视化计算处理的数据量极大(CT、地质勘探、气象数据、流体力学等仅仅基于CPU进行计算完全不能满足实时性要求,而在GPU上进行计算则可以在效率上达到质的突破,许多在CPU上非常所以GPU的科学可视化研究目前已经成为主流。近年来,基于GPU进行通用计算的研究逐渐成为热点,被称之为GPGPU(General-PurposeComputingonGraphicsProcessingUnits,也被称algebra仿真(physicalsimulation)和光线算法(raytracer)都已经成功的移植到GPU上。在国内,中国计算技术进行了基于GPU编程难度,设计基GPU的高级程序语言的研握与C语言类似的流处理语言BROOK,即可进行基GPU的通用编程开发BROOKGPU已经在AMD公司进行深入研发。国内环JDK(JavaDevelopmentKit,Java开发包,Java开发工具)是一个写之上的运行环境还有开发者编译,调试和运行用Java语言写的appletJDK(JavaDevelopmentKit)SunMicrosystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的JavaSDK(SoftwaredevelopmentkitJDK包含的基本组件包括·javac编译器,将源程序转成字节–·javadoc–文档,从源码注释中提取文·jdb–debugger,查及给开发员使用的补充库,如的库、IDL库。JDK中还包括各种例子程序,用以展示JavaAPI中的各部分。而升级。但它的缺点也是非常明显的就是从事大规模企Java应用开发非常,不能进行复杂的Java开发,也不利于团体协JDK一般有三种版SE(J2SE),standardedition,标准版,是通常用的一个版EE(J2EE),enterpsiseedtion,企业版,使用这种JDK开发J2EE应用ME(J2ME),microedtion,主要用于移动设备、设备上的管许多编程已经使用第的开发工具,但JDK仍被当作JavaJDK由一个标准类库和一组建立,测试及建立Java实用程序组成。其JavaAPI是一些预定义的类库,开发需要用这些类来Java语言的功能。JavaAPI包括一些重要的语言结构以及基本图形,网络和文I/O。一般来说,JavaAPII/O部分对于运行Java的所有平台是相同的I/O部分则仅在通Java环境中实现。作为JDK实用程序,工具库中有七种主要程序Javac:Java编译器,将Java源代码转换成字节ava:Java解释器,直接从类文件执行Java应用程序字节代appletviewer:小程序浏览器,一HTML文件上的Java小程序的Java浏览器。Javadoc:根据Java源码及说明语句生成HTML文档。Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。调用的C过程的头OpenCV(OpenSourceComputerVisionLibrary)1999由建立,现在WillowGarage提供支持。OpenCV是一个基于BSD证的跨平台的计算机视觉库,能够运行在Windows、Linux、AndroidMacOS操作系统上。它是轻量级的并且高效的,、Ruby等语言的接口,实现图像处理及计算机视觉方面很多的通用算法,而不依赖于其他外部库。OpenCV致力于真实世界的实可以通过In的IPP的高性能多函数库来得到更高的处理速OpenCV的主要应用领域包括物体识别、人机互动、人脸识别、2、图像或的输入输出,支持文件或头的输入,图像或式近、狄劳尼三角化、椭圆拟合等。7、头定标,主要包括寻矩阵估计。8、运动分析,包含光流、目标、动作分割。9、目识别,利用特征方法HMM模型。10、处理基本GUI,例如显示为了便于管理和扩充OpenCV整个库,整个库被分成几个,结构分析、运动分析与对象、照相机定标、模式识别和三维重建等相关函数。2、cvaux-辅助函数库,主要提供匹配、3D等 时包括出错处理的一些基本函数。4、highGUI-GUI函数库,提供一些二、动漫素材特征线条矢量化技位图的缺点。并且矢量图传输和装载的速度都较位图高很多。的二阶偏导数进行非极大抑制来检测出边界曲线和装饰曲曲线拟分、特征多边形中点法等。针对手绘曲线具有小幅高频噪声的特点,采取了平均滤波法征点的选取,其实是对矢量数据的压缩过程,压缩后的矢量数据仍要扩散曲如AdobeIllustrator,CorelDraw等矢量绘图工具,但是他们都普遍因存2-1扩散曲线的结构示扩散曲线的基本结构主要由以下几个部分组成右两条颜色曲线上从起始位置到终止位置通过线性插值进行颜色渐变。如图2-1中(b)所示2-1中(c)所示。场从而构造线性系统实现颜色扩散。如图2-1中(d)基于扩散曲线的位图矢量化位图矢量化是一个将栅格化的彩像转化由通过一系列数学基于扩散曲线的位图矢量化过程分为如下几个步曲线和装饰曲线。这一过程即为特征矢量化的过程。如图2-2中(a)曲线拟合,使曲线能够过渡平滑。如图2-2中(b)所示。2-2中(c)所示.如图2-2中(d)所示。(a)位图特征提 (b)曲线拟(c)位图颜色抽 (d)扩图2-2基于扩散曲线的位图矢量化过程基于GPU的泊松方程快速求解方法研GPU(GracProcegUt)在近几年的发展十分迅速,尤其是在通用计算方面。GPU的通用计算(GeneralPrposeGPU)指的是用GPUCPUGPU具有非常多用U过8核6线程的数量CPU具有相当的优势,一块小小的GPUU的0GPU的矢量图有诸多优点,主要表现在何制作出矢量化素材和光栅图像的矢量化(RastertoVector矢量素材是根据图像的几何特征加上颜色信息得到的一种图像统的在CPU上实现色彩延拓,尤其是热扩散,那么速度会较为缓慢。应该追求在GPU上快速的实现色彩延拓。线性渐 直线上的色彩延拓,而对于不在一条直线的却没 通过和线性渐变一样的方法得到一条已知的颜色线,然后将这条线绕圆心转一圈就可实现色彩延拓。图2-3(b)显示了以中心点为圆心然热扩线性渐变和径向渐变只能对简单的颜色梯度变化进行颜(a)线性渐 (b)径向渐(c)热扩的用户交互体验是一项非常重要的内容,如果直接在CPU上求解泊松方程,求解的时间将比较长,给用户非常不好的体验。GPU变成可编程的今天,GPU的通用计算给这种大量数据的处理带来了福音。本文提出将这两者结合,即利用GPU的通用计算来求解泊松方三、算梯度幅度的非极大值抑及装饰曲线的几何模型,可以看出,曲线点的灰度梯度值相抑制思想。需要保留局部梯度最大的点,而抑制非极大值。从而cosNxSgn←cosN>0?1,-1;ySgn←sinN>0?1,-1;cosN←conN*cosN;sinN←sinN*sinN;if(p_Der[r][c]>=(p_Der[r][c+xSgn]*cosN+p_Der[r+ySgn][c]*sinN)&&p_Der[r][c]>=(p_Der[r][c–xSgn]*cosN+p_Der.[r–ySgn][c]*sinN))像中需要通过分别计算横向和纵向的差分才能够得到像素点的这里选用Sobel算子对图像进行一阶差分运算,Sobel算子是该算子包含两组3*3的矩阵,分别为横向及纵向,将之与图像作平卷积,即可分别得出横向及纵向的灰度差分近似值。其公式如下G

G

10

(3-

Gx式3-3来分别计算梯度的大GxG (3-arctan(Gy

(3-kSize:Sobel核的大小.Sobel(srcImg,dxMa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论