0 引言
我们通常需要通过计算机技术对图像进行变形,使图像或图像中的特定目标对象动作、角度等发生变形,以达到预期效果。理想的图像变形方法是使变形后的图像无失真、扭曲或违反常理的现象<sup>[1]</sup>。
图像的变形主要分为两种:一种是对整幅图像的变形,另一种是对图像中的特定目标对象进行变形<sup>[2]</sup>。目前,使用较多的是对目标对象选取3种线性模型:节点、骨架和楔形,然后混合使用模型以对目标对象进行变形<sup>[3]</sup>。将上述模型混合后,需要计算其加权融合值,可以采用移动最小平方<sup>[4]</sup>、对偶四元数<sup>[5]</sup>等方法。但是,这些方法通常有运行缓慢、使用复杂、不支持任意处理或变形不平滑等缺点。
基于上述问题,本文针对二维图像提出了线性混合模型的目标对象变形方法,能够达到很好的变形效果。在线性混合模型权值计算中,对保留区域和非保留区域做了不同的处理。该算法能够产生很好的视觉效果,在变形过程中不会产生扭曲、重叠或畸变等违反自然规律的现象。
变形后的图形图像,替换到目标图像的指定位置并合成到图像中,在虚拟现实中实现不能完成的梦想。
1 待变形对象目标提取方法
1.1 图像变形种类
在图像处理中,图像的变形有两种:一种是整体图像的变形,另一种是图像中特定目标对象的变形。
1.1.1 整体图像变形
整体图像变形,是指将一幅图像平滑地变形到另一幅图形中,是一种基于像素的变形方法,通常采用尺度变换、移动或旋转的方法来完成。变形前后的图像具有一一映射关系,可以用一个仿射变换矩阵<sup>[6]</sup>表示。图1就是一种简单的图像变形,只是对原始图像做了旋转操作。
图1 整体图像变形
整体图像变形通常可用于图像拼接、异物查找等场合。首先用Harris<sup>[7]</sup>、SIFT<sup>[8]</sup>等算子求取图像中的特征向量,然后将两幅图像中的特征向量进行配准,用RANSAC算法求取仿射变换矩阵,将其中一幅图像进行变形后即可做图像拼接或差分等处理。
1.1.2 目标对象变形
此变形方法是在提取目标对象后对其进行变形,而背景图像保持不变。之所以需要选取目标对象是由于指定的虚拟场景已经存在,只要替换虚拟场景中指定的图形图像,该过程通过少量的图形图像标注,就可以完成整个场景的虚拟变换。
对目标对象的提取采用了基于Hu七阶不变矩的快速定位方法,用分水岭算法进行快速图形图像的分割与提取。在目标对象提取后,使用控制节点对二维目标对象进行变形。这里采用混合仿射转换来定义目标图像的平滑变形。
1.2 目标对象提取
目标对象提取是在待处理图像中定位出目标对象,其主要步骤如下:
(1) 选取一张目标对象图像作为模板图,若为彩色图像则先将其转换为灰度图像,然后求取七阶不变矩。
七阶不变矩属于低阶矩阵,其(p+q)阶矩为:
mpq=∫+∞-∞∫+∞-∞xpyqf(x,y)dxdy(1)
其中(x,y)为灰度图像的像素坐标,f(x,y)为此处的灰度值。中心矩为:
μpq=∫+∞-∞∫+∞-∞(x-x)p(y-y)qf(x,y)dxdy(2)
其中x=m10m00,y=m01m00。f(x,y)的归一化矩阵为:
ηpq = μpq μγ00 ,γ=p+q2+1,p,q=1,2,3...(3)
p+q≤3,得到模板图的七阶不变矩为:
φ<sub>1</sub>=η20+η02(4)
2 = (η20 - η02 )2 + 4η211 (5)
φ<sub>3</sub>=(η30-3η12)2+(3η21-η03)2(6)
φ<sub>4</sub>=(η30+η12)2+(η21+η03)2(7)
φ<sub>5</sub>=(η30-3η12)(η30+η12)[(η30+η12)2-3(η21+η03)2]+
(3η21-η03)(η21+η03)[3(η30+η12)2-(η21+η03)2](8)
φ<sub>6</sub>=(η20-η02)(η30+η02)2-(η21+η03)2+
4η11(η30-η12)(η21+η03) (9)
φ<sub>7</sub>=(3η21-3η03)(η30+η12)[(η30+η12)2-3(η21+η03)2]-
(η30-3η12)(η21+η03)[3(η30+η12)2-(η21+η02)2](10)
因而,求得模板图的七阶不变矩为F<sub>1</sub>=[φ<sub>1</sub>,φ<sub>2</sub>,φ<sub>3</sub>,φ<sub>4</sub>,φ<sub>5</sub>,φ<sub>6</sub>,φ<sub>7</sub>]。
(1)选取一定大小的窗口,遍历待处理图像,并求取待处理图像的七阶不变矩F<sub>2</sub>=[Φ<sub>1</sub>,Φ<sub>2</sub>,Φ<sub>3</sub>,Φ<sub>4</sub>,Φ<sub>5</sub>,Φ<sub>6</sub>,Φ<sub>7</sub>]。为便于分析,将不变矩F<sub>1</sub>,F<sub>2</sub>进行变换:
Φi=log10Φi
φi=log10φi i=1,2,...,7(11)
定义归一化函数,如式(12),求取两矩阵的相似性度量s,如式(13)。
l(x)=x,x<1
1/x,x≥1 (12)
s=1-∑7i=1l(Φi/φi)/7(13)
通常,s值越接近于0,说明两图像的相似度越高,即匹配精度越高,从而实现目标对象的定位。
(
2)若相似性度量小于某一特定阈值,遍历结束。否则回到步骤(2)。
(3)若遍历结束后仍未定出对象,则改变窗口大小(通常窗口大小为模板图像的0.8~1.2倍),回到步骤(2),继续遍历。
根据实验,我们选取s的阈值为0.005。若相似度小于此值,则表明定位成功。
2 线性混合模型
2.1 三种常见的线性模型
(1)节点。节点是一种基本的线性模型,其操作通常是局部平移、旋转或缩放,并对该对象附近的区域进行光滑传播。基于该算法的变形函数通常采用离散特征点插值方法,通过对控制节点的位置移动来完成一一映射。节点对图像的变形有两个步骤:①将图像在横向和纵向两个方向上做变形,同时建立映射关系;②通过映射关系做插值处理,以完成目标对象的变形。
目前基于节点的图像变形方法通常采用ARAP(As-Rigid-As-
Possible)保刚性算法<sup>[9]</sup>:首先在目标对象上建立三角形网格结构,然后最小化结构中所有三角形的失真变形,并建立线性方程组,以获得网格中所有顶点变形后的位置坐标。其操作有快速、直观、简单的优点,但它对某些拓扑结构的变形并不平滑。
(2)骨架。骨架主要应用于一些方向比较僵硬且不需要过多变形的部位。若两个节点之间的区域过于柔弱,骨架则会将其转换成一个僵硬的肢体。其处理步骤是:①得到三角形网格,为目标对象配置骨架;②运用正向运动学原理编辑骨架,传递到目标图像上,实现对图像的变形。
骨架配置对于目标对象的变形至关重要。在二维图像中,基于骨架的变形通常采用线段的MLS算法<sup>[4]</sup>以求取能量函数。基于骨架的目标图像变形可使节点之间进行任意的拉伸,动作较为夸张。虽然基于骨架的变形操作容易,变形灵活、平滑,但其变形时没有一个度且会有相互干扰的情况,易导致失真现象产生。
(3) 楔形。节点和骨架通常用于处理二维图像,而楔形主要用于处理三维图像。基于楔形的线性模型会影响目标对象,产生膨胀或腐蚀。
2.2 基于线性模型的图像变形
本文基于节点加权线型模型,通过加权融合后完成二维目标对象的任意变形。其关键技术是求取线性变换加权值,同时在求取权值的过程中将区域分成保留和非保留两个区域<sup>[10]</sup>。目标图像变形流程如图2所示。
图2 目标图像变形流程
2.2.1 连续混合模型权值计算
假设ΩR2为二维图像中给定形状的容量域。Hj为控制句柄,其范围为HjΩ,j=1,...,m。Hj可以是单个的节点、一个区域或是一个骨架。若为骨架,Hj需要包含骨架上所有的节点,每一个Hj句柄对应一个仿射变换矩阵Tj。目标对象中所有节点p的变换均可通过上述加权联合后变换成p',其中p为原目标对象中的点,p'为变形后图像中的点,wj是与Hj相对应的一个权值。
p'=∑mj=1wj(p)Tjp(14)
为使图像变形有平滑、形状感知等特性,本文将权值wj定义为平滑函数最小值,对wj用Laplacian能量函数进行限制,公式如下:
argmin∑mj=112∫ΩΔwj2dV(15)
wj Hk = δjk (16)
其中δjk是Kronecker的delta取值。为了计算方便,对wj做归一化处理,为方便变形,只考虑权值的非负值。
∑mj=1wj(p)=1,p∈Ω
0≤wj(p)≤1,j=1,...,m (17)
从公式(15)-(17)中可以看出,基于该线性混合权值的变形具有以下几种特性:
(1)非负性。由于在图像变形中,负的权值会导致形状区域朝着相反的方向旋转,可能会出现两个点映射到一个点的情况,操作极为不便,所以本文的权值采用非负值。
(2)无局部极大值。 由公式(16)可以看出,wj只在Hj处获得一个全局极大值,不会在其它地方获得局部极大值,这一特性保证了在图像变形中,离操作句柄越近的地方变换越为强烈,远离操作句柄的地方,变化尺度会衰减,这保证了目标对象变形中不会出现意想不到的情况。
(3)平滑性。平滑性在图像变形中尤为重要,若图像缺少平滑会产生失真现象。骨架由节点连接,权值wj在节点上会有不连续的值,wj在Hj处值为1,而在相邻的骨架上值为0。节点通常被其所连接的骨架转向同一个地点(p'),因此不会导致平滑问题。
通常在变形中,需要保留某些部位(如人的眼睛、鼻子等部位),使其不变形,这里称之为形状保留区域,需添加最小化二乘项<sup>[9]</sup>:
argmin∑mj=112∫Πρwj2dV(18)
其中ρ为遮蔽物,Π为需要保留的区域。
2.2.2 离散混合模型权值计算
在实际图像变形中,只用到了有限的线性元素,所以需要将公式(15)做离散化处理。假设对象s是一个给定的二维多线段网格,其骨架上的采样顶点 v=v<sub>1</sub>,v<sub>2</sub>,...,vn,网格作用域为Ω。当顶点v包含所有离散Hj时,结果是一个三角网格M。假设权值wj表示如下:
wj=(w<sub>1</sub>,j,w<sub>2</sub>,j,...,wn,j)T(19)
将式(15)变化如下:
∑mj=112∫ΩΔwj2dV≈∑mj=112(M-1Lwj)TM(M-1Lwj)(20)
其中M是集总质量矩阵,L是余切Laplacian算子。
形状保留公式(18)转换如下:
∑mj=112∫Πρwj2dV≈∑mj=112wTj(GTRMG)wj(21)
其中G为线性FEM梯度算子<sup>[11]</sup>,R为一个对角线矩阵,M为元素质量矩阵。
3 实验结果及分析
实验所用计算机配置为Intel i3-2100 CPU,2GB RAM,在Microsoft Visual Studio 2010平台上做仿真实验以验证本文算法的有效性。
图3是待变形的一帧图像,图像像素尺寸为:1024×788。图4为需要变形的目标对象模板,模板图像像素尺寸为:233×566。用基于Hu不变矩快速方法,在大场景帧图像中定位出待变形目标图像如图5所示,像素尺寸为210×509,为模板图像的0.9倍。
图3 待变形的帧图像
图4 目标对象模板 图5 目标对象定位结果 图6 多边形轮廓提取
将定位出来的目标对象通过分水岭算法,将背景擦出后提取待变形轮廓,如图6所示。从图中可以看出,该轮廓是一个多边形。然后用Shewchuk的二维网格生成方法<sup>[12]</sup>对多边形图像进行三角化,结果如图7所示。接着在图中手动输入变型节点,如图8所示。本文在目标对象的脸上输入节点,使其能够柔和变形。
对眼睛、鼻子等需要保留形状的部位和普通部位分别求取离散混合模型权值,根据加权值对目标对象进行变形,变形结果如图9所示。从图中可以看出,人的头抬了起来,背也直起来了,右腿有少许抬起,但对嘴巴、鼻子、眼睛等部位未做过于夸张的变形,变形后的对象比较自然、平滑。若不考虑保留区域而直接进行变形的话,图像会出现严重的失真现象,如图10所示。
图7 网格模型 图8 目标对象的节点与骨架 图9 变形结果图像
图10 未考虑保留区域的变形 图11 扭曲的变形结果 图12 自由形式变形
本文求取的离散混合权值还具有非负性、平滑性的优点,无局部极大值问题。图11是未考虑非负性问题,导致鼻子的变形方向与嘴巴相反;图12是基于自由形式
变形后的图像,可以看出存在很多不平滑的地方。
最后,将变形后的目标对象(见图9)放入到帧图像中,完成对目标对象的变形处理。
图13 变形后的帧图像
4 结语
本文首先在待变形的帧图像中用Hu不变矩自动定
位出目标对象,采用分水岭算法对目标进行分割与提取,并自动对提取对象的多边形轮廓进行三角化后,手动指定目标对象中的变形节点;然后将区域分为保留和非保留两部分,分别计算离散混合模型权值。实验结果表明,基于线性混合模型的目标对象变形采用加权算法,不会产生扭曲。
本文只是对二维图像做了无失真变形,未对楔形模型和三维图像变形作研究。对三维立体图像的无失真变形研究,可以实现在大片中任意替换主角,实现自己演大片的梦想。
参考文献:
[1] 吕福起.变形动画中的图形渐变技术研究[D]. 青岛:山东科技大学, 2011.
[2] 蔡志峰, 卢汉清, MARC JAEGER. 用弹性混合模型解决图像变形匹配问题[J]. 中国图像图形学报, 2003, 8(7):753-758.
[3] MAGNENAT-THALMANN N,LAPERRIERE R,THALMANN D.Joint-dependent local deformations for hand animation and object grasping[C].In Proceeding on Graphics Interface, 1988:26-33.