Nothing Special   »   [go: up one dir, main page]

CN1404016A - 融合多视角、多线索二维信息的人脸三维模型的建立方法 - Google Patents

融合多视角、多线索二维信息的人脸三维模型的建立方法 Download PDF

Info

Publication number
CN1404016A
CN1404016A CN 02146278 CN02146278A CN1404016A CN 1404016 A CN1404016 A CN 1404016A CN 02146278 CN02146278 CN 02146278 CN 02146278 A CN02146278 A CN 02146278A CN 1404016 A CN1404016 A CN 1404016A
Authority
CN
China
Prior art keywords
mrow
msub
face
mtd
dimensional
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 02146278
Other languages
English (en)
Other versions
CN100483462C (zh
Inventor
徐光祐
张辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CNB02146278XA priority Critical patent/CN100483462C/zh
Publication of CN1404016A publication Critical patent/CN1404016A/zh
Application granted granted Critical
Publication of CN100483462C publication Critical patent/CN100483462C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Image Analysis (AREA)
  • Image Processing (AREA)

Abstract

融合多视角、多线索二维信息的人脸三维模型的建立方法属于计算机人脸图像重建技术领域,其特征在于:首先用标定好的上下两台立体摄像机拍摄建模对象的人脸,得到人脸在无表情变化时从正面逐步转到侧面的视频序列;再用全自动的姿态估计算法得到序列中各时刻的精确的姿态参数;接着在模型和姿态二者的初始化之后,根据两类二维线索分别抽取三维信息:一类是基于图象间对应点进行立体重建,另一类是模型投影轮廓与图象轮廓的匹配、修正;最后,根据融合在多视角中提取出的、对应于不同二维线索的三维信息建立人脸模型。它得到的人脸模型有更细致、更精确的形状,并能做MPEG4(运动图像压缩编码组织标准4)兼容的人脸动画。

Description

融合多视角、多线索二维信息的人脸三维模型的建立方法
技术领域
融合多视角、多线索二维信息的人脸三维模型的建立方法属于计算机人脸图像重建技术领域。
背景技术
现有的根据图象创建三维人脸模型的方法缺乏从多种二维线索中提取三维信息并进行融合的策略。Kang,Sing Bing等人在“image method and apparatus for semi-automatically mappinga face on to a wireframe topology”(United States Patent 6,031,539)的专利技术中提出了一种根据单幅正面图象创建人脸模型的半自动方法。该方法的原理是:自动地检测出人脸图象上的多个特征点,进而根据特征点定位面部的界标点(landmark points),然后据此得到人脸线框模型中所有网格点的位移,创建出与该图象相对应的人脸模型。该方法的主要缺点是没有充分利用各视角的信息,这限制了模型的精确程度。
在“利用桌面摄像机克隆人脸”(《第八届计算机视觉国际会议论文集》,2001,第二卷,pp.745-745)一文中,作者张正友、Z.Liu等人提出了一种利用单目视频中的二维对应创建人脸模型的方法。该方法的原理是:手工选择两幅接近正面视图的图象,通过摄像机自标定和简化的人脸形状模型,基于二维对应用非线性求解的办法得到特定人的模型。该方法虽然利用了多视角信息,但只是使用了多幅图象上对应的二维点信息而没有充分利用其他的形状约束,得到的模型不够准确,尤其是在纹理不丰富的区域更是如此。
这些方法有一些共同的缺点:(1)模型不够精细;(2)不能做MPEG4(运动图像压缩编码组织标准4)兼容的动画。
发明内容
本发明的目的在于提供一种融合多视角、多线索二维信息的人脸三维模型的建立方法。
本发明涉及一种可动画三维人脸的建模方法,首先用标定好的立体摄像机拍摄建模对象的人脸从正面逐步转到侧面的视频序列(拍摄过程人脸应无表情变化);然后是一个全自动的姿态估计算法以得到序列中各时刻的精确的姿态参数;接着在模型和姿态初始化之后,根据两类二维线索通过不同的处理方案抽取三维信息:一类是基于图象间对应点进行立体重建,另一类是模型投影轮廓与图象轮廓的匹配、修正;最后,融合在多视角中提取出的、对应于不同二维线索的三维信息建立人脸模型。本方法与现有方法比,得到的人脸模型有更细致、更精确的形状,并能做MPEG4兼容的人脸动画。
本发明的特征在于:
1.它首先用与人脸上、下位置相对应的两台相同且外极线方向基本沿垂直方向的摄像机在人脸无表情变化的情况下拍摄建模对象的人脸从正面逐步转约90度到侧面的视频序列,再用两块相同的采集卡来采集上下两路同步视频并输入计算机中;然后,从人脸的通用模型Faceg开始,根据获得的建模对象的二维信息逐步进行修改,最终得到特定人的人脸模型Faces,其中修改的只是人脸上的三维结点列表P中的三维点坐标,而人脸上的三角形面片列表F保持不变,即只改变模型形状P而模型的拓扑结构F不变;具体而言,它依次含有如下步骤:
(1).输入立体视频序列IL,t和IR,t
L,R对应于两台摄像机,t=1,…,N,表示N帧不同时刻的图像:I则是由像素组成的二维数组,每个像素包括R、G、B三个分量;t=1的时刻对应于人脸正面姿态,通过人的判断手工选择;
(2).姿态估计,即求解人头旋转过程中的姿态参数(即刚体变换系数):
用下述刚体变换公式表示上述图象序列中人脸的帧间运动:
Mt+1=RtMt+Tt,t=1,…,N-1,
Mt、Mt+1分别表示第t帧、第t+1帧时人脸上任一点在L摄像机坐标系中的坐标;Mt、Mt+1是人脸上的同一位置在不同时刻的三维坐标,即是帧间三维对应点;用可靠三维点的运动就可估计姿态参数;
{Rt,Tt,t=1,…,N-1}是第t帧到第t+1帧姿态参数的旋转和平移分量;
姿态估计依次含有如下步骤:
(2.1),起始时刻:先进行二维特征的检测和匹配,再通过立体重建得到起始时刻的三维点:
首先,设置特征检测帧t0=t,并在IL,t图上作二维特征检测,即选择那些局部灰度变化丰富的点即为在跟踪和匹配时可靠程度较高的点作为特征点,其步骤如下:
用已有的KLT算法计算IL,t图上特征点p(x=i,y=j)处的图像变化程度G(i,j): G ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky g → ( i + ii , j + jj ) g → T ( i + ii , j + jj ) , 为待测点p处图像的梯度向量: g → ( i , j ) = gx gy T = [ I ( i + 1 , j ) - I ( i - 1 , j ) 2 I ( i , j + 1 ) - I ( i , j - 1 ) 2 ] T ,
I(i+1,j)为该点处图像的灰度,余类推;
以待测点p为中心的窗口W的尺寸为(2*blockx+1)*(2*blocky+1);然后再用已有的matlab工具包求出G的最小奇异值sing_min,再选择sing_min很大的点p为检测出的特征点;把在t时刻检测出的特征点记为{pL,t(k)},L,t表示图象序号,K(t)是特征点总数,k为其标号,1≤k≤K(t);
其次,对同一时刻两个摄像机L,R拍摄同一场景得到的两幅图像即立体图对作二维特征匹配;同一个三维点在不同图像中的投影都为二维点,它们之间互称为二维对应,立体图对间的二维对应称为匹配:
对于IL,t图中某一点pL,t(k)=(xL,t(x)yL,t(k))T,它的匹配点pR,t(k)=(xR,t(k)yR,t(k))T应位于一条由pL,t(k)决定的直线上,在这个一维空间中,选择使一个局部窗口W内总灰度差异最小的点作为pL,t(k)的匹配点pR,t(k),总灰度差异的表达式: Diff ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky ( I L , t ( x L , t ( k ) + ii , y L , t ( k ) + jj ) - I R , t ( i + ii , j + jj ) ) 2
(i,f)是直线
Figure A0214627800162
F上的任一点;记时刻t的匹配结果为{pR,t(k)},总数目为K(t)个,每点都与pL,t(k)相对应,在下述公式表示的直线上搜索,使Diff(i,j)最小的位置: p L , t ( k ) 1 T F p R , t ( k ) 1 = 0 ,其中: F = f L 0 u OL 0 f L v OL 0 0 1 - T 0 - T c , z T c , y T c , z 0 - T c , x - T c , y T c , x 0 R c f R 0 u OR 0 f R v OR 0 0 1 - 1 ,fL,fR,uOL,vOL,uOR,vOR为摄像机内参数,已知量;Rc,Tc=[Tc,xTc,yTc,z]T分别为旋转和平移分量,属摄像机外参数,已知量;
再次,在获得同一时刻立体图对间的匹配结果pL,t和pR,t后,通过立体重建得到用摄像机坐标系表示的三维点Mm,t,m为摄像机L或R,Mm,t为t时刻三维点在m摄像机坐标系中的坐标;
根据两摄像机的配置关系式:
ML=RcMR+Tc,ML、MR分别是同一点在这两个摄像机坐标系中的坐标;以及摄像机透视投影公式: s m A m - 1 p m , t 1 = M m , t ,sm(即sL或sR)是待定的比例因子(由稍后的公式求出),得到三维点在摄像机L、R中的坐标ML,t和MR,t M L , t = 1 2 ( s L A L - 1 p L , t 1 + s R R c A R - 1 p R , t 1 + T c ) ; A L = f L 0 u OL 0 f L v OL 0 0 1 , A R = f R 0 u OR 0 f R v OR 0 0 1 ; S L S R = ( B T B ) - 1 B T T c , B = [ A L - 1 p L , t 1 - R c A R - 1 p R , t 1 : M R , t = R c - 1 ( M L , t - T c ) ;
在姿态估计的余下部分,三维点都用L摄像机坐标系中的坐标来表示,因此省略下标L,即将ML,t简记为Mt
(2.2),后继时刻:对t+1时刻的立体图对用KLT算法进行二维特征跟踪,再同样通过立体重建得到各后继时刻的三维点;跟踪是指同一摄像机拍摄的不同时刻图像间的二维对应:
在二维特征跟踪时,设检测的特征点在图像Im,t(p)(m为L或R)上,p(x=i,y=j)是任一特征点,则其在图像Im,t+1上的跟踪结果为
Figure A0214627800171
,其中 d → = G - 1 e → ,G已如上述,而 e → ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky g → ( i + ii , j + jj ) - ( I m , t + 1 ( i + ii , j + jj ) - I m , t ( i + ii , j + jj ) ) 记跟踪得到的特征点为{pm,t+1(k)},m表示L或R,t+1为时刻:对于摄像机L为: p L , t + 1 ( k ) = p L , t ( k ) - d → L , t ( p L , t ( k ) ) , 1 ≤ k ≤ K ( t ) ; 对于摄像机R为: p R , t + 1 ( k ) = p R , t ( k ) - d → R , t ( p R , t ( k ) ) , 1 ≤ k ≤ K ( t ) ;
根据任一对匹配的跟踪点计算三维点{Mt+1(k)|k=1,…K(t)}(如前所述,这里省略了下标L); M t + 1 ( k ) = 1 2 ( s L A L - 1 p L , t + 1 ( k ) 1 + s R R c A R - 1 p R , t + 1 ( k ) 1 + T c ) ; 其中 S L S R = ( B T B ) - 1 B T T c , B = [ A L - 1 p L , t + 1 ( k ) 1 - R c A R - 1 p R , t + 1 ( k ) 1 ] :
(2.3),姿态参数初始化:根据两个时刻t和t+1之间的一组三维对应点{Mt(k)|k=1,…,K(t)}和{Mt+1(k)|k=1,…,K(t)},和表示可靠性的序列{bReliablek},k=1,…,K(t)从式Mt+1(k)=RtMt(k)+Tt,t=1,…,N-1中用基于最小中值的鲁棒估计算法求解Rt,Tt
设:定义并不断更新布尔数组{bReliablek}为可靠度量序列,Yes表示可靠,No表示不可靠,其中取值为Yes的项的标号为{ks},s=1,…,Kr(t),Kr(t)是取值为Yes的项的总数,从其中挑出Num_subset个子集,每个子集含有三对三维对应点,即{Setn={N1,n,N2,n,N3,n}},n=1,…,Num_subset,1≤N1,n,N2,n,N3,n≤Kr(t)),每个三元子集中三维对应点为: { M t ( k N 1 , n ) , M t ( k N 2 , n ) , M t ( k N 3 , n ) } { M t + 1 ( k N 1 , n ) , M t ( k N 2 , n ) , M t + 1 ( k N 3 , n ) } ,可简记为{(Mim,Mim’)|im=0,1,2},它表示三对不共线的三维对应点,Rt,Tt满足Mim′=RtMim+Tt|im=0,1,2;然后从下列公式中求出R和T(略去下标t): R = I + sin | | r | | | | r | | [ r ] x + 1 - cos | | r | | | | r | | 2 [ r ] x 2 , 其中 r = θ * r ^ , θ = arccos ( r ^ × dir 1 ) · ( r ^ × dir 1 ′ ) | | ( r ^ × dir 1 ) · ( r ^ × dir 1 ′ ) | | , r ^ = ( dir 1 ′ - dir 1 ) × ( dir 2 ′ - dir 2 ) | | ( dir 1 ′ - dir 1 ) × ( dir 2 ′ - dir 2 ) , 是旋转的中心轴,称旋转轴,3*1的向量;θ是绕 的旋转角; dir im = M im - M 0 | | M im - M 0 | | , im = 1,2 ; dir im ′ = M im ′ - M 0 ′ | | M im ′ - M 0 ′ | | , im = 1,2 ; [r]x是根据3*1向量r=[rxryrz]T定义的反对称矩阵: [ r ] x = r x r y r z x = 0 - r z r y r z 0 - r x - r y r x 0 , I = 1 0 0 0 1 0 0 0 1 是单位矩阵;平移分量T由下式估计出: T = 1 3 Σ im = 0 2 ( M im ′ - RM im ) ;
对每个子集Setn按上述公式估计出姿态参数,记为Rt,n,Tt,n;再对所有的可靠三维对应{Mt(ks),Mt+1(ks)},s=1,…,Kr(t))按下式计算对应点Mt(ks),Mt+1(ks)与姿态参数Rt,n,Tt,n的符合程度εn,s,该值越小,则两者越符合:
εn,s=‖Mt+1(ks)-Rt,nMt(ks)-Tt,n2
再从集合{Rt,n,Tt,n},n=1,…,Num_subset中选取Rt,Tt
{Rt,Tt}={Rn_m,Tn_m}, n _ m = arg min n med s n { ϵ n , s | s = 1 , … , Kr ( t ) } ,
Figure A0214627800187
表示针对下标s取集合{εn,s|s=1,…,Kr(t)}的中值,它对不同的n构成一个新的数组 { med s n | n = 1 , … , Num _ subset } ;而argmin则是在这个中值数组中选择取最小值的那个n;
(2.4),在t=t+1时刻,设置:
是否需要重新调用特征检测和匹配模块的布尔标志量bReDetect;
是否需要进行姿态求精的布尔标志量bRefine;
(2.5),当t=N时,姿态估计结束;
(3).模型初始化和姿态初始化:
模型初始化是通用模型特定化方法的初始步骤,它从通用模型Faceg得到一个初始化模型Faceinit,即对通用模型进行尺度变换,可用下式进行: M init = s x 0 0 0 s y 0 O O s z M g ,Mg和Minit分别是Faceg和Faceinit上的任一组对应点;sx是建模对象和Faceg的两内眼角距离Seg_E长度的比值,sy是两眼中心到嘴中心距离Seg_EM长度的比值;sz=sy;再根据此对Faceg中所有点按上式变换;
姿态初始化是为了获得模型和图象间的对应,即计算从人脸generic坐标系到L摄像机坐标系的刚体变换;即从下式求解Rg,l,Tg,l
Ml=Rg,lMinit+Tg,l,Ml和Minit分别是时刻t=1时人脸和Faceinit间的任一组对应点;本发明取上述两个模型在LE(左眼)、RE(右眼)和Mid_M(嘴中心)这三个位置处的对应点,按上述r、θ、R、[r]x、T各式依次求得Rg,l和Tg,l
再按下式从Rt,Tt,t=1,…,N-1求出Rg,t,Tg,t,t=2,…,N:
Rg,t=Rt-1Rg,t-1,Tg,t=Rt-1*Tg,t-1+Tt-1,t=2,…,N;
(4).利用三维信息修正人脸模型:
(4.1),手工拾取侧面特征点:
设:手工标出的侧面特征点为 { m L , side kk , = x L , side kk y L , side kk T } , kk=1,…,NumSF,NumSF=24为侧面特征点的数目,side表示对应于侧面视图的时刻;
(4.2),形状修正A:把Faceinit变形为Face1;我们先确定人脸三维结点列表P中一个子集Subset的新位置,再通过一个已知的径向基函数算法来确定P中所有结点的坐标;
径向基函数算法如下所述:设要将Facestart变形为Facenew,已知一个Subset中的结点在Facenew中的坐标为{New1,…,NewS},记其在Facestart中的对应点为{Sta1,…,StaS},S为Subset中点的数目;现在对于模型中的任一位置pt,其在Facenew中的坐标
Figure A0214627800192
可由下面的已知公式求出: M pt new = Σ jRBF = 1 S C jRBF φ ( | | M pt start - St a jRBF | | ) ;
Figure A0214627800194
是pt点在Facestart中的坐标,而{C1,…,CS}可按下面的公式求出 C 1 T . . . C S T = φ ( | | Sta 1 - St a 1 | | ) . . . φ ( | | Sta 1 - St a S | | ) . . . . . . . . . φ ( | | St a S - St a 1 | | ) . . . φ ( | | Sta S - Sta S | | ) - 1 New 1 T . . . New S T ;φ是已知的径向基函数;
“形状修正A”在利用上面的径向基函数算法时,设置Facestart=Faceinit,Facenew=Face1。而Subset中的点包括两类:一类是人脸上的左眼内角LE、右眼内角RE、左外嘴唇LM、右外嘴唇RM四个三维显著特征点,由二维显著特征点通过上述立体重建方法得出;另一类是上述24个侧面特征点,它们的三维位置按下面的步骤从手工标出的二维点中获得:
设:侧面特征点在人脸generic坐标系中的三维坐标为 { Ms g kk = 0 Y g kk Z g kk T } , kk=1,…,NumSF;则对于任一kk,有其中 R g , side = R g , side , 1 T R g , side , 2 T R g , side , 3 T , T g , side = T g , side , 1 T g , side , 2 T g , side , 3 是姿态参数的分量表示,为已知量;可直接用线性方程组的求解方法得到
Figure A0214627800203
中的两个未知数
Figure A0214627800204
Figure A0214627800205
(4.3),形状修正B:按前述的径向基函数算法把Face1变形为Face2
设Facestart=Face1,Facenew=Face2,Subset中除了包括“形状修正A”里已经确定了的点之外,还有一些新添加的点,即从正面姿态下手工标出的人脸轮廓恢复出来的三维点,得到这些三维点的基本方法是把当前人脸模型Face1向正面姿态下的图象平面作透视投影并计算三维模型投影结果的二维轮廓点,最后依赖于这些轮廓点和上述图象上的人脸轮廓即闭合多边形的匹配来计算其三维坐标:
首先,计算出Face1在t=1时刻向手工选择的正面视图的图象平面上的投影轮廓 Cont 1 = { pt 1 iC 1 | iC 1 = 1 , … , nNum 1 } ,
Figure A0214627800207
是模型三维结点列表P中点的标号, 1 ≤ pt 1 iC 1 ≤ nVertex ; 而nNum1是Cont1中顶点的数目,它们即形状修正B中向Subset新添加的点;它们是通过判断投影线与模型的交点来选择的,即在某一轮廓点上,投影线与模型不能有其他交点,其算法如下:Face1为三维模型,透视投影中心为 Center = - R g , 1 - 1 T g , 1 已知量,则对模型中所有顶点计算过Center点的投影线和模型的交点,据此判断该顶点是否在投影轮廓上,若Mnow为Face1中任一点,Planejp为Face1中任一面片构成的平面,计算过Center点和Mnow的直线,即投影线,与Planejp的交点为Cnow;如果对某一面片1≤ip≤nMesh而言,点Cnow在线段CMnow的内部,则Mnow不在投影轮廓上;否则即为投影轮廓点;
再计算Cont1中的任一点 在Face2的三维坐标:设上述图象上的人脸轮廓是 Cont _ img 1 = { xCI 1 iCimg yCI 1 iCimg | iCimg = 1 , . . . , nNumCI 1 } ,它是由二维点列表构成的多边形,nNumCI1是点的数目;则 pti = pt 1 iC 1 在Face2的三维坐标
Figure A02146278002013
M 2 pti = M 1 pti + t line v ; v=(vxvyvz)T=vpn×(vn×vpn);
其中, M 1 pti = X 1 pti Y 1 pti Z 1 pti T 是pti点在Face1中的坐标;经 点的投影方向为vpn为已知量;vn为pti点在Faceg中的法向;参数tline可根据二维直线 X 1 pti t line v x Z 1 pti + t line v z Y 1 pti + t line v y Z 1 pti + t line v z T 与闭合多边形Cont_img1的交点求出:
设Cont_img1中的任一线段为seg=(x0+sdxy0+sdy)T,0≤s≤1,s为线段参数,其他都是已知量;先按下面的公式计算 si t line = d x - ( X 1 pti - v x * Z 1 pti / v z ) d y - ( Y 1 pti - v y * Z 1 pti / v z ) - 1 x 0 - v x / v z y 0 - v y / v z 对所有的seg求出这两个数值si和tline;对于很多seg上面的公式无解,即公式里的矩阵不可逆;有解且得到的si满足0≤si≤1的seg有一个或两个,取与点 X 1 pti Z 1 pti Y 1 pti Z 1 pti T 距离近的那一个seg,它得到的tline即为所求;
(4.4),形状修正C:按前述的径向基函数算法把Face2变形为Face3
设Facestart=Face2,Facenew=Face3,Subset中除了包括“形状修正A、B”里已经确定了的点之外,还有一些新添加的点,即从手工标出的正面人脸特征轮廓点:眼睛、鼻孔和嘴的轮廓点恢复出来的三维点:
设某特征轮廓点的二维坐标是 xCF 1 iCF yCF 1 iCF ,该点在Face2中的坐标为 M 2 iCF = X 2 iCF Y 2 iCF Z 2 iCF T ,设该点的Z坐标已经计算正确,即它在Face3中的Z坐标等于
Figure A0214627800214
,则它在Face3中的坐标为 M 3 iCF = xCF 1 iCF * Z 2 iCF yCF 1 iCF * Z 2 iCF Z 2 iCF T ,即这些特征轮廓点在正面姿态下的投影等于实际图象上的特征点;
(4.5),形状修正D:按前述的径向基函数算法把Face3变形为Face4
设Facestart=Face3,Facenew=Face4,Subset中除了包括“形状修正A、B、C”里已经确定了的点之外,还有一些新添加的点,即从手工标出的中间视图1即使Rg,t的旋转角最接近25度的时刻t的人脸轮廓中恢复出来的三维点,具体步骤如下:设该视图对应于时刻int1,与形状修正B所述的相同,先算出Face3在int1时的投影轮廓 Con t int 1 = { pt int 1 iC 2 | iC 2 = 1 , … , nNum _ int 1 } ,
Figure A0214627800217
是P中点的标号,nNum_int1是投影轮廓中的顶点数目;对于任一点 ptli = pt int 1 iC 2 ,它在Face3中的三维坐标 M 3 ptli = X 3 pt 1 i Y 3 pt 1 i Z 3 pt 1 i T ,而 Center = - R g , 1 - 1 T g , 1 如前所述是L摄像机光心在generic坐标系中的坐标,则该点在Face4中的坐标应满足 M 4 ptli = M 3 ptli + t line 2 v 2 , v 2 = v 2 x v 2 y v 2 z T = M 3 ptli - Center , 参数tline2同样根据直线 X 3 pt 1 i + t line 2 v 2 x Z 3 pt 1 i + t line 2 v 2 z Y 3 pt 1 i + t line 2 v 2 y Z 3 pt 1 i + t line 2 v 2 z T 与闭合多边形Cont_imgint1的交点求出;
(4.6),形状修正E:按前述的径向基函数算法把Face4变形为Face5(即最终的形状模型Faces);
设Facestart=Face4,Facenew=Face5,Subset中除了包括“形状修正A、B、C、D”里已经确定了的点之外,还有一些新添加的点,即从手工标出的中间视图2即使Rg,t的旋转角最接近40度的时刻t的人脸轮廓中恢复出来的三维点,具体的恢复步骤与形状修正D相同;
(5).纹理映射:
目前的纹理是通过L摄像机拍摄的正面和侧面视图(IL,1和IL,side)生成,纹理映射是要为创建的模型Faces生成看起来有相片一样真实感的柱面纹理图Textures,即要把采集的图象转换到一个统一的柱面坐标系中并进行融合,它依次含有如下步骤:
(5.1),生成柱面展开图:
首先对形状修正E的最终结果Faces中的任一三维点 M s pt = X s pt Y s pt Z s pt T 按下式作柱面映射:
Figure A0214627800222
,映射的结果是一个二维平面,其上的点为{Cynpt}={(lgpt ltpt)};这里lgpt是柱面上的经度位置,用弧度值表示;ltpt则是柱面旋转轴向的坐标位置;
(5.2),生成正面纹理图:
把所有点
Figure A0214627800223
在已知的正面姿态参数Rg,l,Tg,l下按下式在正面视图IL,1上投影, p → 1 pt = x 1 pt y 1 pt T 是Faces中三维点 在IL,1上的二维投影:
Figure A0214627800226
,其中 R g , 1 = R 1 g , 1 T R 2 g , 1 T R 3 g , 1 T , T g , 1 = T 1 g , 1 T 2 g , 1 T 3 g , 1 是旋转矩阵和平移向量的分量表示;
接着,把IL,1中的各像素映射到Cyn平面上,即对Faces中的任一面片facet=(pt1pt2pt3)T,mproj=Δ(p1,p2,p3)表示这三点在IL,1平面上构成的三角形,mcyn=Δ(p1′,p2′,p3′)是Cyn平面上的对应三角形,即 p iT 1 = x 1 pt iT 1 y 1 pt iT 1 T , p iT 1 ′ = lg pt iT 1 lt pt iT 1 T iT1=1,2,3;再对三角形mcyn内的点[lglt]按下式计算[xy]: x y 1 = a 1 a 2 a 3 a 4 a 5 a 6 0 0 1 - 1 lg lt 1 ; a1~a6由下式求出:
再令正面纹理图 I Textur e 1 ( lg , lt ) = I L , 1 ( x , y ) ;
(5.3),生成侧面纹理图:
把所有点 在已知的侧面姿态参数Rg,side,Tg,side下按下式在侧面视图IL,side上投影, p → side pt = x side pt y side pt T 是Faces中三维点
Figure A0214627800235
在IL,side上的二维投影:
Figure A0214627800236
R g , side = R 1 g , side T R 2 g , side T R 3 g , side T , T g , side = T 1 g , side T 2 g , side T 3 g , side ; 再对Faces中的任一面片facet=(pt1pt2pt3)T,设msproj=Δ(ps1,ps2,ps3), ps iT 2 = x side pt iT 2 y side pt iT 2 T ,iT2=1,2,3;再对三角形mcyn内的点[lg lt]按下式计算[xs ys]: xs ys 1 = as 1 as 2 as 3 as 4 as 5 as 6 0 0 1 - 1 lg lt 1 ;
as1~as6由下式求出:
Figure A02146278002311
再令侧面纹理图 I Textur e side ( 1 g , lt ) = I L , side ( xs , ys ) ;
(5.4),反射侧面纹理图以得到另一侧的纹理图,这是因为Faces的拓扑结构是完全对称的;
设:直接获得纹理的那一侧脸上的任一三角面片mcyn=Δ(p1,p2,p3),它在另一侧脸上的对称面片是mcyn′=Δ(p1′,p2′,p3′),其中 p iT 3 = lg pt iT 3 lt pt iT 3 T , p iT 3 ′ = lg ′ pt iT 3 lt ′ pt iT 3 T , iT3=1,2,3;
对mcyn中的任一点p=(lg lt)T按下式计算[lg′lt′], lg ′ lt ′ 1 = rs 1 rs 2 rs 3 rs 4 rs 5 rs 6 0 0 1 - 1 lg lt 1 ;
rs1~rs6按下式求出:
Figure A0214627800242
再从直接有纹理的一侧反射生成另一侧: I Textur e side ( l g ′ , l t ′ ) = I Texture side ( lg , lt ) ;
(5.5),正面的和侧面的纹理图的融合,得到最终纹理图Textures
设定阈值lgmin和lgmax,Textures在任一位置Cyn=(lg lt)T处的取值按下式给出:
Figure A0214627800244
2.所述的姿态估计步骤中的更新可靠度量序列{bReliablek}的方法,它依次含有如下步骤:
(1).根据对序列Errt的统计分析计算正确对应的数目K_True;
(1.1),设:K_True的初始值为Kr(t)*ratio,ratio为预先设定的常数;Errt={εs=‖Mt+1(ks)-RtMt(ks)-Tt2=1,…,Kr(t)}中按从小到大排序的前K_True个元素组成的子序列为E;
(1.2),计算E的均值 ϵ ‾ = 1 K _ True Σ ϵ s ∈ E ϵ s 和标准差 σ = 1 K _ True - 1 Σ ϵ s ∈ E ( ϵ s - ϵ ‾ ) 2 ;
(1.3),在Errt中寻找满足‖εs- ε‖>3*σ的点,设数目为InValid_T;
(1.4),若0≤Kr(t)-K_True-InValid_T≤1,即K_True个对应正确,终止;否则,转步骤(1.5);
(1.5),若K-K_True-InValid_T>1,令K_True加1,转步骤(1.2);否则,转步骤(1.6);
(1.6),若K-K_True-InValid_T<0,令K_True减1,转步骤(1.2);
(2).设Errt中前K_True个较小的εs对应的标号为{su},u=1,…,K_True,把{bReliablek}中对应于这些标号的位置赋值为Yes,其他赋值为No;
3.所述的姿态估计步骤中的设立是否要重新调用特征检测和匹配模块的布尔标志量bReDetect、是否要进行姿态求精的布尔标志量bRefine这两者的方法如下:
(1).若t=N,即当前图象是序列中的最后一帧,则bReDetect=No,bRefine=Yes,结束;否则,转步骤(2);
(2).若当前Rt的旋转角θt超过预设的阈值θ_bound,则bReDetect=Yes,bRefine=Yes,结束;否则,转步骤(3);
(3).若可靠三维点的数目Kr(t)(即{bReliablek},k=1,…,K(t)中取值为Yes的点数)小于预设的阈值K_bound,则bReDetect=Yes,bRefine=Yes;否则,转步骤(4);
(4).bReDetect=No;如果t-t0是预设的常数Inc_refine的倍数,则bRefine=Yes,即求精是每隔Inc_refine就做一次;否则bRefine=No;
(5).令t=t+1,进入下一时刻的处理;
4.所述的姿态估计步骤中,bRefine为Yes表示在当前时刻作姿态求精,即得出更精确的姿态参数:
设选择在连续Num=t-tStart+1个时刻始终正确的三维对应来求精所有相关的姿态参数{RtStart+τ,TtStart+τ},τ=0,…,t-tStart-1,tStart为求精运算的起始时刻,现取t时刻之前的第二个设置bRefine为Yes的时刻,若tStart<t0,取其为t0;在一次求精运算中,先计算{RatStart+τ,TatStart+τ,τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(t)},使所有图像中二维重投影的总误差f_obj达到最小值: f _ obj = Σ m Σ τ = 0 t - tStart Σ pp = 1 Kr ( t ) [ ( a pp , m τ - x pp , m τ ) 2 + ( b pp , m τ - y pp , m τ ) 2 ] ;
其中RatStart+τ,TatStart+τ是从tStart时刻到tStart+τ时刻的刚体变换系数;{MtStart(kpp)},pp=1,…,Kr(t),是在这Num个时刻中都可靠的三维点数组,共Kr(t)个,pp为三维点的标号;m为L或R,表示摄像机; 是在m号摄像机、tStart+τ时刻图象中的二维检测或跟踪的结果,即 a pp , m τ b pp , m τ 1 = A m - 1 p m , tStart + τ ( k pp ) 1 , Am为AL或AR是pp号三维点在tStart+τ时刻,投影到m摄像机上的结果,即,其中 R c , m = R 1 c , m T R 2 c , m T R 3 c , m T T c , m = T 1 c , m T 2 c , m T 3 c , m 是从L摄像机坐标系到m摄像机坐标系的刚体变换,即 R c , L = 1 0 0 0 1 0 0 0 1 , T c , L = 0 0 0 , R c , R = R c - 1 , T c , R = - R c - 1 T c , R ;另外, Ra tStart = 1 0 0 0 1 0 0 0 1 , Ta tStart = 0 0 0 ;
优化f_obj就能得到姿态参数的精确值;先用Levenberg-Marquardt算法求解{RatStart+τ,TatStart+τ,τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(t)};再用下式把{RatStart+τ,TatStart+τ},τ=1,…,t-tStart转换到{RtStart+τ,TtStart+τ},τ=0,…t-tStart-1:
RtStart=RatStart+1,TtStart=TatStart+1
Figure A0214627800261
,τ=2,…,t-tStart
试验证明:它达到了预期目的。
附图说明
图1.人脸建模流程图
图2.姿态估计流程图
图3.纹理映射流程图
图4.摄像机坐标系与像平面上二维坐标系的关系
图5.正面人脸的显著特征点及线段
图6.典型的人脸侧面投影以及一些侧面特征点
图7.叠加显示的正面人脸轮廓
图8.叠加显示的正面人脸特征轮廓点
图9.叠加显示的中间视图1人脸轮廓(25度角)
图10.叠加显示的中间视图2人脸轮廓(40度角)
图11.上下放置的立体摄像机配置
图12.系统采集的典型立体图对(上下两行分别对应于top,bottom摄像机,每一列是同一时刻的图象,标出的数字是在整个序列中的帧序号)
图13.通用模型的中性和动画状态(从左到右依次是中性线段图、中性面片图、动画线段图和动画面片图)
图14.不同姿态下特征检测和匹配的实验结果(第一行是检测结果,第二行是对应的立体图对间的匹配结果;标出的数字是在整个序列中的帧序号)
图15.正面姿态的立体图对上标出的二维显著特征点(特征点叠加显示在原始图象上)
图16.侧面特征点的叠加显示
图17.实际得到的Texture1
图18.第三十五步直接得到的Textureside
图19.最终得到的Textureside
图20.柱面纹理图Textures
图21.映射了Textures的建模结果Faces(从不同视角查看)
具体实施方式
我们在一个通用模型特定化的框架下创建人脸模型,即:从通用模型Faceg开始,根据获得的建模对象的二维信息逐步进行修改,最终得到特定人模型Faces。在这一过程中,修改的只是P中的三维点坐标,而F则保持不变,即拓扑结构恒定(P和F共同表示了人脸的形状模型,即Face={P,F}。具体地,P={Mpti=(XptiYptiZpti)T|pti=1,…,nVertex}是人脸上的三维结点列表,而F={facetfj=(pt1,fjpt2,fjpt3,fj)T|fj=1,…,nMesh}是人脸上的三角形面片列表,其中每个facetfj=(pt1,fj,pt2,fjpt3,fj)T表示由P中三个点 M pt 1 , fj , M pt 2 , fj , M pt 3 , fj 组成的一个三角形。ptpti,fj,pti=1,…,3,fj=1,…,nMesh,是P中各点的序号,满足1≤ptpti,fj≤nVertex。nVertex和nMesh分别是三维点和三角面片的总数目。总的说来,P表示模型形状,F则表示模型的拓扑结构)。沿这条技术路线可以保持模型的拓扑结构,因而能方便地实现人脸动画;同时,该通用模型也表示了我们对人脸这种非常相似的物体类的一般知识,能为具体的处理过程提供附加约束。
下面我们将详细说明建模步骤,并给出一个具体实施实例。
人脸建模的总体流程如图1所示,各个步骤的前后顺序以及输入和输出都明确标出。在“处理模块”这部分,框图中的数字编号是本节中详细对该模块进行阐述部分的小节号。此外,“输入”指那些建模之前通过手工干预准备好的数据(视频数据、Faceg,以及需要手工标出的二维点),“中间结果”则是系统在建模流程中自动获得的数据。
输入的立体视频序列记为IL,t和IR,t,t=1,…,N表示不同的时刻,N则是视频序列的总帧数,L,R对应于两台摄像机,I则是由像素组成的二维数组,每个像素包括R、G、B三个分量。t=1的时刻对应于人脸正面姿态,通过人的判断手工选择。
下面我们详细描述各步骤的具体处理方法。
1.1姿态估计
这一步要求解人头旋转过程中的姿态参数(也称为刚体变换系数)。记为{Rt,Tt,t=1,…,N-1},其中每个Rt,Tt是第t帧到第t+1帧的人脸刚体变换系数,即对于t时刻和t+1时刻的任一对三维对应点Mt和Mt+1(所谓对应,是指它们是人脸上的同一位置在不同时刻的三维坐标),有下面的公式
Mt+1=RtMt+Tt,t=1,…,N-1
其中三维点所在的坐标系是L摄像机坐标系。摄像机坐标系的定义如图4所示,以透视摄像机的光心C为坐标原点,Z轴沿光轴方向,X,Y轴分别和像平面上二维坐标系的x,y轴平行。
姿态估计的整个处理流程如图2所示,下面我们先对算法的原理作简单说明,在详细介绍各步骤。
我们的思路是利用可靠三维点的运动来估计参数,而三维点需要根据投影到不同图象上的二维对应点(在下面被称为“二维特征”。关于“二维对应”,是指同一个三维点在不同图象中都投影为二维点,它们之间互称为二维对应点;其中立体图对间的二维对应称为“匹配”,而同一摄像机拍摄的不同时刻图象间的二维对应则称为“跟踪”。这里“立体图对”指同一时刻L和R摄像机拍摄的一对图像)计算出来。具体地,我们首先要得到三维点,这在起始时刻是通过二维特征检测和匹配,然后通过立体重建得到;而对于后续时刻则是在L和R两个图象序列中分别进行跟踪,接着同样通过立体重建得到。有了不同时刻的三维点后我们就可以估计姿态。从未知量的个数来考虑,只需要三对两个时刻的对应三维点就可完成,但要求重建出的三维点是可靠的,而实际实验中很难保证所有的三维点都可靠。为了评价三维点的可靠性,我们定义并不断更新数组{bReliablek},这是一个布尔数组,取值为Yes(表示该点可靠)或No(表示不可靠)。该数组会随着跟踪的进行而被更新,刚开始时初始化所有点都是可靠的,后来有些点则会被判断为不可靠的,我们作出这种判断的方法将在下面详细说明。
直接根据三维点在相邻两时刻的运动计算出的姿态参数误差较大,我们会在某些时刻根据一段较长时间内的所有可靠三维点进行姿态求精以减小误差。何时进行这种求精运算是由布尔标志bRefine来控制的,它取值Yes表示当前时刻进行姿态求精,No则相反。
随着跟踪的进行,可靠的三维点会越来越少。为了使姿态估计可以继续进行并得到精确的结果,我们有必要重新进行二维特征检测和匹配以及立体重建,找出新的可靠三维点。何时进行这种操作由布尔标志bReDetect控制,它取值Yes表示当前时刻需要进行找出新三维点的工作,No则相反。
bRefine和bReDetect这两个布尔标志的设置方法也将在下面详细介绍。
下面我们详细阐述完整的过程:
1.1.1二维特征的检测
我们利用已有的KLT算法在灰度图上完成二维特征的检测。其原理是:设t时刻的m摄像机(m为L或R,表示两个摄像机中的某一个)得到的图象为Im,t(p),其中p=(x,y)表示图象上的任一点;该点处图象的梯度向量为 g → = ▿ I m , t ( p ) = ( ∂ I m , t ∂ x ( p ) ∂ I m , t ∂ y ( p ) ) T ,计算2*2的矩阵 G = ∫ W g → g → T dp ,其中W是以p为中心的一个矩形窗口。我们求出G的最小奇异值sing_min(利用已有的matlab工具包),并选择那些sing_min很大的p点作为检测出的特征点。从物理意义上看,G实际是对图象上局部灰度变化丰富程度的表示:如果局部的灰度恒定,这时梯度向量 为0,G为0,所有的奇异值都是0;如果局部的灰度变化有固定的方向(例如图象上比较强的单一边缘处),梯度向量 基本都垂直于该方向,这时G最小的奇异值接近于0;只有在沿各个方向的灰度变化都比较显著的局部(例如两条边的交点)才满足G的最小奇异值很大。因此,我们实际是选择那些局部灰度变化丰富的点作为特征点,这样的点在跟踪和匹配时可靠程度较高。
计算机实现时我们需要对上面的公式作离散化处理,具体的计算公式如下: g → ( i , j ) = gx gy T = [ I m , t ( i + 1 , j ) - I m , t ( i - 1 , j ) 2 I m , t ( i , j + 1 ) - I m , t ( i , j - 1 ) 2 ] T - - - ( 1.1.1 ) G ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky g → ( i + ii , j + jj ) g → T ( i + ii , j + jj ) - - - ( 1.1.2 )
这里blockx,blocky决定了窗口W包含的网格点数目。实际上,该窗口以待测点(i,j)为中心,网格点总数为(2*blockx+1)*(2*blocky+1)。
在图2中,t时刻检测出的特征点记为{pL,t(k)},L,t表示图象序号。特征点的总数目为K(t),k满足1≤k≤K(t),表示点的标号。
这时我们令t0=t,表示将要被跟踪的这些特征在哪一时刻被检测出来。
1.1.2二维特征匹配
匹配问题根据已知方法完成。简单介绍其原理如下:
设两摄像机间的配置关系用下式表示
ML=RcMR+Tc                                        (1.1.3)
L和R表示两个摄像机坐标系,ML和MR是同一三维点在这两个坐标系中的坐标表示;Rc和Tc=[Tc,xTc,yTc,z]T分别是旋转和平移分量(合称立体摄像机的外参数,是已知量),前者是一3*3的矩阵,后者是三维向量。
有了(1.1.3)后,令 F = f L 0 u OL 0 f L v OL 0 0 1 - T 0 - T c , z T c , y T c , z 0 - T c , x - T c , y T c , x 0 R c f R 0 u OR 0 f R v OR 0 0 1 - 1 (该矩阵被称为基础矩阵),其中fL,fR,uOL,vOL,uOR,vOR是摄像机的内参数,都是已知量;其矩阵表示是 A L = f L 0 u OL 0 f L v OL 0 0 1 , A R = f R 0 u OR 0 f R v OR 0 0 1 .
则对于L,t图中的某一点pL,t(k)=(xL,t(k)yL,t(k))T,它在R,t图中的匹配点pR,t(k)=(xR,t(k)yR,t(k))T应满足下面的已知公式(1.1.4): p L , t ( t ) 1 T F p R , t ( k ) 1 = 0 - - - ( 1.1.4 )
(1.1.4)式的物理意义是pR,t(k)位于由pL,t(k)决定的一条直线上,这样为寻找该点的搜索空间从整个图象降为该直线,即从二维降到了一维。在这个一维空间里,选择使一个局部窗口Wm内总灰度差异最小的点作为匹配结果,即要使下面的(1.1.5)式最小: Diff = ∫ Wm [ I R , t ( p R , t ( k ) ) - I L , t ( p L , t ( k ) ) ] 2 dp - - - ( 1.1.5 ) 离散化后,实际计算时的公式是: Diff ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky ( I L , t ( x L , t ( k ) + ii , y L , t ( k ) + jj ) - I R , t ( i + ii , j + jj ) ) 2 - - - ( 1.1.6 )
其中(i,j)是直线 F上的任一点。
图2中t时刻的匹配结果为{pR,t(k)},总数目也为K(t),每个点都和PL,t(k)相对应。对每一pL,t(k)的匹配过程是独立的,即在公式(1.1.4)表示的直线上搜索使(1.1.6)式最小的位置。
获得匹配后用立体重建的方法获得三维点序列{Mt(k)|k=1,…,K(t)}。立体重建的过程对每一对匹配点是独立的,原理如下:
首先,我们有摄像机的透视投影原理,即下面的已知公式, s m A m - 1 p m , t 1 = M m , t ,其中m为L或R,表示两个摄像机中的任一个;Mm,t为t时刻三维点在m摄像机坐标系中的坐标;sm是待求的一个比例因子。我们省略了(k)来表示任一点。
再结合两摄像机间的配置关系(1.1.3)可求解出三维点,ML,t的表达式为 M L , t = 1 2 ( s L A L - 1 p L , t 1 + s R R c A R - 1 p R , t 1 + T c ) 其中 S L S R = ( B T B ) - 1 B T T c ,而 B = [ A L - 1 p L , t 1 - R c A R - 1 p R , t 1 ] .
而MR,t则可按下面的公式求出 M R , t = R c - 1 ( M L , t - T c )
如果不特别说明,在本文中提到的立体重建出的三维点都是指在L摄像机坐标系中的ML,t。为方便起见,在陈述中我们去掉L,简写为Mt。对所有的特征点重复上面的立体重建步骤,我们得到三维点序列{Mt(k)|k=1,…,K(t)}。
从物理意义上看,每一二维投影点实际是确定了三维空间的一条直线,这样根据同一三维点在两个摄像机中的一对二维点,通过求解两条三维直线的交点,就可以确定该三维点。
同时,我们还定义布尔变量序列{bReliablek},k=1,…,K(t),它表示各三维点是否可靠,取值为Yes或No,目前序列中的所有值都初始化为Yes,表示所有点都是可靠的。
1.1.3二维特征的跟踪
灰度图上的二维特征跟踪同样利用已有的KLT算法完成。其原理是:设检测的特征点在图象Im,t(p)(m同样为L或R)上,其中p是任一特征点;现在需要在图象Im,t+1上跟踪该点。基于局部纹理信息的匹配,令 e → = ∫ W ( I m , t + 1 ( p ) - I m , t ( p ) ) g → dp , d → = G - 1 e → (G的计算如前所述),则
Figure A02146278003010
即为图象Im,t+1上对p的跟踪结果。
实际计算时同样需要对 的求解作离散化处理: e → ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky g → ( i + ii , j + jj ) ( I m , t + 1 ( i + ii , j + jj ) - I m , t ( i + ii , j + jj ) ) - - - ( 1.1.7 )
跟踪得到的特征点在图2中表示为(pm,t+1(k)}。
1.1.4姿态参数初始化
对于跟踪的结果用和匹配时相同的立体重建方法可获得t+l时刻的三维点序列,这样我们就获得了这两个时刻(t和t+1)的一组三维对应点{M,(k)|k=1,…,K(t)}和{Mt+1(k)|k=1,…,K(t)}。下面根据这组三维对应和表示其可靠性的序列(bReliablek),k=1,…,K(t)(该序列被称为“可靠度量序列”)来求解第t帧到第t+1帧的姿态变换参数Rt,Tt,同时更新可靠度量序列。
首先,从未知量的个数来考虑,三对三维对应点就足以计算出姿态参数。简单介绍该已知算法的原理如下:
设{(mim,Mim’)|im=0,1,2}是三对不共线的三维对应点(Mim和Mim’是前后两帧中同一三维点在L摄像机坐标系中的坐标),姿态参数Rt,Tt满足Mim′=RtMim+Tt|im=0,1,2。为确定其中的旋转分量Rt,我们需要确定旋转的中心轴 (称为旋转轴,3*1的向量)和绕该轴的旋转角度θ。定义单位向量 dir im = M im - M 0 | | M im - M 0 | | , im=1,2和 dir im ′ = M im ′ - M 0 ′ | | M im ′ - M 0 ′ | | , im=1,2。则 r ^ = ( dir 1 ′ - dir 1 ) × ( dir 2 ′ - dir 2 ) | | ( dir 1 ′ - dir 1 ) × ( dir 2 ′ - dir 2 ) | | 在得到旋转轴 后,θ可以按下式进行求解: θ = arccos ( r ^ × dir 1 ) · ( r ^ × dir 1 ′ ) | | ( r ^ × dir 1 ) · ( r ^ × dir 1 ′ ) | | 得到了 和θ之后,旋转矩阵Rt可由下式给出: R t = I + sin | | r | | | | r | | [ r ] x + 1 - cos | | r | | | | r | | 2 [ r ] x 2 其中 r = θ * r ^ ,[r]x是根据3*1向量r=[rxryrz]T定义的反对称矩阵,即 [ r ] x = r x r y r z x = 0 - r z r y r z 0 - r x - r y r x 0 , I = 1 0 0 0 1 0 0 0 1 是单位矩阵。估计出旋转分量Rt之后,平移分量Tt可由下式得到: T t = 1 3 Σ im = 0 2 ( M im ′ - R t M im )
上面的算法虽然在理论上能得到准确的结果,但是数值稳定性很差,即在其输入{(Mim,Mim’)|im=0,1,2}有较小误差时,算法的求解结果会很不准确。而输入数据一般是有误差的,甚至还有一些是错误的。为了在这种情况下得到准确的结果,我们采用了常用的基于最小中值(Least-Median-Square)的鲁棒估计算法。其基本原理是:随机地从当前的可靠三维对应(即{bReliablek},k=1,…,K(t)中取值为Yes的项。设这些项的标号为{ks},s=1,…,Kr(t),其中Kr(t)是可靠点的总数目)中挑出Num_subset个子集,每个子集Setn,n=1,…,Num_subset含有三对三维对应点,据此按上面的算法估计出姿态参数Rt,n,Tt,n,然后对所有的可靠三维对应{Mt(ks),Mt+1(ks)},s=1,…,Kr(t)按下面的式(1.1.8)计算εn,s
εn,s=‖Mt+1(ks)-Rt,nMt(ks)-Tt,n2    (1.1.8)
该εn,s的物理意义是对应点Mt(ks),Mt+1(ks)与姿态参数Rt,n,Tt,n的符合程度,该值越小,说明两者越符合。我们按式(1.1.9)来从集合{Rt,n,Tt,n},n=1,…,Num_subset中选择Rt,Tt,即
{Rt,Tt}={Rn_m,Tn_m},其中 n _ m = arg min n med s n { ϵ n , s | s = 1 , … , Kr ( t ) } - - - ( 1.1.9 )
其中 表示针对下标s取集合{εn,s|s=1,…,Kr(t)}的中值,它对不同的n构成一个新的数组 { med s n | n = 1 , … , Num _ subset } ;而 则是在这个中值数组中选择取最小值的那个n。
上面求解Rt,Tt的算法能保证在存在很多错误的三维对应时仍得到正确的结果,这是因为:第一,根据{Mt(k)|k=1,…,K(t)}和{Mt+1(k)|k=1,…,K(t)}中的三个准确对应就可以计算出姿态参数;第二,按式(1.1.9)选择姿态参数的依据是整个序列的中值,因此即使有很多三维对应是错误的,造成该序列里的很多数值较大;只要正确的三维对应数目超过K(t)的一半,算法仍能得到正确的姿态估计结果。
接着我们需要更新可靠度量序列{bReliablek},即判断哪些三维对应是正确的。具体方法如下:令Errt={εs=‖Mt+1(ks)-RtMt(ks)-Tt2|s=1,…,Kr(t)}表示当前的可靠三维点对Rt,Tt的支持程度,设这Kr(t)个点中的K_True(计算方法如下所述)个是正确的,我们设Errt中前K_True个较小的εs对应的标号为{su},u=1,…,K_True,则
Figure A0214627800325
中对应于这些标号的位置取值Yes,其他的位置是No。
K_True的计算步骤是:
(1)设置K_True的初始值为Kr(t)*ratio(ratio为一预先设定的常数);记Errt中按从小到大排序的前K_True个元素组成的子序列为E;
(2)计算E的均值 ϵ ‾ = 1 K _ True Σ ϵ s ∈ E ϵ s 和标准差 σ = 1 K _ True - 1 Σ ϵ s ∈ E ( ϵ s - - ϵ - ) 2 ;
(3)在Errt中寻找满足‖εs- ε‖>3*σ的点,设数目为InValid_T;
(4)如果0≤Kr(t)-K_True-InValid_T≤1,说明当前对误差和错误的判断是相容的,终止,当前的K_True即为最终结果;否则,转步骤5;
(5)如果K-K_True-InValid_T>1,K_True加1(即E中添加一点),转步骤2;否则,转步骤6;
(6)K_True减1(即E中减少一点),转步骤2。
该方法的原理是误差和错误在统计意义上的分界位置。
1.1.5设置标志bReDetect和bRefine
这是两个布尔型的标志量,取值为Yes或No。bReDetect表示是否要重新调用特征检测和匹配模块,bRefine则表示是否要进行姿态求精。它们的设置方式如下:
(1)如果t=N,即当前图象是序列中的最后一幅,则bReDetect=No,bRefine=Yes;完毕;否则,转步骤2;
(2)如果当前Rt的旋转角θt超过了预设的阈值θbound,则bReDetect=Yes,bRefine=Yes;完毕;否则,转步骤3;
(3)如果可靠三维点的数目Kr(t)(即{bReliablek},k=1,…,K(t)中取值为Yes的点的数目)小于预设的阈值K_bound,则bReDetect=Yes,bRefine=Yes;否则,转步骤4;
(4)bReDetect=No;如果t-t0是预设的常数Inc_refine的倍数,bRefine=Yes;否则bRefine=No。
从原理上说,我们在可靠点数目不足或姿态变化过大时需要重做特征检测和匹配;否则就做特征跟踪。求精则每隔固定的时间间隔(Inc_refine)就做一次。
现在令t=t+1,准备进入对下一时刻的处理。
1.1.6姿态求精
bRefine为Yes表示在当前时刻做姿态求精,这时系统还需要设置求精运算的起始时刻tStart,实际我们取其为t时刻之前第二个设置bRefine为Yes的时刻,如果这样得到的tStart小于t0就令其为t0。
1.1.4节的姿态参数初始化只利用了两个时刻(t和t+1)的三维对应。为得到更精确的姿态参数,我们选择那些在连续Num=t-tStart+1个时刻始终正确的三维对应来求精所有相关的姿态参数{RtStart+τ,TtStart+τ},τ=0,…,t-tStart-1。具体地说,在一次求精运算中,我们先计算{RatStart+τ,TatStart+τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(r)},使得式(1.1.10)中的f_obj达到其最小值。 f _ obj = Σ m Σ τ = 0 t - tStart Σ pp = 1 Kr ( t ) [ ( a pp , m τ - x pp , m τ ) 2 + ( b pp , m τ - y pp , m τ ) 2 ] - - - ( 1.1.10 )
其中RatStart+τ,TatStart+τ是从tStart时刻到tStart+τ时刻的刚体变换系数;{MtStart(kpp)},pp=1,…,Kr(t),是在这Num个时刻中都可靠的三维点数组,包含Kr(t)个点,pp表示三维点的标号。m为L或R,表示某一个摄像机。 是二维检测或跟踪的结果,在m号摄像机tStart+τ时刻的图象中,即 a pp , m τ b pp , m τ 1 = A m - 1 p m , tStart + τ ( k pp ) 1 - - - ( 1.1.11 ) 则是pp号三维点在tStart+τ时刻,投影到m摄像机上的结果,即 R c , m = R 1 c , m T R 2 c , m T R 3 c , m T T c , m = T 1 c , m T 2 c , m T 3 c , m 表示从L摄像机坐标系到m摄像机坐标系的刚体变换。即 R c , L = 1 0 0 0 1 0 0 0 1 , T c , L = 0 0 0 , R c , R = R c - 1 , T c , R = - R c - 1 T c , R 。另外有 R a tStart = 1 0 0 0 1 0 0 0 1 , Ta tStart = 0 0 0 .
从物理意义上看,式(1.1.10)表示的是所有图象中二维重投影的总误差。优化该目标能得到姿态参数的精确值。其中参数{RatStart+τ,TatStart+τ,τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(t)}的求解可调用通用的Levenberg-Marquardt算法(利用matlab工具包)来完成。
得到了{RatStart+τ,TatStart+τ},τ=1,…,t-tStart后按下面的公式计算出{RtStart+τ,TtStart+τ},τ=0,…,t-tStart-1,从而达到求精目的。
RtStart=RatStart+1,TtStart=TatStart+1,τ=2,…,t-tStart
上面公式的物理意义是刚体运动的复合,例如:{RtStart+τ-1,TtStart+τ-1}是tStart+τ-1时刻到tStart+τ时刻的刚体变换,它等于两个刚体变换的复合,即先作从tStart+τ-1时刻到tStart时刻的刚体变换(是{RatStart+τ-1,TatStart+τ-1}的逆变换),再作从tStart时刻到tStart+τ时刻的刚体变换(即{RatStart+τ,TatStart+τ})。
1.2模型和姿态的初始化
按通用模型特定化的思路,首先需要从Faceg得到一个初始模型Faceinit;另外,在上面的姿态估计步骤中得到了{Rt,Tt,t=1,…,N-1},而为了获得模型和投影图象间的对应,我们还需要计算从generic坐标系(下段介绍,是一个固定在人头上的物体坐标系)到各帧L摄像机坐标系的刚体变换Rg,t,Tg,t,t=1,…,N。这两个任务分别由模型初始化和姿态初始化完成。
先解释一下generic坐标系。我们取坐标系原点为左眼内角LE、右眼内角RE、左外嘴唇LM、右外嘴唇RM四个点的重心Middle;取X轴方向为从右眼RE指向左眼LE的方向,取Y轴方向从下頦指向额头的方向(竖直向上的方向),取Z轴方向为从后脑指向鼻子的方向。三方向两两正交,并构成右手坐标系。上面提到的各特征点参见图5。
模型初始化的过程实际是对原始通用模型施加一个尺度变换。即按下面的公式(1.2.1)完成: M init = s x 0 0 0 s y 0 0 0 s z M g - - - ( 1.2.1 )
其中Mg和Minit分别是Faceg和Faceinit上的任一组对应点。三个比例因子sx,sy,sz利用人脸上的四个主要特征点的距离配置确定(包括左内眼角、右内眼角、左嘴角和右嘴角)。具体地:sx是建模对象和Faceg中Seg_E长度(两内眼角的距离)的比值,sy则是Seg_EM长度(两眼中心到嘴中心的距离)的比值,sz就取为sy。这些线段也在图5中标出。
确定了这三个比例系数后对Faceg中的所有点按公式(1.2.1)作尺度变换,结果即为Faceinit
姿态初始化的任务是要计算Rg,l,Tg,l,即从generic坐标系到第1帧时L摄像机坐标系的刚体变换,即要求解(1.2.2)中的参数
M1=Rg,lMinit+Tg,l                                    (1.2.2)
其中Ml和Minit分别是时刻1时人脸和Faceinit这两个模型间的任一组对应点。
为求解Rg,l,Tg,l,我们选择这两个模型在LE(左眼)、RE(右眼)和Mid_M(嘴中心)这三个位置处的对应点,按前面1.1.4节中姿态初始化的方法得到结果。
获得了Rg,l,Tg,l后,系统根据刚体运动的复合,按下面的公式计算其他各时刻的姿态参数Rg,t,Tg,t,t=2,…,N:
Rg,t=Rt-1Rg,t-1,Tg,t=Rt-1*Tg,t-1+Tt-1,t=2,…,N
现在系统会自动判断对应于侧面视图的时刻side,即选择side为使Rg,t的旋转角最接近90度的那个t。
1.3形状修正A
这一步要把Faceinit变形为Face1。如前所述,我们保持Face的拓扑结构,而只是修改其中三维点的坐标。具体地,我们先确定三维结点列表P中一个子集Subset的新位置,再通过一个已知的径向基函数算法来确定P中所有结点的坐标。
先简单介绍径向基函数算法的基本原理。设要将Facestart变形为Facenew,已知一个Subset中的结点在Facenew中的坐标为{New1,…,NewS},记其在Facestart中的对应点为{Sta1,…,StaS};这里S为Subset中点的数目。现在对于模型中的任一位置pt,其在Facenew中的坐标 可由下面的已知公式求出: M pt new = Σ jRBF = 1 S C jRBF φ ( | | M pt start - St a jRBF | | ) 其中 是pt点在Facestart中的坐标,而{C1,…,CS}可按下面的公式求出 C 1 T . . . C S T = φ ( | | Sta 1 - St a 1 | | ) . . . φ ( | | Sta 1 - St a S | | ) . . . . . . . . . φ ( | | St a S - St a 1 | | ) . . . φ ( | | Sta S - Sta S | | ) - 1 New 1 T . . . New S T
该方法实际是根据Facestart中各点到一些标定点(即Subset中的点)的距离关系来确定该点在Facenew中的位置。φ是已知的径向基函数(定义域和值域都为非负实数),它是自变量r(表示距离)的递减函数,即距离远的标定点对该点的影响较小。
这一步在利用上面的径向基函数算法时,我们有Facestart=Faceinit,Facenew=Face1。而Subset中的点包括两类:一类是三维显著特征点,共4个,由二维显著特征点(指人脸上的左眼内角LE、右眼内角RE、左外嘴唇LM、右外嘴唇RM四个点在图象平面上的投影)通过前面的立体重建算法得到;另一类是侧面特征点(指那些在人脸侧面投影视图上易于辨认的点,如下頦、嘴、鼻尖、鼻梁上方、前额等。典型的人脸侧面投影以及我们定义的一些侧面特征点在图6中用小的圆圈表示,它的一个实例参见图16),实际使用的有24个,它们的三维位置按下面的步骤从手工标出的二维点中获得。
设手工标出的侧面特征点为 { m L , side kk = x L , side kk y L , side kk T } , kk=1,…,NumSF,其中NumSF=24为侧面特征点的数目,side是前面已经得到的侧面帧标号。它们在generic坐标系中的三维坐标为 { Ms g kk = 0 Y g kk Z g kk T } , kk=1,…,NumSF,则对任一kk,我们有其中 R g , side = R g , side , 1 T R g , side , 2 T R g , side , 3 T , T g , side = T g , side , 1 T g , side , 2 T g , side , 3 是姿态参数的分量表示。(1.3.1)中有两个线性方程,因而可直接用线性方程组的求解方法得到
Figure A0214627800366
中的两个未知数
Figure A0214627800367
该方法实际是利用了侧面特征点的特殊位置(即在generic坐标系中坐标的X分量为0),因而可直接从单幅图象中求出三维点。
1.4形状修正B
这一步同样利用前面的径向基函数算法,Facestart=Face1,Facenew=Face2,Subset中除了包括前面“形状修正A”里已经确定了的点之外,还有一些新添加的点,即根据手工标出的正面人脸轮廓(指正面姿态下图像上的人脸轮廓,用闭合的多边形轮廓表示,一个例子如图7所示。该图将多边形轮廓叠加到了人脸图象上,看得更清楚)恢复出来的三维点。得到这些三维点的基本方法是将当前人脸模型向图象平面作透视投影,并计算三维模型透视投影的二维轮廓点,最后依赖于这些轮廓点和图象上的人脸轮廓的匹配来计算其三维坐标。具体的步骤如下所述:
首先需要计算出Face1在t=1时刻(是手工选择的正面视图)向图象平面投影的轮廓 Cont 1 = { pt 1 iC 1 | iC 1 = 1 , … , nNum 1 } ,其中
Figure A02146278003610
是P(即模型的三维结点列表)中点的标号,显然有 1 ≤ p 1 iC 1 ≤ nVertex ;而nNum1是Cont1中的顶点数目。Cont1中的点就是这一步形状修正中新添加到Subset中的点,它们是通过判断投影线和模型的交点来选择的,即在某一轮廓点上,投影线与模型不能有其他的交点,详细的计算方法如下所述:
记三维模型为Faceproj(这里就是Face1),透视投影中心为 Center = - R g , 1 - 1 T g , 1 即L摄像机光心在generic坐标系中的坐标,则我们对模型中的所有顶点计算过该点的投影线和模型的交点,据此判断该顶点是否在投影轮廓中。具体地,Mnow为Faceproj中任一点,Planejp为Faceproj中任一面片构成的平面,计算过Center和Mnow的直线(即投影线)与Planejp的交点为Cnow;如果对某一个满足1≤ip≤nMesh的ip(如前所述,nMesh是Faceproj中的面片总数)求出的Cnow在线段CMnow的内部,则Mnow不在投影轮廓中;否则就应属于投影轮廓。
接着要计算Cont1中的任一点 在Face2的三维坐标。设图象上的人脸轮廓是 Cont _ img 1 = { xCI 1 iCimg yCI 1 iCimg | iCimg = 1 , . . . , nNumCI 1 } ,它是由二维点列表构成的多边形,而nNumCI1是点的数目。则我们按下面的方法确定
Figure A0214627800375
在Face2的三维坐标:
pti = pt 1 iC 1 点在Faceg中的法向为vn,在Face1中的坐标是 M 1 pti = X 1 pti Y 1 pti Z 1 pti T ,而经过该点的投影方向为 v pn = M 1 pti + R g , 1 - 1 T g , 1 (这三者都是已知量),则pti点在Face2中的坐标满足 M 2 pti = M 1 pti + t line v - - - ( 1.4.1 )
其中
v=(vxvyvz)T=vpn×(vn×vpn)            (1.4.2)
参数tline可根据二维直线 X 1 pti + t line v x Z 1 pti + t line v z Y 1 pti + t line v y Z 1 pti + t line v z T 与闭合多边形Cont_img1的交点求出。具体步骤如下:
设Cont_tmg1中的任一线段可表示为seg=(x0+sdxy0+sdy)T,0≤s≤1,其中s为线段参数,其他都是已知量。
我们先按下面的公式计算 si t line = d x - ( X 1 pti - v x * Z 1 pti / v z ) d y - ( Y 1 pti - v y * Z 1 pti / v z ) - 1 x 0 - v x / v z y 0 - v y / v z
对所有的seg求出这两个数值si和tline。对于很多seg上面的公式无解,即公式里的矩阵不可逆。有解且得到的si满足0≤si≤1的seg有一个或两个,取与点 X 1 pti Z 1 pti Y 1 pti Z 1 pti T 距离近的那一个seg,它得到的tline即为所求。
这里v是
Figure A02146278003714
点的变形方向,对它的计算利用了通用人脸的局部形状。实际上,该方向是Face1上该点处法向垂直于投影线的分量,这样一方面能尽量保持局部曲率;另一方面能尽量减小点的变形距离。
1.5形状修正C
这一步同样利用前面的径向基函数算法,Facestart=Face2,Facenew=Face3,Subset中除了包括前面“形状修正A、B”里已经确定了的点之外,还有一些新添加的点,即根据手工标出的正面人脸特征轮廓点(指正面姿态下手工标出的眼睛、鼻孔和嘴的轮廓点,是一些离散点,如图8所示,同样是叠加显示)恢复出来的三维点。具体的恢复步骤如下所述:
设某特征轮廓点的二维坐标是 xCF 1 iCF yCF 1 iCF ,该点在Face2中的坐标为 M 2 iCF = X 2 iCF Y 2 iCF Z 2 iCF T ,我们假设该点的Z坐标已经计算正确,即它在Face3中的Z坐标等于
Figure A0214627800383
,则它在Face3中的坐标为 M 3 iCF = xCF 1 iCF * Z 2 iCF yCF 1 iCF * Z 2 iCF Z 2 iCF T - - - ( 1.5.1 )
即这些特征轮廓点在正面姿态下的投影等于实际图象上的特征点。
1.6形状修正D
这一步同样利用前面的径向基函数算法,Facestart=Face3,Facenew=Face4,Subset中除了包括前面“形状修正A、B、C”里已经确定了的点之外,还有一些新添加的点,即从手工标出的中间视图1(该视图的选择由系统自动判断,实际是使Rg,t的旋转角最接近25度的时刻t。所谓“中间视图”是指介于正面和侧面之间的中间投影姿态)人脸轮廓(同样用闭合多边形表示,典型的例子是图9)恢复出来的三维点,具体的恢复步骤如下所述:
设中间视图1对应于时刻int1,与前面1.4节对正面图人脸轮廓的处理类似,也要先算出Face3在int1时的投影轮廓 Con t int 1 = { pt int 1 iC 2 | iC 2 = 1 , … , nNum _ int 1 } ,其中
Figure A0214627800386
是P(即人脸模型的三维结点列表)中点的标号,而nNum_int1是投影轮廓中的顶点数目。投影轮廓的计算方法如前所述(1.4节)。
Contint1中的点在Face4中的坐标按下面的与1.4节类似的步骤确定:对于任一 ptli = pt int 1 iC 2 , 定义 v 2 = v 2 x v 2 y v 2 z T = M 3 ptli - Center ,其中 M 3 pt 1 i = X 3 pt 1 i Y 3 pt 1 i Z 3 pt 1 i T 是该点在Face3中的三维坐标,而 Center = - R g , 1 - 1 T g , 1 如前所述是L摄像机光心在generic坐标系中的坐标。则该点在Face4中的坐标
Figure A02146278003811
满足 M 4 ptli = M 3 ptli + t line 2 v 2 - - - ( 1.6.1 )
其中参数tline2根据二维直线 X 3 pt 1 i + t line 2 v 2 x Z 3 pt 1 i + t line 2 v 2 z Y 3 pt 1 i + t line 2 v 2 y Z 3 pt 1 i + t line 2 v 2 z T 与闭合多边形Cont_imgint1的交点求出,方法如1.4节所述。
1.7形状修正E
这一步同样利用前面的径向基函数算法,Facestart=Face4,Facenew=Face5,Subset中除了包括前面“形状修正A、B、C、D”里已经确定了的点之外,还有一些新添加的点,即从手工标出的中间视图2(该视图的选择也由系统自动判断,实际是使Rg,t的旋转角最接近40度的时刻t)人脸轮廓(典型的例子是图10)恢复出来的三维点,具体的恢复步骤和1.6节中的处理完全一样。
1.8纹理映射
纹理映射是要为创建的模型Faces生成柱面纹理图Textures,使得最终的建模结果看起来有相片一样的真实感。目前的纹理是通过两幅图象生成,即L摄像机拍摄的正面和侧面视图(IL,1和IL,side),这部分的基本原理是把采集图象转换到一个统一的柱面坐标系中,并进行融合,其流程如图3所示,具体步骤如下:
1.8.1柱面展开图的生成
系统首先对Faces中的任一三维点 M s pt = X s pt Y s pt Z s pt T 作公式(1.8.1)所示的柱面映射:
Figure A0214627800392
映射的结果是一个二维平面,其上的点为 { Cyn pt } = { lg pt lt pt } 。这里lgpt是柱面上的经度位置,用弧度值表示;ltpt则是柱面旋转轴向的坐标位置。
1.8.2正面纹理图
将所有 在正面姿态参数Rg,l,Tg,l下按公式(1.8.2)进行投影:
其中 R g , 1 = R 1 g , 1 T R 2 g , 2 T R 3 g , 3 T , T g , 1 = T 1 g , 1 T 2 g , 1 T 3 g , 1 是旋转矩阵和平移向量的分量表示。
这时 p → 1 pt = x 1 pt y 1 pt T 是Faces中三维点 在正面视图IL,1上的二维投影。现在我们得到一个IL,1平面上点 和Cyn平面上点Cynpt=(lgpt ltpt)T的二维对应关系,该关系是由于它们都和三维点 相对应而得到的(分别通过公式1.8.2和1.8.1)。我们基于这种对应关系将IL,1中的各像素映射到Cyn平面上,即对Faces中的任一面片facet=(pt1pt2pt3)T,设mproj=Δ(p1,p2,p3)表示这三点在IL,1平面上构成的三角形,mcyn=Δ(p1′,p2′,p3′)是Cyn平面上的对应三角形,即 p iT 1 = x 1 pt iT 1 y 1 pt iT 1 T p iT 1 ′ = lg pt iT 1 lt pt iT 1 T , iT1=1,2,3。对三角形mcyn内的点[lg lt]按下面的公式(1.8.4)计算[xy],并令 I Textur e 1 ( lg , lt ) = I L , 1 ( x , y ) - - - ( 1.8.3 )
即将正面纹理图映射到柱面展开图上。 x y 1 = a 1 a 2 a 3 a 4 a 5 a 6 0 0 1 - 1 lg lt 1 - - - ( 1.8.4 )
其中的六个未知量aiA,iA=1,…,6按公式(1.8.5)求出。
正面纹理映射的结果记为Texture1
1.8.3侧面纹理图
与正面图的处理非常类似,将所有
Figure A0214627800404
在侧面姿态参数Rg,side,Tg,side下按公式(1.8.6)进行投影:
Figure A0214627800405
这里同样有分量表示 R g , side = R 1 g , side T R 2 g , side T R 3 g , side T , T g , side = T 1 g , side T 2 g , side T 3 g , side .
接着对Faces中的任一面片facet=(pt1pt2pt3)T,设msproj=Δ(ps1,ps2,ps3),其中 ps iT 2 = x side pt iT 2 y side pt iT 2 T ,iT2=1,2,3。对三角形mcyn内的点[lg lt]按后面的公式(1.8.8)计算[xs ys],并令 I Textur e side ( lg , lt ) = I L , side ( xs , ys ) - - - ( 1.8.7 )
即将侧面纹理图映射到柱面展开图上。 xs ys 1 = as 1 as 2 as 3 as 4 as 5 as 6 0 0 1 - 1 lg lt 1 - - - ( 1.8.8 )
其中的六个未知量asiAS,iAS=1,…,6按公式(1.8.9)求出。
侧面纹理映射的结果记为Textureside
1.8.4侧面纹理图的反射
由于人脸只向一侧旋转,所以只能得到单侧的侧面纹理,另一侧的纹理可通过对Textureside作反射处理得到。具体地说,由于Faces的拓扑结构是完全对称的,设有直接获得纹理的那一侧脸上的任一三角面片mcyn=Δ(p1,p2,p3)和它在另一侧脸上的对称面片mcyn′=Δ(p1′,p2′,p3′),其中 p iT 3 = lg pt iT 3 lt pt iT 3 T , p iT 3 ′ = lg ′ pt iT 3 lt ′ pt iT 3 T , iT3=1,2,3,则对mcyn中的任一点p=(lg lt)T按下面的公式(1.8.9)计算[lg′lt′],并令 I Textur e side ( lg ′ , lt ′ ) = I Textur e side ( lg , lt ) - - - ( 1.8.8 )
即从直接获得纹理的一侧反射生成另一侧。 lg ′ lt ′ 1 = rs 1 rs 2 rs 3 rs 4 rs 5 rs 6 0 0 1 - 1 lg lt 1 - - - ( 1.8.9 )
其中的六个未知量rsiRS,iRS=1,…,6按公式(1.8.10)求出。
Figure A0214627800416
现在我们得到了完整的Textureside
1.8.5两纹理图的融合
我们融合Texture1和Textureside来得到最终的纹理图Textures。具体地,设定阈值lgmin和lgmax,Textures在任一位置Cyn=(lg lt)T处的取值由下面的式(1.8.11)决定
我们在一个普通的桌面PC系统上实现了上面的建模方法。该计算机CPU为IntelPIII933,配有256M的Rambus内存,安装了Microsoft Windows 2000 Professional操作系统。为进行数据采集,我们使用了两个相同的SANYO VCC-5972P型摄像机,以及两块相同的MatroxMeteorII采集卡来采集两路同步视频,图象分辨率为768*576,真彩色图象,帧速率15帧/秒。数据采集时立体摄像机按图11所示的上下配置(一方面,这种配置使两摄像机的公共视场较大;另一方面,这时外极线的方向基本沿竖直方向,与人脸上灰度变化多数沿水平方向的实际情况相适应),一个实际采集的立体视频序列中的典型帧如图12所示。实际采集的视频共有50帧(即N=50),其中第一帧是手工选择的正面姿态图象。
我们使用的通用模型Faceg来自MPEG4的参考软件MOMUSYS的人脸动画部分,称为ISTFACE,由葡萄牙的Instituto Superior Tecnico开发。它包含1039(nVertex)个结点,组成1704(nMesh)个三角形面片,形成一个完整的人头,不但包括人脸表面(例如眼睛、鼻子、嘴、耳朵等器官和脸颊、额头、后脑等区域),还包括眼珠、牙齿、舌头这些内部器官和颈部区域。它可由MPEG4人脸动画参数流驱动,通过三维网格点的变形实现动画。图13是该模型的中性状态和动画状态(嘴唇的运动)。
下面详细介绍该实施实例中的各个步骤:
第一步:初始化:使用图11所示的摄像机配置拍摄图12所示的立体视频;并设置:
·时间初值t=t0=1。其中t表示时间,对应于视频序列中的图象序号,表示当前处理的图象;t0同样表示时间,表示当前跟踪着的特征被检测出来的时刻;
●计算基础矩阵 F = A L - T 0 - T c , z T c , y T c , z 0 - T c , x - T c , y T c , x 0 R c A R - 1 (其中各已知量的意义参见1.1.2节中的解释)。实际数值是 R c = 0.999952 - 0.005045 + 0.008457 0.006579 0.981257 - 0.192594 - 0.007327 0.192640 0.981242 , T c = 0.012413 0.611240 0.088092 A L = f L 0 u OL 0 f L v OL 0 0 1 , A R = f R 0 u OR 0 f R v OR 0 0 1 , 其中fL=1330.3,fR=1330.6,uOL=384,vOL=288,uOR=384,vOR=288;
●width,height:图象的宽度和高度,在具体实现中,width=768,height=576;
●blockx,blocky:决定了特征检测、跟踪以及匹配时局部窗口中包含的网格点数目。实际上,该窗口以待测点(i,j)为中心,网格点总数为(2*blockx+1)*(2*blocky+1)。在具体实现中,blockx=3,blocky=3;
●quality,dis_min:特征点检测时的阈值,前者控制特征点的质量,后者控制特征点的间距。在具体实现中,quality=0.01,dis_min=10;
●Num_subset,ratio:姿态参数初始化(1.1.4节)时使用的常数,前者是随机选择的子集的数目,后者用来决定如何更新{bReliablek}。实际取值为Num_subset=100,ratio=0.9;
●θ_bound,K_bound,Inc_refine:是我们为计算bReDetect和bRefine而使用的阈值。它们的取值是:θ_bound=20,单位是度;K_bound=10;Inc_refine=4;
●lgmin和lgmax:用来确定Texture1和Textureside之间的分界点,是外眼角和耳朵上沿之间的一个位置。具体地,lgmin对应于右侧脸上的该点,在Faces中标号为306;lgmax对应于左侧脸上的该点,在Faces中标号为120;
●φ:即形状修正时已知的径向基函数,我们选择 φ = ( 1 - r ) + 6 ( 6 + 36 r + 82 r 2 + 72 r 3 + 30 r 4 + 5 r 5 ) ,其中
Figure A0214627800432
表示函数取值为负时就置其为0。
第二步:在图象IL,t上计算梯度向量 g → L , t ( i , j ) = gx gy T = [ I L , t ( i + 1 , j ) - I L , t ( i - 1 , j ) 2 I L , t ( i , j + 1 ) - I L , t ( i , j - 1 ) 2 ] T
以及 G ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky g → L , t ( i + ii , j + jj ) g → L , t T ( i + ii , j + jj ) ,
其中1≤i≤width,1≤j≤height表示图象上任一点,blockx,blocky是与窗口尺寸相关的常量。如果计算时用到了超出图象边界的点,直接令 G L , t ( i , j ) = 0 0 0 0 。接着利用已有的数学工具软件matlab对GL,t(i,j)作奇异值分解,并取其最小的奇异值组合得到{min_val(i,j)},1≤i≤width,1≤j≤height,这是与原图象尺寸相同的浮点数矩阵。
举一个实际例子。在图12所示立体视频序列的IL,1上,以某点(i=346,j=297)为中心的7*7(blockx=blocky=3)局域图象上每一点的灰度值为 48 63 81 97 102 90 72 57 78 109 135 137 121 96 57 98 146 175 177 159 130 61 102 153 180 177 162 133 59 95 134 150 146 130 100 54 80 107 121 113 95 72 48 57 61 69 66 56 50 而7*7的{gx}和{gy}矩阵为
Figure A0214627800442
按前述公式计算出的2*2的矩阵 G = 23311 2665.5 2665.5 30700 ,其两个奇异值为31561.2和22449.8,故min_val(346,297)=22449.8(这里min_val是两个奇异值中较小的一个,函数的自变量是图象上点的二维坐标)。
第三步:在矩阵{min_val(i,j)}中寻找满足下面几个条件的位置作为检测出的特征点。(1)该点处的min_val取值较大;具体地,设整个矩阵的最大值为max_min_val,则特征点处的取值应大于quality*max_min_val,其中quality为一预先设定的阈值,实际取为0.01;(2)该点处的min_val是其3*3邻域内的最大值;(3)任意两特征点的距离应大于dis_min;如果两特征点的距离小于或等于该值,则min_val取值较小的一个位置不被认为是特征点;dis_min实际取为10。按这三条规则我们检测出IL,t上的特征点序列,并记为{pL,t(k)},1≤k≤K(t)。检测的结果参见图14。
第四步:对任一pL,t(k),计算其对应的外极线
Figure A0214627800444
F,并计算 Diff ( i , j ) = Σ ii = - blockx blockx Σ jj = - blocky blocky ( I L , t ( x L , t ( k ) + ii , y L , t ( k ) + jj ) - I R , t ( i + ii , j + jj ) ) 2
其中(i,j)是直线l(其向量表示是l=[l1l2l3],即直线的方程是l1i+l2j+l3=0)上的任一点,即满足 | | l 1 i + l 2 j + l 3 | | l 1 2 + l 2 2 < 1 . ( i min , j min ) = arg min ( i , j ) Diff ( i , j ) . 则pL,t(k)的匹配点即为pR,t(k)=(imin jmin)T。对所有检测出的特征点进行相同的处理,我们得到IR,t上的匹配点序列,并记为{pR,t(k)},1≤k≤K(t)。
第五步:根据任一对匹配pL,t(k)和pR,T(k),计算 B = [ A L - 1 p L , t 1 - R c A R - 1 p R , t 1 ] , s L s R = ( B T B ) - 1 B T T c ,并最终得到三维点 M t ( k ) = 1 2 ( s L A L - 1 p L , t ( k ) 1 + s R R c A R - 1 p R , t ( k ) 1 + T c ) 。对所有成对匹配进行相同处理,我们得到t时刻的三维特征点序列{Mt(k)|k=1,…,K(t)}。同时初始化布尔变量序列{bReliablek},k=1,…,K(t)全为Yes,表示所有点都是可靠的。
第六步:在任一pL,t(k)=(i,j)处计算 e &RightArrow; L , t ( i , j ) = &Sigma; ii = - blockx blockx &Sigma; jj = - blocky blocky g &RightArrow; L , t ( i + ii , j + jj ) ( I L , t + 1 ( i + ii , j + jj ) - I L , t ( i + ii , j + jj ) ) ,以及 d &RightArrow; L , t ( i , j ) = G L , t ( i , j ) - 1 e &RightArrow; L , t ( i , j ) 。则该点在L视频序列中t+1时刻的对应点为 p L , t + 1 ( k ) = p L , t ( k ) - d &RightArrow; L , t ( i , j ) 。对所有的特征点进行相同的处理,我们得到IL,t+1上的跟踪结果,并记为{pL,t+1(k)},1≤k≤K(k)。
第七步:用类似的方法处理R视频序列。具体地,先按前述公式在R,t图上计算
Figure A0214627800457
和{GR,t(iR,jR)},接着对任一pR,t(k)=(iR,jR)计算 e &RightArrow; R , t ( iR , jR ) = &Sigma; ii = - blockx blockx &Sigma; jj = - blocky blocky g &RightArrow; R , t ( iR + ii , jR + jj ) ( I R , t + 1 ( iR + ii , jR + jj ) - I R , t ( iR + ii , jR + jj ) ) ,最终有 d &RightArrow; &prime; R , t ( iR , jR ) = G R , t ( iR , jR ) - 1 e &RightArrow; R , t ( iR , jR ) ,则该点在R视频序列中t+1时刻的对应点为 p R , t + 1 ( k ) = p R , t ( k ) - d &RightArrow; &prime; R , t ( iR , jR ) 。对所有特征点进行相同的处理,我们得到IR,t+1上的跟踪结果,并记为{pR,t+1(k)},1≤k≤K(t)。
第八步:用与第五步类似的方法得到t+1时刻的三维点序列。具体地,根据任一对匹配pL,t+1(k)和pR,t+1(k),计算 B = [ A L - 1 p L , t + 1 ( k ) 1 - R c A R - 1 p R , t + 1 ( k ) 1 ] . s L s R = ( B T B ) - 1 B T T c , 并最终得到三维点 M t + 1 ( k ) = 1 2 ( s L A L - 1 p L , t + 1 ( k ) 1 + s R R c A R - 1 p R , t + 1 ( k ) 1 + T c ) 。对所有成对的跟踪结果进行相同处理,我们得到t+1时刻的三维特征点序列{Mt+1(k)|k=1,…,K(t)}。
第九步:设序列{bReliablek},k=1,…,K(t)中取值为Yes的项的标号为{ks},s=1,…,Kr(t),其中Kr(t)是取值为Yes的总数目。随机选取Num_subset(实际取为100)个三元子集{Setn={N1,n,N2,n,N3,n}},n=1,…,Num_subset,其中1≤N1,n,N2,n,N3,n≤Kr(t)。根据 { M t ( k N 1 , n ) , M t ( k N 2 , n ) , M t ( k N 3 , n ) } { M t + 1 ( k N 1 , n ) , M t + 1 ( k N 2 , n ) , M t + 1 ( k N 3 , n ) } 的对应关系,按1.1.4节的方法估计出刚体运动参数Rt,n,Tt,n,然后对所有的可靠三维对应{Mt(ks),Mt+1(ks)},s=1,…,Kr(t)计算εn,s=‖Mt+1(ks)-Rt,nMt(ks)-Tt,n2,n=1,…,Num_subset;s=1,…,Kr(t),并按下面的公式得到{Rt,Tt}:
{Rt,Tt}={Rn_m,Tn_m},其中 n _ m = arg min n med s n { &epsiv; n , s | s = 1 , &hellip; , Kr ( t ) }
第十步:计算序列Errt={εs=‖Mt+1(ks)-RtMt(ks)-Tt2|s=1,…,Kr(t)},并更新 { bReliabl e k s } , s = 1 , &hellip; , Kr ( t ) 。具体地,我们求出Errt中前K_True个较小的εs对应的标号{su},u=1,…,K_True,然后把 中对应于这些标号的位置处置为Yes,其他的置为No。K_True的具体计算步骤如前所述。
第十一步:按1.1.5节的四步骤方法设置两个布尔型的标志量bReDetect和bRefine,并令t=t+1。
第十二步:如果bRefine=No,转第十三步;否则,令tStart为t时刻之前第二个设置bRefine为Yes的帧,如果这样得到的tStart小于t0就令其为t0。然后调用通用的Levenberg-Marquardt算法(利用matlab工具包)求解式(1.1.10),得到{RatStart+τ,TatStart+τ,τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(t)},再按下面的公式计算出{RtStart+τ,TtStart+τ},τ=0,…,t-tStart-1:
RtStart=RatStart+1,TtStart=TatStart+1
Figure A0214627800467
第十三步:如果bReDetect=Yes,则令t0=t,转第二步;否则,令t=t+1,如果这时t=N,则转第十四步,否则转第六步;
上面各步骤完成了姿态估计(1.1节的内容)。在对图12的输入进行处理时,特征检测和匹配在第1,15,29,38帧处(即t0的不同取值),实际结果如图14所示。每次检测和匹配上的全部特征数目分别是89、97、107和6I(即各个K(t0)),在t0保持不变的所有时刻(即两次检测之间的特征跟踪)里一直可靠的特征点(即序列{bReliablek}中取值为Yes点的数目)分别有12、18、36、14个。
第十四步:在IL,1和IR,1上手工选择左内眼角、右内眼角、左嘴角和右嘴角这四个二维显著特征点,实际结果如图15所示。根据这四个位置处的两幅图间的匹配,可按前述的立体重建算法得到四个三维显著特征点,即左内眼角
Figure A0214627800471
,右内眼角
Figure A0214627800472
,左嘴角 ,右嘴角M 。然后按公式(1.2.1)将原始通用模型Faceg变形为Faceinit。其中三个比例因子sx,sy,sz的计算方法如下:令 s x = dist _ 3 D ( M 1 LE , M 1 RE ) dist _ 3 D ( M g LE , M g RE ) ,即建模对象和Faceg中Seg_E长度(两内眼角的距离)的比值;令 s y = dist _ 3 D ( M 1 LE + M 1 RE , M 1 LM + M 1 RM ) dist _ 3 D ( M g LE + M g RE , M g LM + M g RM ) , 即Seg_EM长度(两眼中心到嘴中心的距离)的比值;令sz=sy。其中 M g LE , M g RE , M g LM , M g RM 是在Faceg上这四个主要特征点的三维坐标。
第十五步:接着我们求解generic坐标系到L摄像机坐标系的刚体变换Rg,l,Tg,l。我们选择 { M init LE , M init RE , ( M init LM + M init RM ) / 2 } { M 1 LE , M 1 RE , ( M 1 LM + M 1 RM ) / 2 } 这三个三维对应点,按前述的姿态参数初始化一节的方法求解。
获得了Rg,l,Tg,l后,系统按下面的公式计算Rg,t,Tg,t,t=2,…,N:
Rg,t=Rt-1Rg,t-1,Tg,t=Rt-1*Tg,t-1+Tt-1,t=2,…,N
接着系统会自动判断对应于侧面视图的帧side,即选择side为使Rg,t的旋转角最接近90度的时刻t。我们实际得到的side=50,对应的旋转角度是86.9度。
第十六步:在图象IL,side上手工拾取侧面特征点,实验结果如图16所示,记为 { m L , side kk = x L , side kk y L , side kk T } , kk=1,…,NumSF,其中NumSF为侧面特征点的数目,实际为24。
第十七步:按前述方法求解式(1.3.1),得到三维侧面特征点 { Ms g kk = 0 Y g kk Z g kk T } , kk=1,…,NumSF。
第十八步:按前述的1.3节中的径向基函数算法把Faceinit变形为Face1。Subset中的点包括两类:一类是三维显著特征点,共4个,即 { M init LE , M init RE , M init LM , M init RM } ;另一类是侧面特征点,即十七步求出的 kk=1,…,NumSF。
第十九步:按前述1.4节中计算投影轮廓的方法得到Face1在时刻1时投影到图象平面的轮廓点 Cont 1 = { pt 1 iC 1 | iC 1 = 1 , &hellip; , nNum 1 } ,Face1就是那里的Faceproj
第二十步:手工标出IL,1上的人脸轮廓,如图7所示。这是一个闭合的多边形,记为 Cont _ img 1 = { xCI 1 iCimg yCI 1 iCimg | iCimg = 1 , . . . , nNumCI 1 } ,是连续的二维顶点列表,nNumCI1是二维顶点的数目。
第二十一步:按照前述的公式(1.4.1)确定Cont1中点在Face2中的三维坐标 { M 2 pt 1 iC 1 | iC 1 = 1 , &hellip; , nNum 1 } .
第二十二步:按前述1.3节中的径向基函数算法把Face1变形为Face2。Subset中新添加的点为第二十一步求出的 { M 2 pt 1 iC 1 | iC 1 = 1 , &hellip; , nNum 1 } .
第二十三步:手工标出IL,1图上的正面人脸特征轮廓点(实验结果为图8),结果为 xCF 1 iCF yCF 1 iCF | iCF = 1 , . . . , nNumCF } ,其中nNumCF是点的总数目。
第二十四步:按前述的公式(1.5.1)求解第二十三步标出的特征轮廓点的三维坐标
Figure A0214627800485
第二十五步:按前述1.3节中的径向基函数算法把Face2变形为Face3。Subset中新添加的点为第二十四步求出的
Figure A0214627800486
第二十六步:系统自动判断对应于中间视图1的帧int1,即选择int1为使Rg,t的旋转角最接近25度的时刻t。接着在IL,int1图上的手工标出人脸轮廓,如图9所示。同样用闭合多边形表示,记为 Cont _ img int 1 = { xCI int 1 iCimg 1 yCI int 1 iCimg 1 | iCimg 1 = 1 , . . . , nNumCIint 1 } ,nNumCIint1是顶点数。
第二十七步:按前述1.4节中计算投影轮廓的方法得到Face3在时刻int1时投影到图象平面的轮廓点 Cont int 1 = { pt intl iC 2 | iC 2 = 1 , &hellip; , nNum _ int 1 } ,Face3就是那里的Faceproj
第二十八步:根据Cont_imgint1确定Contint1中点在Face4中的三维坐标。具体地,对于任一 pt 1 i = pt int 1 iC 2 ,定义 v 2 = v 2 x v 2 y v 2 z T = M 3 pt 1 i + R g , l - 1 T g , l ,其中 M 3 pt 1 i = X 3 pt 1 i Y 3 pt 1 i Z 3 pt 1 i T 是该点在Face3中的三维坐标。则该点在Face4中的坐标 满足 M 4 pt 1 i = M 3 pt 1 i + t line 2 v 2 。其中参数tline2根据二维直线 X 3 pt 1 i + t line 2 v 2 x Z 3 pt 1 i + t line 2 v 2 z Y 3 pt 1 i + t line 2 v 2 y Z 3 pt 1 i + t line 2 v 2 z T 与闭合多边形Cont_imgint1的交点求出,方法如1.4节所述。对Contint1中所有点按上面的步骤计算,得到 { M 4 pt 1 iC 2 | iC 2 = 1 , &hellip; , nNum _ int 1 } .
第二十九步:按前述1.3节中的径向基函数算法把Face3变形为Face4。Subset中新添加的点为第二十八步求出的 { M 4 pt 1 iC 2 | iC 2 = 1 , &hellip; , nNum _ int 1 } .
第三十步:系统自动判断对应于中间视图2的帧int2,即选择int2为使Rg,t的旋转角最接近40度的时刻t。接着在IL,int2图上的手工标出人脸轮廓,如图10所示。同样用闭合多边形表示,记为 Cont _ img int 2 = { xCI int 2 iCimg 2 yCI int 2 iCimg 2 | iCimg 2 = 1 , . . . , nNumCIint 2 } ,nNumCIint2是顶点数。
第三十一步:按前述1.4节中计算投影轮廓的方法得到Face4在时刻int2时投影到图象平面的轮廓点 Cont int 2 = { pt int 2 iC 3 | iC 3 = 1 , &hellip; , nNum _ int 2 } ,Face4就是那里的Faceproj。第三十二步:根据Cont_imgint2确定Contint2中点在Face5中的三维坐标。具体地,对于任一 pt 2 i = pt int 2 iC 3 ,定义 v 3 = v 3 x v 3 y v 3 z T = M 4 pt 2 i + R g , 1 - 1 T g , 1 ,其中 M 4 pt 2 i = [ X 4 pt 2 i Y 4 pt 2 i Z 4 pt 2 i ] T 是该点在Face4中的三维坐标。则该点在Face5中的坐标 满足 M 5 pt 2 i = M 4 pt 2 i + t line 3 v 3 。其中参数tline3根据二维直线 X 4 pt 2 i + t line 3 v 3 x Z 4 pt 2 i + t line 3 v 3 z Y 4 - pt 2 i + t line 3 v 3 y Z 4 pt 2 i + t line 3 v 3 z T 与闭合多边形Cont_imgint2的交点求出,方法如1.4节所述。对Contint2中所有点按上面的步骤计算,得到 { M 5 pt int 2 iC 3 | iC 3 = 1 , &hellip; , nNum _ int 2 } .
第三十三步:按前述1.3节中的径向基函数算法把Face4变形为Face5。Subset中新添加的点为第三十二步求出的 { M 5 pt int 2 iC 3 | iC 3 = 1 , &hellip; , nNum _ int 2 } 。Face5即为最终的形状模型Faces
这样我们一共进行了五次形状修正,对应于1.3至1.7节的形状修正A-E,实际上各步使用的Subset中的点数目如下面的表1所示。
不同模型     新加入的Subset点及其数目 Subset点总数
Face1 4个正面显著特征(两内眼角、两嘴角)+24个侧面特征 28
  Face2 正面视图的投影轮廓点(41个)     69
  Face3 正面视图中两眼、两鼻孔和嘴的特征轮廓点(44个)     113
  Face4 中间视图1时的投影轮廓点(37个)     150
  Faces 中间视图2时的投影轮廓点(44个)     194
