河南工业大学硕士学位论文
带通滤波。由此可知,图像的拉普拉斯塔形分解与高斯塔形分解都是图像的多尺度、多分辨率分解。而且,拉普拉斯金字塔除顶层外的各层都包含了图像的重要特征信息,按照不同分辨率这些特征分别保留在不同的分解层上。拉普拉斯塔形分解过程如图5-7所示(图中金字塔以四层为例):
高斯金字塔G3Reduce+Expand-G2+LP2拉普拉斯金字塔LP3Reduce+Expand-G1+LP1Reduce+Expand-G1+LP0
图5-7 拉普拉斯塔形分解过程
(3). 由拉普拉斯金字塔重构原图像 由
式可得:
式说明,从拉普拉斯金字塔的最高层开始从上往下,按照公式
行依次递推,能够得到其对应的高斯金字塔,并最终获得原图像重构原图像过程如图5-8所示。
进
。由拉普拉斯金字塔
42
基于二维图像的三维人脸建模技术研究
拉普拉斯金字塔LP3高斯金字塔G3Expand+LP2++G2Expand+LP1++G1Expand+LP0++原图像G0
图5-8 拉普拉斯图像重构过程
上面介绍了图像拉普拉斯塔形分解和图像重构过程,下面将利用该方法消除人脸纹理图像的拼接缝隙。具体实施步骤如下:
(1). 以加权平滑算法获得人脸纹理图像为基础,逐步构造其对应的高斯金字塔和拉普拉斯金字塔。
(2). 对拉普拉斯金字塔从顶层开始进行重构,最后得到融合后的全视角人脸纹理图像。
图5-9显示了采用拉普拉斯塔形分解方法消除拼接缝隙之后的纹理图像,经过再次融合后的图像明暗不均的现象基本上完全消除。
图5-9 塔形分解图像的二次融合
43
河南工业大学硕士学位论文
5.3 纹理映射的实现
根据已经获得的三维特定人脸网格模型和全视角人脸纹理图,要想实现纹理映射必须要确定模型和纹理图象之间的映射关系,即确定网格模型上的每个三维顶点在二维纹理空间所对应的纹理坐标。 5.3.1 纹理坐标的计算
在进行纹理映射之前必须先确定模型上的每个三维顶点所对应的纹理空间的坐标。目前许多研究者都将三维人脸模型看作近似圆柱体,使用圆柱映射的方法将三维顶点映射到二维纹理图像上,从而可以得到三维顶点的纹理坐标。但实事上人头在外形轮廓上和圆柱体存在着很大的差别,它并不完全具备圆柱体的一些基本特性,使用该方法得到的纹理坐标肯定存在很大的误差。
根据前面介绍的人脸纹理图像合成过程,我们可以把模型正交展开:首先统一调整坐标系统,将三维网格模型和纹理图像统一到一个坐标系中;然后根据人脸的外部形状轮廓线,把整个人脸划分为三个部分,它们分别是:左侧面部分、正面部分和右侧面部分。从后脑勺正中线开始到人脸正面的左侧轮廓线内的部分为左侧面;人脸正面的左侧轮廓线到人脸正面的右侧轮廓线内的部分为正面;从人脸正面的右侧轮廓线到后脑勺正中线内的部分为右侧面。三个不同部分的点可以分别按照其所在的区域计算其对应的二维纹理坐标。
为了简化计算过程,在合成的全视角人脸纹理图像中标定四个点,它们分别如图5-10所示:左后脑勺中点,左外眼角点,右外眼角点,右后脑勺中点。分别记作:作:
对于左侧面个性化人脸模型上的任一点
,
与它们相对应的特定三维人脸模型上的四个点分别记
。下面讨论如
为:
何用这四个标定点来分别计算整个特定三维人脸模型中不同部分点对应的纹理坐标。
,其对应的纹理坐标
对于正面个性化人脸模型上的任一点
,其对应的纹理坐标
为:
44
基于二维图像的三维人脸建模技术研究
对于右侧面个性化人脸模型上的任一点,其对应的纹理坐标为:
图5-10 全视角纹理区域划分
利用公式5-11、5-12、5-13就能够得到整个三维特定人脸模型上任一点对应的纹理坐标,根据纹理坐标,将全视角纹理图映射到三维特定人脸模型表面上就可以得到逼真生动的三维人脸模型。
5.3.2 OpenGL中的基本纹理映射技术
本文利用OpenGL提供的函数库来完成三维人脸模型的纹理映射。纹理映射是一个非常复杂的过程,在OpenGL中实现物体表面纹理映射的一般步骤为:定义纹理图像、控制纹理、设置纹理映射方式、绘制场景给出顶点的纹理坐标和定义纹理坐标[63]。
(1).定义纹理图像包括指定纹理图像的分辨率、长度和宽度、格式、数据类型及存储地址。这里使用的纹理是前面经过图像的拼接融合得到的人脸纹理全景图,在OpenGL中定义纹理的意义就是构建一个纹理对象。函数 理
,
函
数
定
义
为
:
。其中,第一个参数
被赋值为
用来创建一个二维纹
,告诉OpenGL这里创建的纹理是一个二维纹理;第二个参数level用
来设置纹理图像的细节层次,对于我们使用的单分辨率映射,其赋值为0;第三个参数
用来描述图像数据的内部格式,其值为1到4,1表示纹理映射中仅仅使
45
河南工业大学硕士学位论文
用纹理图像的彩色分量R分量,2表示取彩色分量和透明度参量A,3表示取三个彩色分量R,G和B,4表示取R,G,B和A;第四、第五个参数分别为
和
它们
用来表示纹理图像的宽度和高度,通常OpenGL中规定纹理图像的高度和宽度必须是2的整数次幂,而且其最小值为64,否则会出现运行错误。虽然2的整数次幂是OpenGL规范中的一部分,但目前一些比较新的显卡都无此限制,为了具有通用性,本文选取的纹理图像的长度和宽度都是512;第六个参数border用来表示纹理图像的边界宽度,一幅纹理图可以在四周具有一个像素宽的边界,以便使用纹理滤波来创建平滑的纹理图,其值一般为0;参数格式为
;图像类型
,
本文中图像数据格式
取的取值为
,
,
,
和
表示纹理图像的格式和图像的保存数据类型,图像
,
,在本文中图像格式
,
,取为,,,在
;参数pixels表示纹理图像的保存位置。
(2). 控制纹理主要包括怎样将图像的纹理跟屏幕上的象素相对应、如何进行纹理缩放和纹理重复的操作。由于纹理图像是二维平面域的,而特定人脸模型是三维曲面空间域的,所以往往图像范围和像素范围无法很好的对应。为解决该问题,就需要使用插值算法,起初使用最近邻插值技术。它是一种最简单的插值方法,但该方法所获得的贴图效果很差,容易出现块状效应。为了弥补最近邻插值技术的不足,就提出了双线性插值技术。在双线性插值技术中,输出像素值是它在输入图像中应的现象。
由于纹理图像是方形的,而三维人脸模型则是一个多边形的曲面,它们之间进行纹理映射时,根据纹理映射方式的不同,屏幕像素和纹理像素之间可能是多对一的关系,这时需要放大纹理;也可能屏幕像素和纹理像素之间是一对多的关系,这时需要缩小纹理。在OpenGL中指定了怎样进行这些操作,只要给定想要的方式,这些不同的控制滤波方式就会在运行效率和图像质量之间进行折中。其函数具体定义如下:
;
,其中参数
表示所采用是一个二维纹理;第二个参数用来表示指定的控制滤波操
作方式:
或缩小滤波
;第
线性滤波方式。
三个参数为控制滤波方式的选择,本文选择视觉效果较好的
领域采样点的平均值。
这样一来,它相当于一种平滑操作。该插值技术减少了纹理图像进行缩放时出现块状效
(3). 设置纹理映射方式是指在物体表面进行纹理映射时,纹理图像是直接映射到物
46