|

「AI哲学」让人类“为自身立命”与“为AI立心”。
我们在前面章节中反复强调过,3D打印的优势就在于“批量定制”,以实现个性化制造。然而,这种追求高附加值的个性化定制,之前都是以较大的手工工作量为代价的,尤其是当需要“大批量定制”时。为提高定制效率,智能数字化技术将发挥关键的作用。比如,需要为一万名用户定制个性化的眼镜、服装、帽子、鞋子,如果使用人工逐一为每位用户进行手工测量和手工设计,工作量和成本都将变得不可接受。而应用智能数字化技术,如采用视觉计算方法,利用摄像头自动采集、分析提取每位用户的体貌个性特征,并自动根据视觉美感进行形状设计、颜色肤色搭配等,可极大地缩减定制周期,如下图所示。
图5-1 为一万名用户定制个性化的衣服鞋帽
下面(包括本章!),我们将开始我们的“技术控”之旅,希望你们能够hold住,在这期间我会不断地停下来等你,永不会放弃你,会反复用最通俗的话向你解说清楚,希望你能坚持到最后的胜利,必将有巨大的收获!
5.1.1 个性特征的描述与检测所谓“特征(Feature)”,是指“可以作为标志的显著特点”。而视觉计算中常说的图像特征,是指可对目标图像区域进行辨识的形状、纹理、颜色等特性,如角点(Corner)、边缘就是典型的图像特征。再比如,你最喜欢她笑起来眼角微微翘起的样子,OK,眼角就是一个典型特征!当然,酒窝、美人痣、疤(如果你真欣赏她的话)什么的也都算。
图像特征描述是计算机视觉研究领域的一个基本问题,在寻找两幅相关图像中的对应点以及物体特征描述中有着重要的作用。它是许多方法的基础,因此也是目前视觉研究中的一个热点,每年在视觉领域的顶级国际会议ICCV/CVPR/ECCV上都有高质量的特征描述论文发表。
在介绍图像特征之前,我们首先仔细看一下什么是图像。我们平常数码相机、手机拍摄的照片就是图像!先来看下图中左边的彩色图像,可以看出一张图像是由很多个称之为“像素”(Pixel)的规则小正方形格子组成的。每个像素各有一种颜色,用R、G、B(红、绿、蓝)这3种基本色来合成,每种基本颜色分量都分成了256个等份(0~255)。以R(红色)为例,0表示不含有任何红色,255表示红色的含量是满的。如果,我们把左边的彩色图像转换成灰度,就变成了右边的黑白照片。实际上,用“黑白”这个词是不准确的,因为黑白只表示两种色彩:非黑即白。而灰度(Gray)实际上也分成了256个等分,表示256个等级的图像亮度,其中0表示全黑,255表示全白。说起灰度,让我想起了网上的一句小诗:“如果生命的两端不是黑色的,人们又怎会爱上她灰色的中部?在生命灰暗的底色里,我愿做一条激情奔涌的河流,于波澜壮阔中探寻生命的灵动。”
图5-2 像素组成的彩色图像和灰度图像 (图片来源:Tiexue)
下面,以一种名叫FAST(Features from Accelerated Segment Test)的特征点检测方法为例,介绍一下特征的描述和检测。
FAST特征点检测是公认的比较快速、简单、有效的特征点检测方法,只利用周围像素的比较信息就可以得到特征点。FAST特征检测算法来源于Corner(角点)的定义:只选取候选点周围的一些像素点进行比较,来确定此点是否是特征点。如果周围半径内有足够多的点都与候选点的像素灰度值差别很大,则认为该候选点是特征点。
这其实很好理解:一位美女长得好不好看,我们往往是通过把她和周围的其他女生进行比较来评价的。只要她能在这个局部小圈子中鹤立鸡群,她就是一个吸引眼球的“特征点”。如下图所示是一个半径为3的特征点的例子,因此周边共有16个像素点需要比较。
图5-3 半径为3的特征点判定(周边共有16个像素点需要比较)(图片来源:Edward Rosten)
以上思路可用非常简单的符号来表示,一目了然。设为处于中心的候选点的灰度值,为周围某一点的灰度值,如果它们的灰度值差大于某个阈值,则可认为差别很大。我们数出与点差别很大的周围点共有个,若大于给定阈值(一般为周围点数的四分之三),则认为就是一个特征点。
提示:为了使速度更快,还可采用额外的加速。比如,测试候选点周围每隔90°角的4个点,应至少有3个和候选点的灰度值差足够大,否则就不用再计算其他(16-4=12个)点了,直接认为该候选点不是特征点。
在OpenCV(章节“5.23.1 OpenCV与AdaBoost人脸检测”)中,非常简单的几条编程语句就可实现这个特征点检测算法。
//定义所输出的特征点集合keyPoints
std::vector<KeyPoint> keyPoints;
//构造FAST特征描述符对象
FastFeatureDetector fast(40);
//进行特征点检测
fast.detect(image,keyPoints);
运行它!结果如下图所示。怎么样?确实很“智能”地把很多角点给找出来了,是不是非常简单?
图5-4 FAST特征点检测案例
OK,现在是不是信心满满?我们接着往下介绍一种名为Haar-like的特征。Haar-like特征分为4类:“边缘特征”、“线特征”、“中心环绕特征”和“对角线特征”,如下图所示。每一类特征还分很多种,每种构成了一个特征模板。以边缘特征为例,共有正的、斜的4种特征模板。每个特征模板内有白色和黑色两种矩形,该模板的特征值定义为:“白色区域像素之和”减去“黑色区域像素之和”。
图5-5 各个Haar-like特征模板
可能你会有些迷糊:这些所谓的特征不就是一堆堆带条纹的矩形吗?有正的,还有斜的,到底是干什么用的呢?我这样给出解释,将上面的任意一个矩形放到人脸区域上,然后,将白色区域的像素和减去黑色区域的像素和,得到的数值我们暂且称之为人脸特征值。比如将线特征的某个矩形模板放在眉毛处,得到了一个特征值a。但如果你把这个矩形模板放到一个非人脸区域,比如猴子的眉毛处,那么计算出的特征值b应该和人脸特征值a是不一样的。而且我们希望越不一样越好(也即可区分性越好),这些矩形方块的目的就是把人脸特征量化,以区分人脸和非人脸。
可以看出,Haar-like是非常原始、粗粒度的,但优点是计算速度快。因此,为了增加区分度,可以对多个矩形特征组合(比如将检测眉毛的某个线特征模板和检测脸部轮廓的某个边缘特征模板进行组合)得到一个区分度更大的特征值。那么什么样的矩形特征怎么样地组合到一块可以更好地区分出人脸和非人脸呢?这就是AdaBoost算法要做的事了,详见本章“5.23.1 OpenCV与AdaBoost人脸检测”。
最后再介绍一种直方图统计特征。直方图(Histogram)又称柱状图,是一种统计报告图。灰度直方图是指对图像的灰度信息进行统计,它表示图像中每种灰度级(0~255)的像素的个数,反映图像中每种灰度出现的频率。
直方图是图像最基本的统计特征:直方图的横坐标是灰度级(0~255),纵坐标是该灰度级出现的频率(也即个数)。如下图右上所示,要生成灰度直方图,先将彩色图像转换成灰度图像,再做直方图统计,即统计每个灰度颜色(0~255)出现的像素个数。注意:不同的直方图代表不同的图像,同一直方图却未必表示图像相同。
图5-6 统计像素的灰度和颜色个数:灰度直方图(右上)和彩色直方图(右下)
除了灰度直方图,还经常直接用到彩色直方图(如上图右下所示),也即不用将彩色图像转换成灰度图像。最常用的颜色空间有:RGB颜色空间、HSV颜色空间。彩色直方图能够简单描述一幅图像中颜色的全局分布,即不同色彩在整幅图像中所占的比例,特别适用于描述那些难以自动分割的图像和不需要考虑物体空间位置的图像。其缺点在于:它无法描述图像中颜色的局部分布及每种色彩所处的空间位置,即无法描述图像中的某一具体的对象或物体。这也是统计本身的特点所决定的。比如,我只告诉你房间里有4个学生,那么这4个人都处在什么具体位置?身高、体重各为多少?有几个男生几个女生?是否戴眼镜?等情况就不得而知了。
小结一下。本节中共介绍了3种类型的特征,其中特征提取最重要的一个特性是“可重复性”:同一场景的不同图像所提取的特征应该是相同的。比如一位美丽的姑娘的右嘴角上有一颗美人痣,那么无论给她拍多少张照片,每张照片的右嘴角位置都应该有这颗美人痣。对于多视角特征匹配而言,可重复性约束是关键。
图像特征描述的核心问题是不变性(健壮性)和可区分性。不变性指的是对视角变化的不变性、对尺度变化的不变性、对旋转变化的不变性、对形状的不变性等,这对于物体识别中处理不同视角、遮挡、复杂背景等复杂情况尤为重要。
一个优秀的特征描述符还应该具有很强的可区分性。比如,一个好的特征描述符甚至可以区分出两个双胞胎姐妹外貌的细微差别。然而,特征描述符的可区分性的强弱往往是和不变性相矛盾的,也就是说,一个具有众多不变性(如旋转不变性、尺度大小不变性)的特征描述符,它区分局部图像内容的能力就稍弱;而一个非常容易区分不同局部图像内容的特征描述符,它的健壮性(不变性)往往比较低。如我们通过统计局部图像灰度直方图来进行特征描述,这种描述方式具有较强的不变性,对于局部图像内容发生旋转变化等情况比较健壮,但这种统计特征的区分能力较弱(或者说描述能力不够精确),无法区分两个灰度直方图相同但内容不同的局部图像块。更形象的例子:两张直方图都统计出房间里有4个学生,但一个房间是4个学生站在4个角落,另一个房间却是4个学生站在房间中间。
除了本节介绍的3个特征描述符,目前还有很多优秀的其他特征描述符,如SIFT(Scale Invariant Feature Transform)、SURF(Speeded Up Robust Features)、DAISY、MROGH、BRIEF等,各适用于不同的应用场景。上述这些特征描述符都是基于手动设计得到的,也有一些研究试图利用机器学习的方法,通过数据驱动得到想要的特征描述符。这类特征描述符包括PCA-SIFT、Linear Discriminative Embedding、LDA-Hash等。特别是深度学习(见章节“5.27 【3D智能十八篇之十六】深度学习:像人脑一样深层次地思考”),使得自动学习特征成为了可能,而无须专家仔细设计和选择。
5.1.2 个性特征的定位与匹配在上一节中我们通过特征描述符自动检测到了各种特征,如角点特征和边缘特征。但是,计算机是不知道哪个角点是眼角、哪个是嘴角、哪条线是眉毛的,这就需要进行特征的自动定位和匹配。国内外学者做了大量关于人脸特征点定位方面的研究。最初,一些学者利用视觉底层的特征,如上节中提到的角点、边缘提取等,但是这些方法的定位效果不够精确。后来,人们认识到仅用一些低级特征和基本的图像处理方法是远远不够的,应该对研究对象建立相应的先验模型(即预先定义的模型,比如我们告诉计算机两只眼睛共有4个眼角),以便进行精确的人脸定位。
我们先来看看如下图所示的各种手的形状,可以说各不相同,非常“个性化”。
图5-7 各种手的形状
那么,我们能否提供一个统一的数学模型,对这些手的形状进行统一描述呢?这就需要我们首先把这些形状的“共性”提炼出来,然后加入一些个性化的参数信息,这就可以用这个先验模型来精确描述某一具体的形状了。比方说,我们要画一只手的形状,正常人的手指都是5个,这就是共性信息;而同时每个人的手指粗细长短各不相同,这就是个性信息;在共性的基础上加入这些个性化参数信息,就可以把某一个人的手精确勾画出来。
由于计算机直接表示复杂曲线的形状是比较困难的,所以我们可以用一定数量的标记点(Landmark Points、Markers)来近似。比如,我们可以在手的轮廓上标记很多个特征点来描述手的形状,如下图所示。这种模型就称为点分布模型(PDM,Point Distribution Model)。
图5-8 手的特征点分布模型
本节中我们将重点介绍人脸特征定位,可广泛用于人脸识别、表情编辑、人脸跟踪、年龄估计、司机的驾车安全提醒等。这里介绍最著名的主动外观模型(AAM,Active Appearance Models)[21],其也是属于点分布模型的一种。AAM首先采用统计分析的方法对几百幅手工标记的人脸图像进行训练,构建出人脸的形状模型和纹理(纹理可理解为图像的颜色或明暗变化信息)模型。根据建立好的这个模型,不断地“主动(Active)”调节模型参数(包括形状参数和纹理参数)对图像中的人脸进行匹配运算。一旦匹配完成,也就同时实现了将AAM模型上预定义的那些点定位到图像上的人脸轮廓上。
下面我们对形状模型和纹理模型分别进行介绍。
形状模型
形状模型需要对训练数据(几百幅人脸图像)中每一幅图像手工标注特征点,以此来获取人脸样本的形状信息。比如,为了建立模型,我们对每一幅训练人脸标注了68个特征点,这些特征点标记在脸的外部轮廓和五官的边缘上,覆盖了人脸的整个形状,如下图所示。
图5-9 标有特征点的训练人脸 (图片来源:Tim Cootes)
这样,脸部的形状可以描述为一系列标记点的坐标集合,设标记点有N个(本例中N=68),每个标记点由一个二维坐标确定(X轴和Y轴),因此所有这些标记点将组成一个2N维的向量,将某一人脸样本的形状描述为一系列标定点的坐标集合:
其中指某一人脸样本的形状,代表图像上第n个标记点的X坐标和Y坐标。
形状归一
由于样本库中每张人脸的大小、位置、摆放角度都存在很大的差异,为了便于对库中所有人脸的形状进行统计建模,应先对这些图像形状进行归一化。而归一化是指以某一个参考形状为基准,将其他的形状进行旋转、平移和缩放并尽可能地与参考形状对齐。注意:归一化只是对形状进行了对齐,并没有对形状进行形变,如非均匀拉伸和扭曲。
下图是几百幅人脸图像中所有特征点的集合,以及把这些形状对齐后的集合。从左右两幅图的对比中可以看到,对齐后的形状点基本在均值形状附近变化。这表明,人脸形状确实可以用一个统一的模型来进行描述,无论是描述共性,还是个性化的差异。
图5-10 左:形状对齐前的点集合;右:形状对齐后的点集合
然后,对对齐后的数据进行主成分分析(PCA,Principal Component Analysis,又名奇异值分解SVD、因子分析Factor Analysis、Karhünen-Loève变换),将这些原本海量高维的数据降到低维空间,保留住信息量大、最能代表原事物的成分(维度),而将信息量小或冗余相关的成分(维度)去掉。这样,任何人脸形状都可以用下面的公式来合成:
(1)
其中,是对所有人脸形状进行平均后得到的平均形状(常量),是PCA后所得到的人脸形状特征矩阵(常量),是形状模型参数(变量)。这样,如下图所示,我们只需简单地改变参数值的大小,就可以合成出不同的人脸形状(其中,正中间的人脸形状为“看上去完美无缺陷”的平均形状)。所谓合成人脸,也即生成一张人脸库中原本不存在的人脸,比如先取刘德华人脸形状的70%,再取赵本山人脸形状的20%,最后再取赵薇人脸形状的10%,合成得到一张全新的人脸。
提示:AAM模型本质上是一种“形状混合人脸”技术,其认为所有人脸构成了一个线性空间,任意一张人脸可以用有限个人脸基的线性组合来逼近。
图5-11 改变参数来合成不同的人脸形状
纹理模型
纹理模型的构建方法与形状模型类似,首先把每个训练样本形变对齐到同一个参考形状,使两幅图像中人脸区域的像素点数目一致,且使特征点完全对齐(左眼角对左眼角、眉心对眉心等)。将人脸形状形变到参考形状的方法有很多类,有基于三角形网格的(如下图所示)、基于对应点的、基于线段的形变方法等。
图5-12 将两幅人脸形状用三角形网格进行对齐 (图片来源:CMU)
然后从变形对齐后的图像中提取每个像素点的颜色灰度值,并把这些纹理信息(在AAM中,纹理即为图像灰度值)记为向量(其中M为图像中人脸区域的像素点总个数):
对这些对齐后的纹理向量做PCA处理就可以得到纹理模型:
(2)
其中,是对全部人脸样本进行平均后得到的平均纹理(常量),是体现颜色灰度变化模式的特征矩阵(常量),是纹理模型参数(变量)。类似地,如下图所示,我们只需简单地改变参数的值,就可以合成出各种不同的人脸纹理!其中,中间的人脸纹理为“看上去完美无缺陷”的平均纹理(是不是最红润光滑、吹弹可破?)。
图5-13 合成的各种人脸纹理,其中中间为平均纹理
将上面的形状模型(1)和纹理模型(2)进行融合,我们就得到了主动外观模型(AAM),其将人脸形状和人脸纹理用一个统一的公式来表达:
其中,是对全部人脸样本进行平均后得到的平均外观,也就是章节“5.16.4 人是种视觉动物:如何美化你的照片”中被视为美学一大发现的中性脸或者完美脸(不仅形状最完美而且肤色最佳)。这时,我们只需通过改变参数的值,就可以用AAM合成各种不同的人脸图像了。
使用AAM进行人脸特征点定位,实际上就是用AAM模型生成一张合成图像去逼近目标人脸图像,即最小化两者的差值,如下图所示。这个过程需要不断地调整来生成最逼近的合成图像,其本质上是一个非线性迭代优化问题。目前有各种快速的求解方法,如反向组合图像对齐(ICIA,Inverse Compositional Image Aligment)算法等,可获得实时(可达230帧/秒)的人脸特征点定位和匹配。
图5-14 左:目标人脸;右:主动外观模型合成的人脸
如果我们将可变形模型的思想由二维图像扩展到三维,就有了三维形变模型(3DMM,3D Morphable Model)[26],如下图所示。注意:这次最左边的是平均脸,而不是中间的。
图5-15 从左到右:平均脸、50%的目标人脸、目标人脸 (图片来源:Volker Blanz)
特征匹配定位成功后,我们就自然实现了从单张正面照片进行3D人脸重建,如下图所示,参见章节“5.16.2 基于单张照片的3D人脸重建及立体浮雕”。
图5-16 通过单张图片进行3D人脸重建,并将照片切换到新视角
5.1.3 个性化形状的编辑与合成我们经常需要对形状做一定的编辑处理,比如将下图中左边的龙的嘴巴打开,生成右边的形状。
图5-17 对龙的嘴部形状进行编辑(图片来源:Olga Sorkine)
这里涉及细节保持(Detail-Preserving)的形变(Deformation)编辑(Editing)技术[27]。如下图的左边所示,每个3D模型实际上由一个个顶点,以及连接它们的细小三角形面片连接而成。
图5-18 局部形状细节的编码
上图右边的图对某一个顶点以及它周围的一圈顶点进行了放大显示。我们可对这个局部区域的形状(朝向、曲率大小、局部面积、连接结构、夹角等)进行一个编码并保存起来,得到一个向量:
其中,是与顶点相邻接的一圈顶点集合;包含了顶点与某一邻接顶点的局部参数化信息,如连接拓扑结构、夹角和等。注:曲率可理解为中心顶点高出周围一圈邻接顶点的方向和程度,也就是局部的凹凸情况。
不要小看了这个局部形状编码,“牵一发而动全身”。因为所有的顶点都是相连的、“一环紧扣一环”的,如果我们对所有顶点都计算各自的局部形状编码,并统一进行全局处理,那么就可对全局形状进行形变编辑和合成。
所谓细节保持的形变编辑,指的是在形变之后,总体的形状姿态虽然发生了改变,如图5-141所示的龙的上颚的朝向发生了改变,每个顶点的局部形状向量的朝向也都发生了改变。但是,局部的细节却是刚性保持的。用公式表示就是,新点的局部形状向量应该是由原来点的局部形状向量经刚体变换得到,这里我们采用最小二乘形式(假设3D模型共有个顶点):
具体来说:每个顶点的局部形状向量的长度(即该点的曲率大小)应该是保持不变的,而且公式中的局部结构参数(即与周围点的连接结构、夹角)也应该是保持不变的。唯有这样,形变编辑后的龙的上颚才能看起来是龙的上颚形状,而不是一只老鼠的上颚形状,抑或是被揉成了一团面糊的杂乱形状。更多、更具挑战性的大角度形变如下图所示。
图5-19 大角度形变的例子
提示:三维空间中的形变,在数学本质上是一个非线性系统。小角度的形变因为变化不大,所以可用一个线性系统来近似地快速求解。而大角度形变,要么直接费时地求解非线性系统,要么通过迭代多次线性系统来逼近,还可用由粗到精的多尺度策略来分而治之。一般而言,非线性系统的线性化一般来说有两种思路。一种是把非线性系统得到的公式简化近似(如利用泰勒展开)为线性的,但是这种简化的方式会使方程的解准确度受到影响,因此需要反复迭代修正。另一种是修改原来的模型,使系统本身变成一个线性系统,即把输入和输出非线性地变换到另一个空间,但在经过变换的空间里,输入和输出是线性的(类似的思想在章节“5.19.2 支持向量机SVM与逻辑回归LR”的高维线性可分中也有体现)。在变换的模式下,虽然输入和输出本质上还是非线性的,但是核心计算部分变为线性的。整个数学模型非线性的部分只位于变换模块,而这个非线性的变换数值计算常常比较容易,其计算时间可忽略不计。
基于局部形状编码(其实它还有一个很学术的专业名称:拉普拉斯微分坐标Laplacian Differential Coordinates),我们还可实现一种很有趣的操作:形状合成(混搭,Shape Composition、Shape Mixing)。如下图所示,我们可以将一堆形状部件“粘”在一起,而在部件之间的交界处,形状的过渡会保持平滑、自然──这可通过对交界处的形状微分坐标进行插值并把产生的局部扭曲失真均匀地扩散分摊到整片区域来获得。
扩展:形变方法主要分为基于表面的和基于空间的方法。基于空间的形变方法不直接形变物体,而是通过对物体所嵌入的空间进行形变来对物体形状进行修改;类似于你弯曲一块汉堡,则夹在里面的热狗也会跟着变形。代表性的方法有自由形变(FFD)方法,其可分为基于栅格的,基于曲线的,或基于点的方法。同时还可定义不同的基函数来控制空间形变,如基于径向基函数(Radial Basis Function)或涡状(Swirl)函数。在处理空间形变时需要考虑的问题是避免自相交,以及保持全局或局部体积。
而本节中所介绍的基于表面的形变方法直接在形状的表面定义形变。作为一种局部内蕴特征描述符,离散微分属性(如拉普拉斯坐标或者梯度场)已经被用于细节保持的网格编辑。然而,顶点的拉普拉斯微分坐标是个带方向的向量,因此不是旋转不变的(Rotation-Invariant),须通过某种方式进行转换以匹配到期望的新方向,如显式地通过启发式的方法(或用户调整)或隐式地采用迭代非线性方法,否则网格细节形变后将产生扭曲。
下图分别是美国UIUC大学、微软亚洲研究院、浙江大学(茶壶与门环铺首[28])、以色列Tel Aviv大学(兔子与翅膀[27]),以及Autodesk的MeshMixer进行形状合成的例子,是不是很魔幻、很“九头怪”化?利用形状合成,你完全可以先从网上找到“钢铁侠”的3D全身模型,然后只将他的脸部替换成你的脸,相当于你就穿上“钢铁侠”的行头了!然后,将这个“换脸”后的全身模型3D打印出来,摆在自己的桌上。
图5-20 形状合成的例子(图片来源:UIUC、微软、浙江大学、Tel Aviv、Autodesk)
形状合成将一个模型(大多数情况下只是“残肢、断腿、换脸”)嫁接到另一个模型上,还有一种更酷的技术叫形状混合(Shape Blending)、形状插值(Shape Interpolation),它将两个(或多个)模型进行逐点整体融合。如下图上方所示,我们将一只狮子的50%,一只猫的30%,一只骆驼的20%合在一起,进行“混血杂交”,得到下图上方右边的新物种模型。是不是有点意思呢?如下图下方所示,我们将一位少女形状渐变(Morphing)成一只麋鹿,中间生成了一系列的模型,代表着不同比例的形状混合效果。形状渐变在电影动画中应用很多,比如变形金刚中的汽车变机器人。
图5-21 形状混合与形状渐变
要实现形状渐变,首先必须在两个(或多个)模型之间建立一对一的双射(Bijective Mapping)。这个过程也被称为一致对应(Consistent Correspondence)或交叉参数化(Cross-Parameterization),即,将具有不同拓扑连接的3D模型(比如狮子模型S有5000个顶点,骆驼模型T有10000个顶点)转化为兼容网格T’(Compatible Mesh)。兼容网格指具有相同拓扑的网格(比如让骆驼模型变形成狮子模型的形状,但仍保持10000个顶点),同时又保持住细节特征(不能有大的失真扭曲,比如骆驼眼睛本应变形成狮子眼睛圆圆的形状,却弄成三角眼了;骆驼表面原本均匀的局部参数化信息,你可想象成骆驼腿上穿了带有均匀条纹的黑色长丝袜,被扭曲得错乱畸形,甚至翻转褶叠了),其中涉及保角映射(Conformal Mappings)。在建立一致对应之后,剩下来的事情就相对简单了,确定对应点的插值路径(Trajectory)即可。最简单的方法是直接对模型T和T’ 线性插值,当然,你还可使用非线性插值(如非线性梯度场插值)以克服大角度旋转可能引发的塌缩(Shrinkage)现象。
提示:除了直接构建两个3D模型(S、T)的一致对应,还可采用间接的方法,即构造一个中转用的公共参数化域C(如平面、球面、柱面、三角分区平面等),之所以选择这些2D凸平面域或球域,是为了便于建立保角映射。然后,两个模型就被分别映射到这同一个公共参数化域上去,并获得了两个保角子映射(、)。最后,两个模型的一致对应(映射)就可通过两个子映射的合成来获得()。这其实很好理解,为了建立一条大胖鱼和一条小瘦鱼全身的一一对应,我们把它们缩小或放大对齐到同一大小的中间域即可,这样它们全身每个点就可以很自然地被一一对应起来。间接方法的难点在于如何高效并健壮地对复杂形状构造良好的(well-shaped)兼容分区(compatible patches),尤其在拓扑复杂或者狭长的区域时。
本节介绍的只是简单的几何形变编辑。如果需要进行更复杂的高层语义编辑,如改变人脸表情(让3D人脸模型对你呵呵地傻笑),请参考章节“5.16.5 3D人脸表情形变与编辑”。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2026-7-4 23:00
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社