表1形状修正中每一步新加入的Subset点的位置及数目
第三十四步:对Faces中的任一三维点 M s pt = X s pt Y s pt Z s pt T 按公式 作柱面映射,结果为{Cynpt}={(lgpt ltpt)}。
第三十五步:将所有
Figure A0214627800501
在正面姿态参数Rg,l,Tg,l下按公式
Figure A0214627800502
进行投影,得到 { p &RightArrow; 1 pt } = { x 1 pt y 1 pt T } 。然后按公式(1.8.3)得到正面纹理图Texture1,实际例子如图17所示。
第三十五步:与第三十四步类似,获得Faces的侧面纹理图Textureside。具体地,将所有 在侧面姿态参数Rg,side,Tg,side下按公式 进行投影,得到 { p &RightArrow; side pt } = { x side pt y side pt T } 。然后按公式(1.8.7)得到侧面纹理图Textureside,实际例子如图18所示。
第三十六步:在柱面图{(lg,lt)}上进行纹理反射。实际实验中直接获得纹理的那一侧脸是左侧,因此这一步根据左侧的纹理信息按公式(1.8.8)生成右侧脸。这时完整的Textureside如图19所示。
第三十七步:我们按公式
Figure A0214627800507
融合Texture1和Textureside来得到最终的纹理图Textures,实际结果如图20所示。
我们最终的、映射了Textures的建模结果Faces如图21所示。

