基于静态2D图片的3D模型生成及编辑系统的实现——3D模型生成-毕业论文_第1页
基于静态2D图片的3D模型生成及编辑系统的实现——3D模型生成-毕业论文_第2页
基于静态2D图片的3D模型生成及编辑系统的实现——3D模型生成-毕业论文_第3页
基于静态2D图片的3D模型生成及编辑系统的实现——3D模型生成-毕业论文_第4页
基于静态2D图片的3D模型生成及编辑系统的实现——3D模型生成-毕业论文_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

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

文档简介

1 本科毕业论文本科毕业论文 题题 目目:基于静态:基于静态 2D2D 图片的图片的 3D3D 模型生成及编辑系统的实现模型生成及编辑系统的实现 3D 模型生成 姓 名: 学 院:软件学院 系:软件工程 专 业:软件工程 年 级: 学 号: 指导教师: 职称: 年 月 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 I 摘摘 要要 随着计算机技术的不断发展,三维建模技术也得到了充分的发展,它已经成为计算 机图形学领域的一个重要分支。在虚拟现实、影视制作、视频直播、辅助教学、医学研 究、游戏娱乐等诸多方面都具有很强的应用价值。 本论文研究的是关于三维人脸建模,自从 Parke 在 1972 年率先使用人脸参数模型生 成人脸图像以来,虽然该领域已经有了显著的进展和应用,但还是不尽人意,例如需要 专门的设备、数据量大、不便于存储、不便于在网络上传输等。由于人脸表面的复杂性, 如何在不辅之于昂贵的设备的条件下,想要建立一个逼真的三维人脸模型仍然是一项十 分艰难的工作。 本论文进行了基于正侧面二维照片的三维人脸建模技术研究。首先是获取正侧面人 脸的静态二维图片,然后是对选定的建模对象的照片进行交互式的提取标注特征点,接 下来进行一些非特征点的标注保存并通过这些标注点搭建人脸三维网格,得到选定建模 对象的三维网格模型,再接下来就是纹理图片的无缝合成,在有了纹理图片和三维网格 模型之后我们就可以进行纹理的映射和纹理粘贴,并最终得到具有更高逼真程度的个性 三维人脸。 本论文对应的实现是在 Microsoft Visual C+ 6.0 的 MFC 框架下实现的,并利用 OpenGL 图形库来实现三维效果和纹理贴图。 关键词:关键词:三维人脸建模 特征点 纹理映射 OpenGL 图形库 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 II Abstract With the development of computer technology, 3D modeling has been surging as an important branch of computer graphics. Its utility covers more and more fields: virtual reality, film production, video conference, computer aided education, medicine research, computer games and so on. This thesis focuses on the technology of 3D face modeling, which was initiated by Parke in 1972 emphasized on face parameter model. Although 3D face modeling has various applications, people are not satisfied because specialized equipment, huge data storage space and effective network transmission are required. Otherwise, modeling the real face of a given person would be a difficult task for the complexity of the face feature. In this thesis, first, we collect photos. second, we extract the face feature points and some no- feature points from these photos and save them. Third, we use all the points to build a 3D face grid model. Then, a face texture map is made by stitching the persons photos. Finally, by mapping the texture to the grid model, a characterized 3D face model is completed. This system of 3D face modeling is implemented using the Microsoft Visual C + + 6.0 of the MFC framework, and OpenGL to accomplish 3D effect and texture mapping. Key words: 3D face modeling face feature points Texture mapping OpenGL 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 III 目录目录 第一章第一章 绪论绪论1 1 1.1 课题的背景与意义 .1 1.2 国内外的发展情况 .3 1.3 本论文的主要工作 .4 1.4 论文的组织结构 .6 第二章第二章 图片的获取和关键点的提取图片的获取和关键点的提取7 7 2.1 图片获取 .7 2.2 人脸特征点的定义 .8 2.2.1 人脸的特点8 2.2.2 MPEG-4 标准下的 FDP 参数.9 2.3 人脸特征点的交互提取 10 2.3.1 立体视觉.11 2.3.2 特征点提取过程.12 2.4 小结 13 第三章第三章 三维网格模型生成和纹理图拼接三维网格模型生成和纹理图拼接1414 3.1 三维网格模型生成 14 3.2 纹理图拼接 18 第四章第四章 纹理映射纹理映射2020 4.1 纹理映射介绍 20 4.2 模型与纹理图的映射关系 20 4.2.1 圆柱投影.21 4.2.2 正交投影.22 4.3 OpenGL 纹理映射实现22 4.3.1 OpenGL 简介23 4.3.2 纹理映射步骤.23 4.3.3 纹理映射核心代码分析说明.25 4.4 小结 27 第五章第五章 实验结果实验结果2828 第六章第六章 总结与展望总结与展望3030 致谢致谢3131 参考文献参考文献3232 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 IV ContentsContents ChapterChapter 1 1 IntroductionIntroduction1 1 1.1 Background 1 1.2 Current Situation3 1.3 Contents and Tasks.4 1.4 Architecture of Thesis.6 ChapterChapter 2 2 AbstractionAbstraction ofof PicturesPictures andand FeatureFeature PointsPoints7 7 2.1 Pictures Collection .7 2.2 Definition of Face Feature Points .8 2.2.1 Facial Features8 2.2.2 MPEG-4 and FDP 9 2.3 Abstraction of Feature Points 10 2.3.1 Stereo Vision.11 2.3.2 Feature Points Construction 12 2.4 Summary 13 ChapterChapter 3 3 3D3D GridGrid ModelModel GenerationGeneration andand StitchingStitching TextureTexture MappingMapping1414 3.1 3D Grid Model Generation .14 3.2 Stitching Texture Mapping 18 ChapterChapter 4 4 TextureTexture MappingMapping2020 4.1 Texture Mapping Introduction20 4.2 Relation of Model and Texture Mapping.20 4.2.1 Cylindrical Projection .21 4.2.2 Orthogonal Projection 22 4.3 Texture Mapping Implementation .22 4.3.1 OpenGL Introduction .23 4.3.2 Texture Mapping Steps .23 4.3.3 Code Analysis .25 4.4 Summary.27 ChapterChapter 5 5 ExperimentalExperimental ResultsResults2828 ChapterChapter 6 6 ConclusionConclusion3030 AcknowledgementsAcknowledgements3131 ReferencesReferences3232 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 1 第一章第一章 绪论绪论 在人类的交流过程中最重要的手段应该是语言,再接下来就是人类的肢体语言,而在肢 体语言中最重要的表达部位应该就是人脸,人脸表面具有高度复杂的几何形状和十分丰富的 颜色纹理信息,正因为如此人脸成为人类交流的重要渠道。在计算机世界中,虚拟的人脸就 是人们表情和语言的重要载体。近年来,人脸三维建模在虚拟现实、影视制作、视频直播、 辅助教学、医学研究、游戏娱乐等诸多方面都得到了应用。但由于人脸结构的复杂,表情丰 富,使得目前用计算机图形学的方法建立起一个逼真的三维人脸模型仍然是一项具有很大挑 战性的工作。 自古以来人们就开始寻找人脸的建模方法,中国的壁画,浮雕;外国的素描,雕塑。人 们所追求的是多方位的表达手法,但受限于人类的认识,这些建模方法都只局限于二维,并 不能全面的表达出人脸的信息。但随着人类对空间的认识以及计算机技术的出现和发展,让 三维建模成为了现实。Parke 首先使用人脸参数模型生成了人脸图像;Platt 和 Water 等人提 出使用肌肉模型来建立虚拟脸;Horace 等人用两张正交照片合成了人脸;Blanz 等人提出了 一种基于统计归纳的人脸建模方法。最近又出现了用数字化仪器(如 3D 激光自动扫描仪,立 体摄像机等)获取人脸全景轮廓信息,进行三维人脸重建,但这种方法需要昂贵的设备采集 数据,离一般实用还有一定的距离。 1.11.1 课题的背景与意义课题的背景与意义 三维建模至今仍然是一个比较困难的研究课题,而人脸的三维建模更是难上加难,但是 还是有越来越多的人投入到这方面的研究,主要原因是三维人脸建模有着极为广泛的应用, 就目前来看,三维人脸建模已经初步应用到视频电话、医学手术、影视制作、三维游戏、人 脸识别等多个领域,而且随着各方面技术的发展,三维人脸建模必将会在各方面得到更深更 广的应用。 一、影视制作:当你欣赏着电影节目的时候,你是否有这种感觉,电影里面的人物的表 演十分的夸张,但又不像是假的,这是计算机的三维建模技术欺骗了我们的眼睛。三维建模 技术赋予角色人性的外观和极其逼真的表情,使我们不得不发出惊叹。从最初的玩具总动 员 、 终结者到蜘蛛侠 ,这些正是三维建模技术发展历程的一个展现,动画制作者总 是在不断利用最新的三维建模学术研究成果。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 2 二、视频电话:电话作为人们日常生活、工作中不可缺少的通讯工具,以其方便、快捷 等特点被广泛应用,但普通电话机只能是“只闻其声,不见其人” 。随着生活水平的提高, 希望在通话的同时能看到对方的音容笑貌成了人们梦寐以求的愿望。虽然视频电话技术现在 已经是一项成熟的技术,但是它带来了方便的同时也占用了宝贵的带宽资源,要求通信线路 具有很大的带宽。人脸建模与人脸动画技术只需要一次性的从发送端发送人脸定义特征参数, 接收端根据收到的参数利用人脸建模技术恢复人脸,以后的传送过程仅仅是传送预先定义的 人脸表情参数信息,这样必然降低了传送信息的冗余程度,大大减少了一定时间内的数据流 量,在普通的通信线路上就可以实现实时的“面对面的交流” ,视频电话也必将得到更加广 泛的普及。 三、医学手术:三维人脸建模技术的主要应用是面部整形手术。脸是人的一个门面,在 进行面部整形手术过程中是不允许有任何的差错出现,所以在进行面部整形手术之前,可以 基于人脸建模技术模拟手术过程并展示手术后的治疗结果,从而做出更加详细的手术方案, 减少手术风险。 四、辅助教学:人脸三维建模技术也可以运用到有生有色的计算机辅助教学过程。尤其 是当学生听力方面有缺陷时,学生可以在人脸三维建模技术的支持下,一遍遍的跟这位虚拟 老师学习,只要预先设定程序,这位老师永远都会“不厌其烦” 。学生可以随时随地与这位 类似真人的虚拟老师学习,一方面不必老师反复地教学,极大地减少了工作量,另一方面可 以激发学生的学习兴趣,增强学习的效果。 五、游戏娱乐:日常生活中计算机除了可以用于工作和学习,另一个重要的用途就是休 闲和娱乐,游戏软件业已经成为计算机软件的支柱产业之一。游戏软件的发展也是从点到面 再到体的过程。现在大部分游戏的一个不足之处在于,一般只能是玩家操纵游戏中的虚拟角 色,缺乏自身参与感。如果把游戏角色换成玩家自己,如果我们能将游戏中的虚拟角色换成 玩家自己的造型,能看着自己本人在游戏中“纵横驰骋” ,那对广大玩家来说恐怕不只是爱 不释手了吧。 六、人脸识别:身份识别在现代社会中越来越受到人们的重视,在各行各业中各式各样 的识别方法得到了广泛的应用,但是不论是密码,还是各种证件等都不能完整准确地证明一 个人的真实身份。生物识别技术是利用人体生物特征进行身份认证的一种技术。人脸识别是 生物识别技术的一个主要研究方向,经过诸多学者的悉心研究,有不少成功的识别方法已经 形成,但是这些方法主要集中在二维方面,由于受到光照、姿势和表情等因素的影响,识别 准确度受到限制。一个较好的解决办法是利用三维模型进行人脸的识别,因为利用三维人脸 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 3 模型可以消除或减弱光照、姿势和表情等因素的影响。近年来,基于三维模型的人脸识别方 法已经取得了很大进展,充分利用三维信息进行识别,在提高识别的鲁棒性和精度方面也显 示出了巨大潜力,必将成为人脸识别的热点。 1.21.2 国内外的发展情况国内外的发展情况 国外在三维人脸建模方面的研究工作开展的比较早。从 1972 年 Parke 首先用计算机生 成人脸图像以来,30 多年间计算机图形工作者在这方面的研究取得了许多重要的研究成果。 1972 年 Parke 首次使用计算机表示人脸模型,利用将近 400 个顶点组成的 250 个多边形 定义人脸表面皮肤,利用余弦插值法计算连续表情的中间图像,从而实现人脸动画。Parke 制作的参数模型是世界上第一个参数模型,人脸参数模型的基本思想是通过参数来描述不同 的人脸特征和人脸表情变化,因此人脸参数模型一般包括两类参数。人脸构造参数和人脸动 画参数。微软研究院 Liu 和 Zhang 等人在艺术家的帮助下,建立了一种中性脸的网格模型。 这种模型由 194 个关键点和 360 个三角平面组成,并且构建了 65 个可调向量用于模型的变 形。利用这种模型,根据两幅图像和两个图像序列模拟特定人脸取得了很好的效果。瑞典 Linkoping 大学的 ImageCodingGroup 于 2001 年发布了最新版本 CANDIDE-3,这个版本为了 达到与 MPEG-4 标准的统一,对原有的模型做了必要改动。此模型包括 113 个关键点和 168 个三角面片,控制参数由静态参数和动态参数组成。静态参数用来描述不同人脸之间的差异, 动态参数则用于控制脸部的动作。此模型关键点比较少,可以快速地描述人脸静态特征和脸 部动作,并且根据动态参数可以进行动作编码,在视频传输方面应用较广。多伦多大学的 Lee 等人利用通过激光扫描仪获得的三维几何数据和纹理信息,调整已有的标准网格头部模 型,构建特定人脸模型。他们的做法是在三维点云中检测一些有意义的特征点,利用插值方 法变形特征点周围的非特征点。为了能够准确地检测特征点,预先对获得的三维数据进行拉 普拉斯变换,然后在拉氏空间中检测特征点,取得了较好结果,最后为模型合成纹理信息。 Jeong 等人利用三维数据的轮廓信息进行模型的初始化,然后利用曲面子分割策略和多精度 拟合方法进行模型的构建。基于图像的特定人脸建模,从普通摄像机获取的多幅图像出发进 行建模,华盛顿大学的 Pighin 等人利用多幅图像调整标准模型,他们采用的标准头部模型是 Toronto 大学的线框模型。其做法是:在多幅图像上人工标定多个特征点,然后对标准模型 进行变形。整个变形过程包括三个步骤:首先,姿势估计,利用计算机视觉技术确定各个图 像的变换参数、相机的定标参数(包括位置、方向、焦距等) ,同时重构出标定点的三维空 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 4 间位置;然后,利用分散点数据插值技术,通过已有的特征点位置构建其他顶点的位置;最 后,细微调整模型,在模型的顶点之间和图像的对应点之间插入附加点,使模型平滑逼真。 这些是国外科研人员在人脸三维这方面在这 30 年来比较有代表性的研究成果。 国内在这方面研究较晚,最早的人脸建模研究始于 90 年代末,经过十几年的发展,人 脸三维建模也引起了国内研究者的极大兴趣,不同的研究机构和科研人员在人脸三维建模方 面作了许多研究工作。浙江大学、清华大学、中国科学技术大学、中国科学院计算技术研究 所和中国科学院自动化研究所等在三维人脸的数据获取和建模方面取得了一些成果。浙江大 学 CAD 1 Y=y; 2.1 2 ; Xx y Zz 正 正侧 侧 公式 由于我们很难拍摄到满足要求的正侧面图片,所以本项目采用从人体建模软件 Poser6.0 中通过渲染,调整视觉角度获得了正侧面图片如图 2-1,虽然得到的并非真实的人脸正侧面 图片,但 Poser6.0 中的人体模型本来就是参照人体的各项比例和特征来模拟人体的各个部位, 包括人脸,该模型是完全满足人脸的基本特征,甚至可以说该模型是按照人脸的基本特征参 数来生成的,所以说这两张正侧面图片是完全满足我们的实验要求的。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 8 图图 2-1 正侧面人脸照片正侧面人脸照片 项目采用从人体建模软件 Poser6.0 导出的图片,这样我们可以在项目的最后将得到的三 维人脸模型同 Poser6.0 中对应的三维人脸模型进行比较(虽然同一个成熟的人体建模软件生 成的模型进行比较还是会有差距的,但我们就是要比较看看差距有多大,从而来判断该项目 的成功与否) 。 2.22.2 人脸特征点的定义人脸特征点的定义 2.2.12.2.1 人脸的特点人脸的特点 虽然每个人的人脸都不一样,但人脸都具有一定的共性。例如在人脸的正面图像上,人 的脸部轮廓可近似地看作椭圆,双眼在椭圆的水平对称轴上,眉心,鼻尖和下巴尖点位于竖 直对称轴上,眉毛,眼睛,鼻子,嘴巴等器官在整个面部中的相对位置是稳定的,还有人脸 的基本形状及五官之间的位置存在着“三庭五眼”的规律。在竖直方向上,发际到眉弓,眉 弓到鼻尖,鼻尖到下巴尖点的距离都相等,称作“三庭” ;在水平方向上,两眼之间,两眼 外角分别到双耳的距离都相等,均为一眼宽,这样,加上两个眼睛自身的宽度,称为“五眼” 14。人脸的“三庭五眼”如图 2-2 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 9 图图 2-2 三庭五眼三庭五眼 2.2.22.2.2 MPEG-4MPEG-4 标准下的标准下的 FDPFDP 参数参数 人脸的特征点应该选在那里呢?人脸的特征点当然应该选择在最能代表人脸特征的那些 位置,主要包括人脸轮廓和人脸面部的各器官(眼.鼻.嘴.脸颊等) 。目前,很多人脸建模工 作的特征点的选择都基于 MPEG-4 中人脸定义标准,以便使得建模方法与 MPEG-4 系统兼 容。所以本项目人脸特征点定义也是基于 MPEG-4 标准。 MPEG-4 作为新一代动态图像压缩标准,提出基于对象的编码格式,将人脸作为一个特 殊的对象,并为人脸的动画制定了一系列标准,为人脸的建模和动画研究奠定了基础。然而, 由于 MPEG-4 定义的只是一种格式和框架,而并未给出具体的实现算法,这就给研究人员提 供了广阔的平台。MPEG-4 使用两个参数集合对中性人脸模型进行了定义:人脸定义参数 (Face Definition Parameter,FDP)和人脸动画参数(Face Animation Parameter,FAP)6。其中 FDP 定义了人脸特征点、网格、纹理、人脸动画定义表等数据,而有了这些数据就可以把一 般人脸转化为特定人脸。在 MPEG-4 标准中定义了 FDP 的 84 个人脸特征点,如图 2-3。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 10 图图2-3 MPEG-4中人脸特征点的分布图中人脸特征点的分布图 我们还进行了适当的删减(如舌头,牙齿上面的特征点) ,这主要是因为在本项目中的 建模过程中并不会体现这些部位的信息。 2.32.3 人脸特征点的交互提取人脸特征点的交互提取 正是由于人脸都具有上述的这些共性以及 MPEG-4 标准为我们指定了人脸的特征点位置, 这给我们的特征点提取工作带来很多的方便。特征点的提取,就是指我们获得特征点的空间 坐标位置,并记录它的坐标信息的过程。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 11 2.3.12.3.1 立体视觉立体视觉 人的立体感是这样建立的:双眼同时注视某物体,双眼视线交叉于一点,叫注视点,从 注视点反射回到视网膜上的光点是对应的,这两点将信号转入大脑视中枢合成一个物体完整 的像。不但看清了这一点,而且这一点与周围物体间的距离、深度、凸凹等等都能辨别出来, 这样成的像就是立体的像,这种视觉也叫立体视觉15,而我们从正侧面图片中获取图像上 点的三维坐标信息也是应用这个原理。 生成三维人脸模型上的各顶点的三维坐标。这是人脸三维建模的关键,本论文采用的是 多角度视图合成三维模型,首先,我们介绍一下三维模型上的一个特定点与其投影坐标的关 系。如图 2-4 对于空间表面的任意一点 P,如果用摄像机进行观测的话,我们看到它在 1 C 图片上的点上面,我们无法就通过这个观测方向得到 P 点的三维空间坐标,我们只知 1 C 1 P 道它在和的连线上面,当我们再用另外一架摄像机来观测 P 点的话,这样我们又可 1 O 1 P 2 C 以得到 P 在图片上的点上面,而 P 在和的连线上面,这样我们就可以知道 P 点的 2 C 2 P 2 O 2 P 空间位置,就是在直线和的交点上。 1 1 O P 22 O P 图图 2-4 立体视觉示意图立体视觉示意图 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 12 2.3.22.3.2 特征点提取过程特征点提取过程 从正面照片中我们可以获得人脸特征点的 x, y 两个方向的宽度与高度的信息,从侧面照 片中我们可以获得人脸特征点的 z, y 两个方向深度与高度的信息。这样我们就可以得到人脸 特征点的空间坐标(X,Y,Z)如公式 2.1。 具体的操作过程:首先我们先导入正面和侧面的人脸图片,接着就是交互的提取过程, 我们先在正面人脸图像中定义出特征点的 x,y 坐标(只要左键双击对应视图) ,然后再通过 调整对应的特征点在侧面人脸图片中的 z 坐标来获取特征点的三维空间坐标(在对应的视图 中单击右键不释放,拖动对应的点进行调整) ,当我们调整好了以后,特征点的信息也已经 被记录下来了。实验的效果如图 2-5 和图 2-6: 图图 2-5 正面特征点提取情况正面特征点提取情况 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 13 图图 2-6 侧面特征点提取情况侧面特征点提取情况 除了一些必要的特征点需要提取之外,为了后面三角网格模型的搭建,项目中我们又添 加了一些非特征点。整个提取的过程是一个十分繁琐的过程,所以在该项目中提供了特征点 的读取和保存功能,可以减少很多无谓的工作,并且在对应不同的建模对象我们也可以读取 原有的特征点信息,然后再进行稍微的调整,这样又得到了其它的特定人脸的特征点信息。 2.42.4 小结小结 本项目采用的是一种特征点手动提取的方法,主要由于人脸特征点的自动提取具有很大 的挑战性,而且目前为止还没有一个方法能够很好的检测出适用于人脸建模的所有特征点。 本章详细讲述了实验对正侧面图片的要求和从 Poser 6.0 中的导出所需的正侧面图片, 并简单的从人脸的一般特征(三庭五眼)入手,接着简要介绍了 MPEG-4 中 FDP 定义标准, 根据人脸特征分布特点以及考虑到以后的建模效果,介绍了立体视觉原理,并应用该原理建 立了特征点的空间坐标,在最后显示了该阶段的实验效果,基本上符合了 MPEG-4 中 FDP 定义标准。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 14 第三章第三章 三维网格模型生成和纹理图拼接三维网格模型生成和纹理图拼接 本章的工作是起一个承上启下的作用,它利用了前面获取的空间点,搭建了特定人脸的 三维三角网格模型;利用了前面获得的正侧面图片,通过 PhotoShop 处理得到了纹理图片, 而得到的这两样(特定人脸网格模型,纹理图片)都是下面纹理映射,建立逼真三维模型的基 础。 3.13.1 三维网格模型生成三维网格模型生成 在有了前面提取的特征点和非特征点的空间坐标信息之后,我们还不能很形象的表现出 人脸的空间几何形状,这时候就需要我们在这些特征点和非特征点中间搭建三角网格。搭建 三角网格的基本步骤如下: 一、在有了前面的特征点和非特征点后,我们首先是显示出这些点的标号(其实整个的 三角网格的搭建是同特征点和非特征点的获取过程交叉进行的) 。如图 3-1 和图 3-2。 图图 3-1 正面示意图正面示意图 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 15 图图 3-2 侧面示意图侧面示意图 二、根据标号选取点,建立三角形,如图 3-3,这里我们选取 00,01,02 这三个点围成 一个三角形。 图图 3-3 添加三角形对话框添加三角形对话框 在对应的各个视图中就会自动的生成三角网格,如图 3-4,图 3-5。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 16 图图 3-4 正面示意图正面示意图 图图 3-5 侧面示意图侧面示意图 三、重复上述的工作最终得到如图 3-6,图 3-7,图 3-8 的结果,此时我们就可以很形象 的表现出人脸的空间几何形状了。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 17 图图 3-6 正面三角网格示意图正面三角网格示意图 图图 3-7 侧面三角网格示意图侧面三角网格示意图 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 18 图图 3-8 空间三角网格示意图空间三角网格示意图 3.23.2 纹理图拼接纹理图拼接 纹理图拼接,如果要把两张贴图拼接起来,拼接线位置由于两张照片的光照条件和角度 不一样,拼接起来的贴图有明显的界限,为了消除界限,达到贴图的平滑过渡,我们必须使用 多分析度图像分解的处理方法,并且采用了多分析度图像分解的方法得到的拼接纹理图片的 拼接效果还是不太理想,在项目中用的纹理图片是用图片处理工具 PhotoShop 来处理的,这 样虽然少掉了一些自动性,但可以换来更好的实验效果。如图 3-9 所示,通过 PhotoShop 处 理得到的纹理图片就没有明显的拼接界限,而且人脸的 360 度纹理信息获得了完整的保存, 实验结果是理想的。这为接下来的纹理映射工作提供了很好的数据基础。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 19 图图 3-93-9 360360 度纹理信息图度纹理信息图 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 20 第四章第四章 纹理映射纹理映射 要使得建模的结果达到照片的逼真程度,必须给3D 模型赋予纹理信息。本章将研究纹 理映射技术,利用Visual C+6.0开发环境,结合目前流行的图形软件包OpenGL,给三维网 格模型“贴上皮肤” 。 4.14.1 纹理映射介绍纹理映射介绍 纹理分为颜色纹理和凹凸纹理两种。颜色纹理是通过颜色色彩或明暗度的变化体现出来 的表面细节,绘制后的表面仍然保持光滑;由于现实世界中任何表面都是有着不同程度的凹 凸,为了进一步增强真实感,Blinn提出了扰动表面法线方向的做法,使得表面真实感效果 进一步增强。凹凸纹理映射的方法与颜色纹理映射的方法类似,只是纹理值作用在了法向量 上,而不是颜色亮度上。本文重点采用颜色纹理映射的方法。纹理有多种表达形式,有一维 纹理、二维纹理和三维纹理;纹理可以由程序产生,也可以是平时见到的二维图像。本文的 纹理映射就是采用二维纹理图的方式。纹理映射的过程一般为定义纹理图像;接着找到模型 与纹理图像的映射关系,即找到每一个模型顶点的纹理坐标;最后利用一些软硬件的纹理映 射功能,实现带有纹理的模型绘制6。本论文也遵循了这一过程。 4.24.2 模型与纹理图的映射关系模型与纹理图的映射关系 现在,已经得到特定人脸网格模型和人脸纹理图,下一个重要的步骤就是要找到模型与 人脸纹理间的映射关系,即找到模型每一个顶点在纹理空间所对应的纹理坐标。 经典的纹理映射过程是两步纹理映射,这种方法首先将纹理映射到一个简单的三维曲面, 即中间面,如平面、圆面、球面或立方体上,然后把变形后的映射结果映射到最终的曲面上。 中间面选取原则是:为了减少纹理的变形扭曲,使得纹理映射结果更加自然,尽量选择与模 型接近的简单曲面作为中间面。人脸以及人的头部与圆柱面最为接近,所以圆柱面常用来做 人脸纹理映射时的中间面。除借助于中间平面的方法,还有一种基于 RBF 的约束纹理映射 算法,利用 RBF 插值,将三维空间中的顶点映射到二维纹理空间,取得了不错的效果。下 面将重点介绍圆柱投影纹理映射以及本论文所采用的正交投影纹理映射6。 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 21 4.2.14.2.1 圆柱投影圆柱投影 假设人脸模型处于的坐标系统如图 4-1 所示,人头的中轴线与 y 轴重合,人眼直视目光 正向着 z 轴方向,逆着 y 轴从上向下看到的人脸表面俯视示意图如图 4-2。 图图 4-1 三维空间三维空间 图图 4-2 俯视示意图俯视示意图 在图 4-2 中,内圆近似为人脸轮廓,外圆代表投影圆柱面,从圆柱轴心投射一直线交内 圆于 P 点,P 纹理坐标为(u, v),则 v 为模型的高度,v=y,u 代表从 x 轴正半轴开始的弧长, 由反正弦函数的定义得到公式(4.1) 1 22 2 1 22 2 1 22 2 1 22 2 arcsin/,0,0; arcsin/,0,0; ( arcsin/,0,0; arcsin/,0,0; xxzxz xxzxz u xxzxz xxzxz 公)式4. 1 这样,由该式获得的 u 的范围为-,,v 得范围即模型高度 y 的范围。将圆柱面展开 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 22 为平面,并为了适应将来的纹理映射中对纹理坐标范围的要求,将 u 和 v 的范围分别归一到 0,1的范围之间,并假设模型高度范围为a, b,见公式(4-2)。 /2 ; (4.2) /; uu vvaba 公式 4.2.24.2.2 正交投影正交投影 纹理映射的目的是求得模型顶点在二维纹理空间的纹理坐标,是一个从三维空间点到二 维平面点的映射过程。目前大多数模型展开都将人头近似为圆柱,采用圆柱映射的方式将模 型点映射到纹理图像上。但考虑到人头并非真正的圆柱体,这样的映射肯定存在一定的误差。 所以本项目采用了更加合理的映射方式:正交投影纹理映射。首先要对齐坐标系统,将模型 与纹理统一到一个坐标系之下;在人脸正面左右两个外眼角之间,模型顶点向x, y平面作正 交投影,取点的(x, y)坐标作为纹理坐标,两个外眼角之外的点向z, y平面做正交投影,取点 的(z, y)坐标作为该点的纹理坐标6。这样得到的纹理坐标点与纹理平面的符合情况如图4-3 所示。这样的考虑更加符合人脸的形状,能够得到更好的效果。 图图4-3 纹理坐标点映射情况纹理坐标点映射情况 4.3OpenGL4.3OpenGL 纹理映射实现纹理映射实现 前面讲的是纹理的映射关系,但具体的实现我们是利用专门的三维图形处理图形库 OpenGL 对模型渲染,并且取得很好的效果。OpenGL 是个专业的 3D 程序接口,是一个功 能强大,调用方便的底层 3D 图形库。OpenGL 的英文全称是“Open Graphics Library” ,计 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 23 算机三维图形学的一个重要任务就是将用数据描述的三维空间通过计算转换成二维图像并显 示出来,OpenGL 就是支持这种转换的程序库。 4.3.1OpenGL4.3.1OpenGL 简介简介 OpenGL 被严格定义为“一种到图形硬件的软件接口” 。从本质上说,它是一个完全可 以移植并且速度很快的 3D 图形库。它使用由 SGI(Silicon Graphics)公司精心开发和优化的算 法,这家公司在计算机图形学领域是公认的业界领袖。OpenGL 不像是 C 或者 C+那样的编 程语言,而是一个函数库,提供一些预封装的函数。OpenGL 在 Windows 平台上主要有以下 4 个图形库2。 一、基本库 opengl32.lib:头文件为 gl.h,库中有 100 多个函数,函数前缀都为 gl,都是 最基本最重要的函数。如 glVertex3f()、glColor3f()等。 二、实用库 glu32.lib,头文件 glu.h,函数功能相对复杂,如绘制复杂的曲线曲面,进行 坐标变换,多边形的分割等。一共有 40 多个函数,前缀为 glu,如 NURBS 曲面函数 gluNurbsSurface()。 三、辅助库 glaux.lib,头文件为 glaux.h,是一些鼠标、键盘控制、窗口管理等简单的交 互函数和常用三维物体的绘制函数。一共有 30 多个前缀为 aux 的函数,如窗口初始化函数 auxInitWindow()。由于简单,大型的 OpenGL 程序很少使用到这一套函数。 四、实用工具库 glut32.lib,头文件 glut.h。辅助库可以看作是实用工具库的一个子集。 工具库还提供了许多辅助库没有的功能,如菜单操作等。函数前缀 glut,如菜单创建函数 glutCreateMenu()。这个库不是 MFC 自带,由 SGI 在 OpenGL 的官方网站上提供。 一个 OpenGL 应用程序的基本操作步骤如下:创建 OpenGL 的着色环境,包括设定象素 格式,创建着色环境,把着色环境指定为当前的着色环境;进行 OpenGL 相关的初始化,如 设立灯光,质材,纹理,变换等等;绘制图形;将着色环境设为非当前使用,释放着色环境。 4.3.24.3.2 纹理映射步骤纹理映射步骤 OpenGL 中纹理映射基本步骤包括指定纹理、控制滤波、开启纹理映射功能和绘制场景。 实质是利用 OpenGL 中专门的一系列场景、纹理设置函数,对模型进行渲染2。 一、指定纹理(Specify Texture)这里采用的纹理即由第 3 章中的实验获得的人脸纹理全景 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 24 图,OpenGL 中定义纹理的意义就是建立一个纹理对象,告诉系统当前所使用的纹理具体是 什么。命令 glTexImage2D()用于定义一个二维纹理,函数定义为:glTexImage2D(GLenum target,GLint level,GLintcomponents,GLsizei width,GLsizei height,GLint border,GLenum format,Glenum type,const GLvoid*pixels)。其中,第一个参数 Target 指定为 GL_TEXTURE_2D,告诉 OpenGL 这里定义了一个二维纹理。对于我们采用的单分辨率映射, level 取值为 0,components 取值为 1 到 4,1 代表纹理映射中只用纹理图像的彩色分量 R 分 量,2 代表取彩色分量 R 和透明度参量 A,3 代表取三个彩色分量 R、G 和 B,4 代表取 R、G、B 和 A。width 和 height 表示纹理图像的高度,OpenGL 中规定纹理图像的高度与宽 度必须为 2 的幂次,且最小值为 64,否则会出现错误。本文选取的纹理图像大小为 512512。border 指定纹理图像的边界,一般为 0 值。format 和 type 指定了纹理图像的格式 和保存数据的类型,可以为 GL_COLOR_INDEX,GL_RGB,GL_RGBA,GL_RED,GL_GREEN,GL_BLUE,GL_AL PHA,GL_LUMINANCE 或 GL_LUMINANCE_ALPHA,本文图像格式 format 取为 GL_RGBA;type 的取值为 GL_BYTE,GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,G L_UNSIGNED_INT,GL_FLOAT 或者 GL_BITMAP,本文图像数据格式 type 取 GL_UNSIGNED_BYTE。最后的参数 pixels 指定纹理图像保存的位置。 二、控制滤波(Controlling Filtering)纹理图像是方形的,但是纹理图像必须映射到模型的 多边形表面并转化为屏幕像素。取决于所采用的纹理映射方式,屏幕上的一个像素可能对应 一个纹理像素的一部分,这时需要放大纹理;也可能一个屏幕像素对应几个纹理像素,这时 需要缩小纹理。OpenGL 中提供这样的机制,可以指定如何进行这些转换,只要给定想要的 形式,这些不同的控制滤波方式就会在处理速度和图像质量间取得折衷。 glTexParametf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)glTexParame tf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST),其中第一个参数 GL_TEXTURE_2D 表明所采用的纹理形式,本文采用了二维图像纹理;第二个参数表明指 定的控制滤波对象,放大滤波 GL_TEXTURE_MAG_FILTER 或 GL_TEXTURE_MIN_FILTER 缩小滤波,第三个参数为滤波方式,有多种方式可供参考,本 文选择最简单的计算速度最快的 GL_NEAREST 滤波。 三、开启纹理映射功能(Enable Texture Mapping)进行场景绘制之前,先要开启纹理映射 功能,实现函数为 glEnable();对应的关闭纹理映射功能的函数为 glDisable(),两者的参数 基于静态 2D 图片的 3D 模型生成及编辑系统的实现3D 模型生成 25 为 GL_TEXTURE_1D 或 GL_TEXTURE_2D,取决于所使用的是一维还是二维纹理,二维图 像使用 GL_TEXTURE_2D。 四、绘制场景(Draw Scene)最后一步绘制真实的场景,指定几何模型的每一个顶点的位 置和每一个顶点对应的纹理图像上的纹理坐标。 glBegin() glTexCoord*();/纹理坐标 glNormal*();/顶点法向量 glVertex*();/顶点坐标 glEnd() 其中 glTexCoord*()指定纹理坐标位置, “*”代表纹理坐标的维数和类型,依据采用纹理形 式为二维图像纹理,本文的选则为 glTexCoord2f(Glfloats,Glfloat t);glNormal*()指定顶点的 法向量,用于光照等的计算, “*”与上类似;glVertex*()指定顶点的空间坐标位置,人脸模 型处于三维空间,所以采用的形式为 glVertex3f(),里面的参数为 3 个 Glfloat 类型的变量, 为 x、y 和 z 三个坐标分量:glVertex3f(Glfloat x,Glfloat y,Glfloat z)6。 4.3.34.3.3 纹理映射核心代码分析说明纹理映射核心代码分析说明 对于纹理映射的实现,最核心的应该就是纹理坐标的获得了,其它的参数设置是比较固 定的格式,所以这里就来分析我们如何从模型顶点坐标来得到纹理坐标。这里的实现是采用 正交投影的方式。 glBegin(GL_TRIANGLES);/三角形形式 for(int j=0;j70) glTexCoord2f(float)(CSDOpenGLApp:m_PointXnum1+106)/512, (float)(300-CSDOpenGLApp:m_PointYnum1)/300); /当该顶点是落在人脸正面左右两个外 /眼角之外的左侧,即其 x 坐标大于等于 230。 else if(CSDOpenGLApp:m_PointXnum1=230) glTexCoord2f(float)(CSDOpenGLApp:m_PointZnum1+256)/512, (float)(300-CSDOpenGLApp:m_PointYnum1)/300); /当该顶点是落在人脸正面左右两个外

温馨提示

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

评论

0/150

提交评论