Claims (4)

1.融合多视角、多线索二维信息的人脸三维模型的建立方法,含有二维对应创建人脸模型的方法,其特征在于:它首先用与人脸上、下位置相对应的两台相同且外极线方向基本沿垂直方向的摄像机在人脸无表情变化的情况下拍摄建模对象的人脸从正面逐步转约90度到侧面的视频序列,再用两块相同的采集卡来采集上下两路同步视频并输入计算机中;然后,从人脸的通用模型Faceg开始,根据获得的建模对象的二维信息逐步进行修改,最终得到特定人的人脸模型Faces,其中修改的只是人脸上的三维结点列表P中的三维点坐标,而人脸上的三角形面片列表F保持不变,即只改变模型形状P而模型的拓扑结构F不变;具体而言,它依次含有如下步骤:
(1).输入立体视频序列IL,t和IR,t
L,R对应于两台摄像机,t=1,…,N,表示N帧不同时刻的图像:I则是由像素组成的二维数组,每个像素包括R、G、B三个分量;t=1的时刻对应于人脸正面姿态,通过人的判断手工选择;
(2).姿态估计,即求解人头旋转过程中的姿态参数(即刚体变换系数):
用下述刚体变换公式表示上述图象序列中人脸的帧间运动:
Mt+1=RtMt+Tt,t=1,…,N-1,
Mt、Mt+1分别表示第t帧、第t+1帧时人脸上任一点在L摄像机坐标系中的坐标;Mt、Mt+1是人脸上的同一位置在不同时刻的三维坐标,即是帧间三维对应点;用可靠三维点的运动就可估计姿态参数;
{Rt,Tt,t=1,…,N-1}是第t帧到第t+1帧姿态参数的旋转和平移分量;
姿态估计依次含有如下步骤:
(2.1),起始时刻:先进行二维特征的检测和匹配,再通过立体重建得到起始时刻的三维点:
首先,设置特征检测帧t0=t,并在IL,t图上作二维特征检测,即选择那些局部灰度变化丰富的点即为在跟踪和匹配时可靠程度较高的点作为特征点,其步骤如下:
用已有的KLT算法计算IL,t图上特征点p(x=i,y=j)处的图像变化程度G(i,j): G ( i , j ) = &Sigma; ii = - blockx blockx &Sigma; jj = - blocky blocky g &RightArrow; ( i + ii , j + jj ) g &RightArrow; T ( i + ii , j + jj ) ,
Figure A0214627800022
为待测点p处图像的梯度向量: g &RightArrow; ( i , j ) = gx gy T = [ I ( i + 1 , j ) - I ( i - 1 , j ) 2 I ( i , j + 1 ) - I ( i , j - 1 ) 2 ] T , I(i+1,j)为该点处图像的灰度,余类推;以待测点p为中心的窗口W的尺寸为(2*blockx+1)*(2*blocky+1);然后再用已有的matlab工具包求出G的最小奇异值sing_min,再选择sing_min很大的点p为检测出的特征点;把在t时刻检测出的特征点记为{pL,t(k)},L,t表示图象序号,K(t)是特征点总数,k为其标号,1≤k≤K(t);
其次,对同一时刻两个摄像机L,R拍摄同一场景得到的两幅图像即立体图对作二维特征匹配;同一个三维点在不同图像中的投影都为二维点,它们之间互称为二维对应,立体图对间的二维对应称为匹配:
对于IL,t图中某一点pL,t(k)=(xL,t(k)yL,t(k)T,它的匹配点pR,t(k)=(xR,t(k)yR,t(k))T应位于一条由pL,t(k)决定的直线上,在这个一维空间中,选择使一个局部窗口W内总灰度差异最小的点作为pL,t(k)的匹配点pR,t(k),总灰度差异的表达式: Diff ( i , j ) = &Sigma; ii = - blockx blockx &Sigma; jj = - blocky blocky ( I L , t ( x L , t ( k ) + ii , y L , t ( k ) + jj ) - I R , t ( i + ii , j + jj ) ) 2
(i,j)是直线 F上的任一点;记时刻t的匹配结果为{pR,t(k)},总数目为K(t)个,每点都与pL,t(k)相对应,在下述公式表示的直线上搜索,使Diff(i,j)最小的位置: p L , t ( k ) 1 T F p R , t ( k ) 1 = 0 ,其中: F = f L 0 u OL 0 f L v OL 0 0 1 - T 0 - T c , z T c , y T c , z 0 - T c , x - T c , y T c , x 0 R c f R 0 u OR 0 f R v OR 0 0 1 - 1 ,fL,fR,uOL,vOL,uOR,vOR为摄像机内参数,已知量;Rc,Tc=[Tc,xTc,yTc,z]T分别为旋转和平移分量,属摄像机外参数,已知量;
再次,在获得同一时刻立体图对间的匹配结果pL,t和pR,t后,通过立体重建得到用摄像机坐标系表示的三维点Mm,t,m为摄像机L或R,Mm,t为t时刻三维点在m摄像机坐标系中的坐标;
根据两摄像机的配置关系式:
ML=RcMR+Tc,ML、MR分别是同一点在这两个摄像机坐标系中的坐标;以及摄像机透视投影公式: s m A m - 1 p m , t 1 = M m , t ,sm(即sL或sR)是待定的比例因子(由稍后的公式求出),得到三维点在摄像机L、R中的坐标ML,t和MR,t M L , t = 1 2 ( s L A L - 1 p L , t 1 + s R R c A R - 1 p R , t 1 + T c ) ; A L = f L 0 u OL 0 f L v OL 0 0 1 , A R = f R 0 u OR 0 f R v OR 0 0 1 ; S L S R = ( B T B ) - 1 B T T c , B = [ A L - 1 p L , t 1 - R c A R - 1 p R , t 1 : M R , t = R c - 1 ( M L , t - T c ) ;
在姿态估计的余下部分,三维点都用L摄像机坐标系中的坐标来表示,因此省略下标L,即将ML,t简记为Mt
(2.2),后继时刻:对t+1时刻的立体图对用KLT算法进行二维特征跟踪,再同样通过立体重建得到各后继时刻的三维点;跟踪是指同一摄像机拍摄的不同时刻图像间的二维对应:
在二维特征跟踪时,设检测的特征点在图像Im,t(p)(m为L或R)上,p(x=i,y=j)是任一特征点,则其在图像Im,t+1上的跟踪结果为
Figure A0214627800046
,其中 d &OverBar; = G - 1 e &OverBar; ,G已如上述,而 e &RightArrow; ( i , j ) = &Sigma; ii = - blockx blockx &Sigma; jj = - blocky blocky g &RightArrow; ( i + ii , j + jj ) - ( I m , t + 1 ( i + ii , j + jj ) - I m , t ( i + ii , j + jj ) ) 记跟踪得到的特征点为{pm,t+1(k)},m表示L或R,t+1为时刻:对于摄像机L为: p L , t + 1 ( k ) = p L , t ( k ) - d &OverBar; L , t ( p L , t ( k ) ) , 1 &le; k &le; K ( t ) ; 对于摄像机R为: p R , t + 1 ( k ) = p R , t ( k ) - d &OverBar; R , t ( p R , t ( k ) ) , 1 &le; k &le; K ( t ) ;
根据任一对匹配的跟踪点计算三维点{Mt+1(k)|k=1,…,K(t))}(如前所述,这里省略了下标L); M t + 1 ( k ) = 1 2 ( s L A L - 1 p L , t + 1 ( k ) 1 + s R R c A R - 1 p R , t + 1 ( k ) 1 + T c ) ;
其中 S L S R = ( B T B ) - 1 B T T c , B = [ A L - 1 p L , t + 1 ( k ) 1 - R c A R - 1 p R , t + 1 ( k ) 1 ] :
(2.3),姿态参数初始化:根据两个时刻t和t+1之间的一组三维对应点{Mt(k))|k=1,…,K(t)}和{Mt+1(k)|k=1,…,K(t)},和表示可靠性的序列{bReliablek},k=1,…,K(t)从式Mt+1(k)=RtMt(k)+Tt,t=1,…,N-1中用基于最小中值的鲁棒估计算法求解Rt,Tt
设:定义并不断更新布尔数组{bReliablek}为可靠度量序列,Yes表示可靠,No表示不可靠,其中取值为Yes的项的标号为{ks},s=1,…,Kr(t),Kr(t)是取值为Yes的项的总数,从其中挑出Num_subset个子集,每个子集含有三对三维对应点,即{Setn={N1,n,N2,n,N3,n}},n=1,…,Num_subset,1≤N1,n,N2,n,N3,n≤Kr(t),每个三元子集中三维对应点为: { M t ( k N 1 , n ) , M t ( k N 2 , n ) , M t ( k N 3 , n ) } { M t + 1 ( k N 1 , n ) , M t + 1 ( k N 2 , n ) , M t + 1 ( k N 3 , n ) } ,可简记为{(Mim,Mim’)|im=0,1,2},它表示三对不共线的三维对应点,Rt,Tt满足Mim′=RtMim+Tt|im=0,1,2;然后从下列公式中求出R和T(略去下标t): R = I + sin | | r | | | | r | | [ r ] x + 1 - cos | | r | | | | r | | 2 [ r ] x 2 , 其中 r = &theta; * r ^ , &theta; = arccos ( r ^ &times; dir 1 ) &CenterDot; ( r ^ &times; dir 1 &prime; ) | | ( r ^ &times; dir 1 ) &CenterDot; ( r ^ &times; dir 1 &prime; ) | | , r ^ = ( dir 1 &prime; - dir 1 ) &times; ( dir 2 &prime; - dir 2 ) | | ( dir 1 &prime; - dir 1 ) &times; ( dir 2 &prime; - dir 2 ) | | ,
Figure A0214627800055
是旋转的中心轴,称旋转轴,3*1的向量;θ是绕 的旋转角; dir im = M im - M 0 | | M im - M 0 | | , im = 1,2 ; dir im &prime; = M im &prime; - M 0 &prime; | | M im &prime; - M 0 &prime; | | , im = 1,2 ; [r]x是根据3*1向量r=[rxryrz]T定义的反对称矩阵: [ r ] x = r x r y r z x = 0 - r z r y r z 0 - r x - r y r x 0 , I = 1 0 0 0 1 0 0 0 1 是单位矩阵;平移分量T由下式估计出: T = 1 3 &Sigma; im = 0 2 ( M im &prime; - RM im ) ;
对每个子集Setn按上述公式估计出姿态参数,记为Rt,n,Tt,n;再对所有的可靠三维对应{Mt(ks),Mt+1(ks)},s=1,…,Kr(t)按下式计算对应点Mt(ks),Mt+1(ks)与姿态参数Rt,n,Tt,n的符合程度εn,s,该值越小,则两者越符合:
εn,s=‖Mt+1(ks)-Rt,nMt(ks)-Tt,n2
再从集合{Rt,n,Tt,n},n=1,…,Num_subset中选取Rt,Tt
{Rt,Tt}={Rn_m,Tn_m}, n _ m = arg min n med s n { &epsiv; n , s | s = 1 , &hellip; , Kr ( t ) } ,
Figure A02146278000513
表示针对下标s取集合{εn,s|s=1,…,Kr(t))}的中值,它对不同的n构成一个新的数组 { med s n | n = 1 , &hellip; , Num _ subset } ; 则是在这个中值数组中选择取最小值的那个n;(2.4),在t=t+1时刻,设置:是否需要重新调用特征检测和匹配模块的布尔标志量bReDetect;是否需要进行姿态求精的布尔标志量bRefine;(2.5),当t=N时,姿态估计结束;(3).模型初始化和姿态初始化:模型初始化是通用模型特定化方法的初始步骤,它从通用模型Faceg得到一个初始化模型Faceinit,即对通用模型进行尺度变换,可用下式进行: M init = s x 0 0 0 s y 0 O O s z M g ,Mg和Minit分别是Faceg和Faceinit上的任一组对应点;sx是建模对象和Faceg的两内眼角距离Seg_E长度的比值,sy是两眼中心到嘴中心距离Seg_EM长度的比值;sz=sy;再根据此对Faceg中所有点按上式变换;
姿态初始化是为了获得模型和图象间的对应,即计算从人脸generic坐标系到L摄像机坐标系的刚体变换;即从下式求解Rg,l,Tg,l
Ml=Rg,lMinit+Tg,l,Ml和Minit分别是时刻t=1时人脸和Faceinit间的任一组对应点;本发明取上述两个模型在LE(左眼)、RE(右眼)和Mid M(嘴中心)这三个位置处的对应点,按上述
Figure A0214627800062
、θ、R、[r]x、T各式依次求得Rg,l和Tg,l;再按下式从Rt,Tt,t=1,…,N-1求出Rg,t,Tg,t,t=2,…,N:Rg,t=Rt-1Rg,t-1Tg,t=Rt-1*Tg,t-1+Tt-1,t=2,…,N;(4).利用三维信息修正人脸模型:(4.1),手工拾取侧面特征点:设:手工标出的侧面特征点为 m L , side kk = x L , side kk y L , side kk T } , kk=1,…,NumSF,NumSF=24为侧面特征点的数目,side表示对应于侧面视图的时刻;
(4.2),形状修正A:把Faceinit变形为Face1;我们先确定人脸三维结点列表P中一个子集Subset的新位置,再通过一个已知的径向基函数算法来确定P中所有结点的坐标;
径向基函数算法如下所述:设要将Facestart变形为Facenew,已知一个Subset中的结点在Facenew中的坐标为{New1,…,NewS},记其在Facestart中的对应点为{Sta1,…,StaS},S为Subset中点的数目;现在对于模型中的任一位置pt,其在Facenew中的坐标 可由下面的已知公式求出: M pt new = &Sigma; jRBF = 1 S C jRBF &phi; ( | | M pt start - St a jRBF | | ) ; 是pt点在Facestart中的坐标,而{C1,…,CS}可按下面的公式求出 C 1 T . . . C S T = &phi; ( | | Sta 1 - St a 1 | | ) . . . &phi; ( | | Sta 1 - St a S | | ) . . . . . . . . . &phi; ( | | St a S - St a 1 | | ) . . . &phi; ( | | Sta S - Sta S | | ) - 1 New 1 T . . . New S T ;φ是已知的径向基函数;
“形状修正A”在利用上面的径向基函数算法时,设置Facestart=Faceinit,Facenew=Face1,而Subset中的点包括两类:一类是人脸上的左眼内角LE、右眼内角RE、左外嘴唇LM、右外嘴唇RM四个三维显著特征点,由二维显著特征点通过上述立体重建方法得出;另一类是上述24个侧面特征点,它们的三维位置按下面的步骤从手工标出的二维点中获得:
设:侧面特征点在人脸generic坐标系中的三维坐标为 { Ms g kk = 0 Y g kk Z g kk T } , kk=1,…,NumSF;则对于任一kk,有
其中 R g , side = R g , side , 1 T R g , side , 2 T R g , side , 3 T , T g , side = T g , side , 1 T g , side , 2 T g , side , 3 是姿态参数的分量表示,为已知量;可直接用线性方程组的求解方法得到 中的两个未知数
Figure A0214627800077
(4.3),形状修正B:按前述的径向基函数算法把Face1变形为Face2
设Facestart=Face1,Facenew=Face2,Subset中除了包括“形状修正A”里已经确定了的点之外,还有一些新添加的点,即从正面姿态下手工标出的人脸轮廓恢复出来的三维点,得到这些三维点的基本方法是把当前人脸模型Face1向正面姿态下的图象平面作透视投影并计算三维模型投影结果的二维轮廓点,最后依赖于这些轮廓点和上述图象上的人脸轮廓即闭合多边形的匹配来计算其三维坐标:
首先,计算出Face1在t=1时刻向手工选择的正面视图的图象平面上的投影轮廓 Cont 1 = { pt 1 iC 1 | iC 1 = 1 , &hellip; , nNum 1 } , 是模型三维结点列表P中点的标号, 1 &le; pt 1 iC 1 &le; nVertex ; 而nNum1是Cont1中顶点的数目,它们即形状修正B中向Subset新添加的点;它们是通过判断投影线与模型的交点来选择的,即在某一轮廓点上,投影线与模型不能有其他交点,其算法如下:Face1为三维模型,透视投影中心为 Center = - R g , 1 - 1 T g , 1 已知量,则对模型中所有顶点计算过Center点的投影线和模型的交点,据此判断该顶点是否在投影轮廓上,若Mnow为Face1中任一点,Planejp为Face1中任一面片构成的平面,计算过Center点和Mnow的直线,即投影线,与Planejp的交点为Cnow;如果对某一面片1≤jp≤nMesh而言,点Cnow在线段CMnow的内部,则Mnow不在投影轮廓上;否则即为投影轮廓点;
再计算Cont1中的任一点 在Face2的三维坐标:设上述图象上的人脸轮廓是 Cont _ img 1 = { xCI 1 iCimg yCI 1 iCimg | iCimg = 1 , . . . , nNumCI 1 } ,它是由二维点列表构成的多边形,nNumCI1是点的数目;则 pti = pt 1 iC 1 在Face2的三维坐标
Figure A02146278000715
M 2 pti = M 1 pti + t line v ; v=(vxvyvz)T=vpn×(vn×vpn);
其中, M 1 pti = X 1 pti Y 1 pti Z 1 pti T 是pti点在Face1中的坐标;经
Figure A02146278000718
点的投影方向为vpn为已知量;vn为pti点在Faceg中的法向;参数tline可根据二维直线 X 1 pti + t line v x Z 1 pti + t line v z Y 1 pti + t line v y Z 1 pti + t line v z T 与闭合多边形Cont_img1的交点求出:
设Cont_img1中的任一线段为seg=(x0+sdxy0+sdy)T,0≤s≤1,s为线段参数,其他都是已知量;先按下面的公式计算 si t line = d x - ( X 1 pti - v x * Z 1 pti / v z ) d y - ( Y 1 pti - v y * Z 1 pti / v z ) - 1 x 0 - v x / v z y 0 - v y / v z
对所有的seg求出这两个数值si和tline;对于很多seg上面的公式无解,即公式里的矩阵不可逆;有解且得到的si满足0≤si≤1的seg有一个或两个,取与点 X 1 pti Z 1 pti Y 1 pti Z 1 pti T 距离近的那一个seg,它得到的tline即为所求;
(4.4),形状修正C:按前述的径向基函数算法把Face2变形为Face3
设Facestart=Face2,Facenew=Face3,Subset中除了包括“形状修正A、B”里已经确定了的点之外,还有一些新添加的点,即从手工标出的正面人脸特征轮廓点:眼睛、鼻孔和嘴的轮廓点恢复出来的三维点:
设某特征轮廓点的二维坐标是 xCF 1 iCF yCF 1 iCF ,该点在Face2中的坐标为 M 2 iCF = X 2 iCF Y 2 iCF Z 2 iCF T ,设该点的Z坐标已经计算正确,即它在Face3中的Z坐标等于,则它在Face3中的坐标为 M 3 iCF = xCF 1 iCF * Z 2 iCF yCF 1 iCF * Z 2 iCF Z 2 iCF T ,即这些特征轮廓点在正面姿态下的投影等于实际图象上的特征点;
(4.5),形状修正D:按前述的径向基函数算法把Face3变形为Face4
设Facestart=Face3,Facenew=Face4,Subset中除了包括“形状修正A、B、C”里已经确定了的点之外,还有一些新添加的点,即从手工标出的中间视图1即使Rg,t的旋转角最接近25度的时刻t的人脸轮廓中恢复出来的三维点,具体步骤如下:设该视图对应于时刻int1,与形状修正B所述的相同,先算出Face3在int1时的投影轮廓 Con t int 1 = { pt int 1 iC 2 | iC 2 = 1 , &hellip; , nNum _ int 1 } ,
Figure A0214627800089
是P中点的标号,nNum_int1是投影轮廓中的顶点数目;对于任一点 ptli = pt int 1 iC 2 ,它在Face3中的三维坐标 M 3 ptli = X 3 pt 1 i Y 3 pt 1 i Z 3 pt 1 i T ,而 Center = - R g , 1 - 1 T g , 1 如前所述是L摄像机光心在generic坐标系中的坐标,则该点在Face4中的坐标应满足 M 4 ptli = M 3 ptli + t line 2 v 2 , v 2 = v 2 x v 2 y v 2 z T = M 3 ptli - Center ,参数tline2同样根据直线 X 3 pt 1 i + t line 2 v 2 x Z 3 pt 1 i + t lin 2 v 2 z Y 3 pt 1 i + t line 2 v 2 y Z 3 pt 1 i + t line 2 v 2 z T 与闭合多边形Cont_imgint1的交点求出;
(4.6),形状修正E:按前述的径向基函数算法把Face4变形为Face5(即最终的形状模型Faces);
设Facestart=Face4,Facenew=Face5,Subset中除了包括“形状修正A、B、C、D”里已经确定了的点之外,还有一些新添加的点,即从手工标出的中间视图2即使Rg,t的旋转角最接近40度的时刻t的人脸轮廓中恢复出来的三维点,具体的恢复步骤与形状修正D相同;
(5).纹理映射:
目前的纹理是通过L摄像机拍摄的正面和侧面视图(IL,1和IL,side)生成,纹理映射是要为创建的模型Faces生成看起来有相片一样真实感的柱面纹理图Textures,即要把采集的图象转换到一个统一的柱面坐标系中并进行融合,它依次含有如下步骤:
(5.1),生成柱面展开图:
首先对形状修正E的最终结果Faces中的任一三维点 M s pt = X s pt Y s pt Z s pt T 按下式作柱面映射:
Figure A0214627800092
,映射的结果是一个二维平面,其上的点为{Cynpt}={(lgptltpt)};这里lgpt是柱面上的经度位置,用弧度值表示;ltpt则是柱面旋转轴向的坐标位置;
(5.2),生成正面纹理图:
把所有点
Figure A0214627800093
在已知的正面姿态参数Rg,l,Tg,l下按下式在正面视图IL,1上投影, p &RightArrow; 1 pt = x 1 pt y 1 pt T 是Faces中三维点Ms pt在IL,1上的二维投影:
Figure A0214627800095
其中 R g , 1 = R 1 g , 1 T R 2 g , 1 T R 3 g , 1 T , T g , 1 = T 1 g , 1 T 2 g , 1 T 3 g , 1 , 是旋转矩阵和平移向量的分量表示;
接着,把IL,1中的各像素映射到Cyn平面上,即对Faces中的任一面片facet=(pt1pt2pt3)T,mproj=Δ(p1,p2,p3)表示这三点在IL,1平面上构成的三角形,mcyn=Δ(p1′,p2′,p3′)是Cyn平面上的对应三角形,即 p iT 1 = x 1 pt iT 1 y 1 pt iT 1 T , p iT 1 &prime; = lg pt iT 1 lt pt iT 1 T , iT1=1,2,3;再对三角形mcyn内的点[lglt]按下式计算[xy]: x y 1 = a 1 a 2 a 3 a 4 a 5 a 6 0 0 1 - 1 lg lt 1 ; a1~a6由下式求出:
Figure A0214627800101
再令正面纹理图 I Textur e 1 ( lg , lt ) = I L , 1 ( x , y ) ;
(5.3),生成侧面纹理图:
把所有点
Figure A0214627800103
在已知的侧面姿态参数Rg,side,Tg,side,下按下式在侧面视图IL,side上投影, p &RightArrow; side pt = x side pt y side pt T 是Faces中三维点 在IL,side上的二维投影: R g , side = R 1 g , side T R 2 g , side T R 3 g , side T , R g , side = R 1 g , side R 2 g , side R 3 g , side ; 再对Faces中的任一面片facet=(pt1pt2pt3)T,设msproj=Δ(ps1,ps2,ps3), ps iT 2 = x side pt iT 2 y side pt iT 2 T ,iT2=1,2,3;再对三角形mcyn内的点[lglt]按下式计算[xsys]: xs ys 1 = as 1 as 2 as 3 as 4 as 5 as 6 0 0 1 - 1 lg lt 1 ; as1~as6由下式求出:
再令侧面纹理图 I Textur e side ( 1 g , lt ) = I L , side ( xs , ys ) ;
(5.4),反射侧面纹理图以得到另一侧的纹理图,这是因为Faces的拓扑结构是完全对称的;
设:直接获得纹理的那一侧脸上的任一三角面片mcyn=Δ(p1,p2,p3),它在另一侧脸上的对称面片是mcyn′=Δ(p1′,p2′,p3′),其中 p iT 3 = lg pt iT 3 lt pt iT 3 T , p iT 3 &prime; = lg pt iT 3 &prime; lt pt iT 3 &prime; T , iT3=1,2,3;对mcyn中的任一点p=(lglt)T按下式计算[lg′lt′], lg &prime; lt &prime; 1 = rs 1 rs 2 rs 3 rs 4 rs 5 rs 6 0 0 1 - 1 lg lt 1 ;
rs1~rs6按下式求出:
再从直接有纹理的一侧反射生成另一侧: I Textur e side ( l g &prime; , l t &prime; ) = I Texture side ( lg , lt ) ;
(5.5),正面的和侧面的纹理图的融合,得到最终纹理图Textures
设定阈值lgmin和lgmax,Textures在任一位置Cyn=(lglt)T处的取值按下式给出:
2.根据权利要求1所述的融合多视角、多线索二维信息的人脸三维模型的建立方法,其特征在于:所述的姿态估计步骤中的更新可靠度量序列{bReliablek}的方法,它依次含有如下步骤:
(1).根据对序列Errt的统计分析计算正确对应的数目K_True;
(1.1),设:K_True的初始值为Kr(t)*ratio,ratio为预先设定的常数;Errt={εs=‖Mt+1(ks)-RtMt(ks)-Tt2|s=1,…,Kr(t)}中按从小到大排序的前K_True个元素组成的子序列为E;
(1.2),计算E的均值 &epsiv; &OverBar; = 1 K _ True &Sigma; &epsiv; s &Element; E &epsiv; s 和标准差 &sigma; = 1 K _ True - 1 &Sigma; &epsiv; s &Element; E ( &epsiv; s - &epsiv; &OverBar; ) 2 ;
(1.3),在Errt中寻找满足‖εs- ε‖>3*σ的点,设数目为InValid_T;
(1.4),若0≤Kr(t)-K_True-InValid_T≤1,即K_True个对应正确,终止;否则,转步骤(1.5);
(1.5),若K-K_True-InValid_T>1,令K_True加1,转步骤(1.2);否则,转步骤(1.6);
(1.6),若K-K_True-InValid_T<0,令K_True减1,转步骤(1.2);
(2).设Errt中前K_True个较小的εs对应的标号为{su},u=1,…,K_True,把 中对应于这些标号的位置赋值为Yes,其他赋值为No;
3.根据权利要求1所述的融合多视角、多线索二维信息的人脸三维模型的建立方法,其特征在于:所述的姿态估计步骤中的设立是否要重新调用特征检测和匹配模块的布尔标志量bReDetect、是否要进行姿态求精的布尔标志量bRefine这两者的方法如下:
(1).若t=N,即当前图象是序列中的最后一帧,则bReDetect=No,bRefine=Yes,结束;否则,转步骤(2);
(2).若当前Rt的旋转角θt超过预设的阈值θ_bound,则bReDetect=Yes,bRefine=Yes,结束;否则,转步骤(3);
(3).若可靠三维点的数目Kr(t)(即{b Reliablek},k=1,…,K(t)中取值为Yes的点数)小于预设的阈值K_bound,则bReDetect=Yes,bRefine=Yes;否则,转步骤(4);
(4).bReDetect=No;如果t-t0是预设的常数Inc_refine的倍数,则bRefine=Yes,即求精是每隔Inc_refine就做一次;否则bRefine=No;
(5).令t=t+1,进入下一时刻的处理;
4.根据权利要求3所述的融合多视角、多线索二维信息的人脸三维模型的建立方法,其特征在于:所述的姿态估计步骤中,bRefine为Yes表示在当前时刻作姿态求精,即得出更精确的姿态参数:
设选择在连续Num=t-tStart+1个时刻始终正确的三维对应来求精所有相关的姿态参数{RtStart+τ,TsStart+τ},τ=0,…,t-tStart-1,tStart为求精运算的起始时刻,现取t时刻之前的第二个设置bRefine为Yes的时刻,若tStart<t0,取其为t0;在一次求精运算中,先计算{RatStart+τTatStart+τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(t)},使所有图像中二维重投影的总误差f_obj达到最小值: f _ obj = &Sigma; m &Sigma; &tau; = 0 t - tStart &Sigma; pp = 1 Kr ( t ) [ ( a pp , m &tau; - x pp , m &tau; ) 2 + ( b pp , m &tau; - y pp , m &tau; ) 2 ] ;
其中RatStart+τ,TatStart+τ是从tStart时刻到tStart+τ时刻的刚体变换系数;{MtStart(kpp)},pp=1,…,Kr(t),是在这Num个时刻中都可靠的三维点数组,共Kr(t)个,pp为三维点的标号;m为L或R,表示摄像机; 是在m号摄像机、tStart+τ时刻图象中的二维检测或跟踪的结果,即 a pp , m &tau; b pp , m &tau; 1 = A m - 1 p m , tStart + &tau; ( k pp ) 1 ,Am为AL或AR是pp号三维点在tStart+τ时刻,投影到m摄像机上的结果,即,其中 R c , m = R 1 c , m T R 2 c , m T R 3 c , m T T c , m = T 1 c , m T 2 c , m T 3 c , m 是从L摄像机坐标系到m摄像机坐标系的刚体变换,即 R c , L = 1 0 0 0 1 0 0 0 1 , T c , L = 0 0 0 , R c , R = R c - 1 , T c , R = - R c - 1 T c , R ;另外, Ra tStart = 1 0 0 0 1 0 0 0 1 , Ta tStart = 0 0 0 ;
优化f_obj就能得到姿态参数的精确值;先用Levenberg-Marquardt算法求解{RatStart+τ,TatStart+τ,τ=1,…,t-tStart;MtStart(kpp),pp=1,…,Kr(t)};再用下式把{RatStart+τ,TatStart+τ},τ=1,…,t-tStart转换到{RtStart+τ,TtStart+τ},τ=0,…,t-tStart-1:
RtStart=RatStart+1,TtStart=TatStart+1τ=2,…,t-tStart
CNB02146278XA 2002-10-18 2002-10-18 融合多视角、多线索二维信息的人脸三维模型的建立方法 Expired - Fee Related CN100483462C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB02146278XA CN100483462C (zh) 2002-10-18 2002-10-18 融合多视角、多线索二维信息的人脸三维模型的建立方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB02146278XA CN100483462C (zh) 2002-10-18 2002-10-18 融合多视角、多线索二维信息的人脸三维模型的建立方法

Publications (2)

Publication Number Publication Date
CN1404016A true CN1404016A (zh) 2003-03-19
CN100483462C CN100483462C (zh) 2009-04-29

Family

ID=4751041

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB02146278XA Expired - Fee Related CN100483462C (zh) 2002-10-18 2002-10-18 融合多视角、多线索二维信息的人脸三维模型的建立方法

Country Status (1)

Country Link
CN (1) CN100483462C (zh)

Cited By (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100346745C (zh) * 2005-09-27 2007-11-07 四川大学 人颅面三维测量器及其测量方法
CN100375124C (zh) * 2003-12-17 2008-03-12 中国科学院自动化研究所 一种骨架化物体重建方法
CN100386778C (zh) * 2006-06-15 2008-05-07 西安交通大学 基于平均脸和衰老比例图的人脸图像年龄变换方法
CN100407798C (zh) * 2005-07-29 2008-07-30 北京大学 三维几何建模系统和方法
CN100416612C (zh) * 2006-09-14 2008-09-03 浙江大学 基于视频流的三维动态人脸表情建模方法
CN100416611C (zh) * 2006-09-14 2008-09-03 浙江大学 一种基于网格拓扑建模的三维人脸动画制作方法
CN100468465C (zh) * 2007-07-13 2009-03-11 中国科学技术大学 基于虚拟图像对应的立体视觉三维人脸建模方法
CN101271578B (zh) * 2008-04-10 2010-06-02 清华大学 一种平面视频转立体视频技术中的深度序列生成方法
CN101051515B (zh) * 2006-04-04 2010-06-09 索尼株式会社 图像处理设备及图像显示方法
CN101394479B (zh) * 2008-09-25 2010-06-16 上海交通大学 基于运动检测结合多通道融合的教师运动跟踪方法
CN101055646B (zh) * 2004-12-08 2010-06-23 索尼株式会社 用于处理图像的方法和装置
CN1684110B (zh) * 2004-04-15 2010-08-18 微软公司 混合的对象属性加关键帧模型
CN101901497A (zh) * 2009-05-29 2010-12-01 影像原动力数码有限公司 运动捕捉角色的逆运动学
CN101930626A (zh) * 2010-08-04 2010-12-29 北京大学 基于散点透视图像计算三维空间布局的方法与系统
CN101488224B (zh) * 2008-01-16 2011-01-19 中国科学院自动化研究所 基于相关性度量的特征点匹配方法
CN101383046B (zh) * 2008-10-17 2011-03-16 北京大学 一种基于图像的三维重建方法
CN101540045B (zh) * 2009-03-25 2011-07-27 湖南大学 基于同步正交匹配追踪的多源图像融合方法
CN1936960B (zh) * 2005-09-19 2011-09-14 西门子公司 从检查对象的三维图像数据组中产生二维重建图像的方法
CN101625768B (zh) * 2009-07-23 2011-11-09 东南大学 一种基于立体视觉的三维人脸重建方法
CN102262727A (zh) * 2011-06-24 2011-11-30 常州锐驰电子科技有限公司 客户采集终端人脸图像质量实时监控方法
CN102436668A (zh) * 2011-09-05 2012-05-02 上海大学 京剧脸谱自动化妆方法
CN102629382A (zh) * 2012-03-05 2012-08-08 河南理工大学 基于几何兼容性的特征点匹配方法
CN101578613B (zh) * 2005-08-26 2012-09-19 索尼株式会社 在运动捕捉中使用的标记
CN102999942A (zh) * 2012-12-13 2013-03-27 清华大学 三维人脸重建方法
CN103186233A (zh) * 2011-12-31 2013-07-03 上海飞来飞去新媒体展示设计有限公司 眼神定位全景互动控制方法
CN103765479A (zh) * 2011-08-09 2014-04-30 英特尔公司 基于图像的多视点3d脸部生成
CN103839223A (zh) * 2012-11-21 2014-06-04 华为技术有限公司 图像处理方法及装置
CN104008366A (zh) * 2014-04-17 2014-08-27 深圳市唯特视科技有限公司 一种3d生物智能识别方法及系统
CN101464132B (zh) * 2008-12-31 2014-09-10 北京中星微电子有限公司 位置确定方法及位置确定装置
CN104361362A (zh) * 2014-11-21 2015-02-18 江苏刻维科技信息有限公司 一种得出人脸部位轮廓定位模型的方法
CN104871213A (zh) * 2012-11-13 2015-08-26 谷歌公司 对于对象的全方位视图的视频编码
CN105138956A (zh) * 2015-07-22 2015-12-09 小米科技有限责任公司 人脸检测方法和装置
CN105678321A (zh) * 2015-12-31 2016-06-15 北京工业大学 一种基于融合模型的人体姿态估计方法
CN105809664A (zh) * 2014-12-31 2016-07-27 北京三星通信技术研究有限公司 生成三维图像的方法和装置
CN106372629A (zh) * 2016-11-08 2017-02-01 汉王科技股份有限公司 一种活体检测方法和装置
CN108509855A (zh) * 2018-03-06 2018-09-07 成都睿码科技有限责任公司 一种通过增强现实生成机器学习样本图片的系统及方法
CN109191507A (zh) * 2018-08-24 2019-01-11 北京字节跳动网络技术有限公司 三维人脸图像重建方法、装置和计算机可读存储介质
CN109448090A (zh) * 2018-11-01 2019-03-08 北京旷视科技有限公司 图像处理方法、装置、电子设备及存储介质
CN109872343A (zh) * 2019-02-01 2019-06-11 视辰信息科技(上海)有限公司 弱纹理物体姿态跟踪方法、系统及装置
CN110070611A (zh) * 2019-04-22 2019-07-30 清华大学 一种基于深度图像融合的人脸三维重建方法和装置
CN110837797A (zh) * 2019-11-05 2020-02-25 中国医学科学院北京协和医院 基于人脸表面三维网格的鼻部调节方法及其应用
CN113518911A (zh) * 2019-01-14 2021-10-19 汉莎技术股份公司 用于内孔窥视仪检查的方法和设备
CN115278080A (zh) * 2022-07-28 2022-11-01 北京五八信息技术有限公司 一种蒙版生成方法、设备及存储介质
US20220349830A1 (en) * 2019-06-20 2022-11-03 De Beers Uk Ltd Gemstone planning
US20230091546A1 (en) * 2020-02-17 2023-03-23 Mitsubishi Electric Corporation Head posture estimation device and head posture estimation method
CN116778043A (zh) * 2023-06-19 2023-09-19 广州怪力视效网络科技有限公司 一种表情捕捉及动画自动生成系统和方法
WO2023173650A1 (zh) * 2022-03-18 2023-09-21 上海涛影医疗科技有限公司 一种多视角曝光x光影像定位方法和系统

Cited By (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100375124C (zh) * 2003-12-17 2008-03-12 中国科学院自动化研究所 一种骨架化物体重建方法
CN1684110B (zh) * 2004-04-15 2010-08-18 微软公司 混合的对象属性加关键帧模型
CN101055646B (zh) * 2004-12-08 2010-06-23 索尼株式会社 用于处理图像的方法和装置
CN100407798C (zh) * 2005-07-29 2008-07-30 北京大学 三维几何建模系统和方法
CN101578613B (zh) * 2005-08-26 2012-09-19 索尼株式会社 在运动捕捉中使用的标记
CN1936960B (zh) * 2005-09-19 2011-09-14 西门子公司 从检查对象的三维图像数据组中产生二维重建图像的方法
CN100346745C (zh) * 2005-09-27 2007-11-07 四川大学 人颅面三维测量器及其测量方法
CN101051515B (zh) * 2006-04-04 2010-06-09 索尼株式会社 图像处理设备及图像显示方法
CN100386778C (zh) * 2006-06-15 2008-05-07 西安交通大学 基于平均脸和衰老比例图的人脸图像年龄变换方法
CN100416611C (zh) * 2006-09-14 2008-09-03 浙江大学 一种基于网格拓扑建模的三维人脸动画制作方法
CN100416612C (zh) * 2006-09-14 2008-09-03 浙江大学 基于视频流的三维动态人脸表情建模方法
CN100468465C (zh) * 2007-07-13 2009-03-11 中国科学技术大学 基于虚拟图像对应的立体视觉三维人脸建模方法
CN101488224B (zh) * 2008-01-16 2011-01-19 中国科学院自动化研究所 基于相关性度量的特征点匹配方法
CN101271578B (zh) * 2008-04-10 2010-06-02 清华大学 一种平面视频转立体视频技术中的深度序列生成方法
CN101394479B (zh) * 2008-09-25 2010-06-16 上海交通大学 基于运动检测结合多通道融合的教师运动跟踪方法
CN101383046B (zh) * 2008-10-17 2011-03-16 北京大学 一种基于图像的三维重建方法
CN101464132B (zh) * 2008-12-31 2014-09-10 北京中星微电子有限公司 位置确定方法及位置确定装置
CN101540045B (zh) * 2009-03-25 2011-07-27 湖南大学 基于同步正交匹配追踪的多源图像融合方法
CN101901497A (zh) * 2009-05-29 2010-12-01 影像原动力数码有限公司 运动捕捉角色的逆运动学
CN101625768B (zh) * 2009-07-23 2011-11-09 东南大学 一种基于立体视觉的三维人脸重建方法
CN101930626A (zh) * 2010-08-04 2010-12-29 北京大学 基于散点透视图像计算三维空间布局的方法与系统
CN102262727A (zh) * 2011-06-24 2011-11-30 常州锐驰电子科技有限公司 客户采集终端人脸图像质量实时监控方法
CN103765479A (zh) * 2011-08-09 2014-04-30 英特尔公司 基于图像的多视点3d脸部生成
CN102436668A (zh) * 2011-09-05 2012-05-02 上海大学 京剧脸谱自动化妆方法
CN103186233B (zh) * 2011-12-31 2016-03-09 上海飞来飞去新媒体展示设计有限公司 眼神定位全景互动控制方法
CN103186233A (zh) * 2011-12-31 2013-07-03 上海飞来飞去新媒体展示设计有限公司 眼神定位全景互动控制方法
CN102629382A (zh) * 2012-03-05 2012-08-08 河南理工大学 基于几何兼容性的特征点匹配方法
CN102629382B (zh) * 2012-03-05 2014-07-16 河南理工大学 基于几何兼容性的特征点匹配方法
CN104871213B (zh) * 2012-11-13 2018-05-11 谷歌有限责任公司 对于对象的全方位视图的视频编码
US9984495B2 (en) 2012-11-13 2018-05-29 Google Llc Using video to encode assets for swivel/360-degree spinners
CN104871213A (zh) * 2012-11-13 2015-08-26 谷歌公司 对于对象的全方位视图的视频编码
CN103839223A (zh) * 2012-11-21 2014-06-04 华为技术有限公司 图像处理方法及装置
CN103839223B (zh) * 2012-11-21 2017-11-24 华为技术有限公司 图像处理方法及装置
CN102999942B (zh) * 2012-12-13 2015-07-15 清华大学 三维人脸重建方法
CN102999942A (zh) * 2012-12-13 2013-03-27 清华大学 三维人脸重建方法
CN104008366A (zh) * 2014-04-17 2014-08-27 深圳市唯特视科技有限公司 一种3d生物智能识别方法及系统
CN104361362A (zh) * 2014-11-21 2015-02-18 江苏刻维科技信息有限公司 一种得出人脸部位轮廓定位模型的方法
CN105809664A (zh) * 2014-12-31 2016-07-27 北京三星通信技术研究有限公司 生成三维图像的方法和装置
CN105138956A (zh) * 2015-07-22 2015-12-09 小米科技有限责任公司 人脸检测方法和装置
CN105138956B (zh) * 2015-07-22 2019-10-15 小米科技有限责任公司 人脸检测方法和装置
CN105678321B (zh) * 2015-12-31 2019-06-21 北京工业大学 一种基于融合模型的人体姿态估计方法
CN105678321A (zh) * 2015-12-31 2016-06-15 北京工业大学 一种基于融合模型的人体姿态估计方法
CN106372629A (zh) * 2016-11-08 2017-02-01 汉王科技股份有限公司 一种活体检测方法和装置
CN108509855A (zh) * 2018-03-06 2018-09-07 成都睿码科技有限责任公司 一种通过增强现实生成机器学习样本图片的系统及方法
CN108509855B (zh) * 2018-03-06 2021-11-23 成都睿码科技有限责任公司 一种通过增强现实生成机器学习样本图片的系统及方法
CN109191507A (zh) * 2018-08-24 2019-01-11 北京字节跳动网络技术有限公司 三维人脸图像重建方法、装置和计算机可读存储介质
US11170554B2 (en) 2018-08-24 2021-11-09 Beijing Bytedance Network Technology Co., Ltd. Three-dimensional face image reconstruction method and device, and computer readable storage medium
CN109448090B (zh) * 2018-11-01 2023-06-16 北京旷视科技有限公司 图像处理方法、装置、电子设备及存储介质
CN109448090A (zh) * 2018-11-01 2019-03-08 北京旷视科技有限公司 图像处理方法、装置、电子设备及存储介质
CN113518911B (zh) * 2019-01-14 2024-05-03 汉莎技术股份公司 用于内孔窥视仪检查的方法和设备
CN113518911A (zh) * 2019-01-14 2021-10-19 汉莎技术股份公司 用于内孔窥视仪检查的方法和设备
CN109872343A (zh) * 2019-02-01 2019-06-11 视辰信息科技(上海)有限公司 弱纹理物体姿态跟踪方法、系统及装置
CN110070611B (zh) * 2019-04-22 2020-12-01 清华大学 一种基于深度图像融合的人脸三维重建方法和装置
CN110070611A (zh) * 2019-04-22 2019-07-30 清华大学 一种基于深度图像融合的人脸三维重建方法和装置
US12117403B2 (en) * 2019-06-20 2024-10-15 De Beers Uk Ltd Gemstone planning
US20220349830A1 (en) * 2019-06-20 2022-11-03 De Beers Uk Ltd Gemstone planning
CN110837797A (zh) * 2019-11-05 2020-02-25 中国医学科学院北京协和医院 基于人脸表面三维网格的鼻部调节方法及其应用
US20230091546A1 (en) * 2020-02-17 2023-03-23 Mitsubishi Electric Corporation Head posture estimation device and head posture estimation method
WO2023173650A1 (zh) * 2022-03-18 2023-09-21 上海涛影医疗科技有限公司 一种多视角曝光x光影像定位方法和系统
CN115278080A (zh) * 2022-07-28 2022-11-01 北京五八信息技术有限公司 一种蒙版生成方法、设备及存储介质
CN116778043A (zh) * 2023-06-19 2023-09-19 广州怪力视效网络科技有限公司 一种表情捕捉及动画自动生成系统和方法
CN116778043B (zh) * 2023-06-19 2024-02-09 广州怪力视效网络科技有限公司 一种表情捕捉及动画自动生成系统和方法

Also Published As

Publication number Publication date
CN100483462C (zh) 2009-04-29

Similar Documents

Publication Publication Date Title
CN1404016A (zh) 融合多视角、多线索二维信息的人脸三维模型的建立方法
CN100345165C (zh) 基于图像的超现实主义三维脸部建模的方法和设备
CN100338632C (zh) 标记放置信息估计方法和信息处理设备
CN1132123C (zh) 计算深度信息的方法和使用深度信息进行图象处理的方法
CN1296680C (zh) 测量装置和方法
CN1254769C (zh) 图像处理方法和装置
CN1846232A (zh) 使用加权信息的对象姿态估计和匹配系统
CN1047680C (zh) 脸部图像数据处理装置
CN1659418A (zh) 摄像机校正装置
CN1445513A (zh) 传感器校准装置及方法、程序、存储介质、信息处理方法及装置
CN1238819C (zh) 三维字符生成设备及三维图形数据生成设备
CN1747559A (zh) 三维几何建模系统和方法
CN1257070C (zh) 车辆周围状况显示装置
CN1847789A (zh) 测量位置及姿态的方法和装置
CN1510656A (zh) 显示装置、显示方法和显示程序
CN1643939A (zh) 立体图像处理方法及装置
CN1855150A (zh) 图像处理设备、图像处理方法、以及程序和记录介质
CN101055646A (zh) 用于处理图像的方法、装置和计算机程序
CN1940965A (zh) 信息处理设备及其控制方法
CN1684491A (zh) 图像处理装置、图像投影装置、图像处理方法和程序
CN1577051A (zh) 图像处理系统、投影机以及图像处理方法
CN1630886A (zh) 三维图象的比较程序、比较方法及比较装置
CN1906631A (zh) 化妆模拟程序、化妆模拟装置及化妆模拟方法
CN1171580A (zh) 计算机图象处理、动画数据收发、生成方法以及记录媒体
CN1151465C (zh) 利用候选表进行分类的模式识别设备及其方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090429

Termination date: 20101018