一种嵌入三维动画特效参数的数字水印算法

2020-03-11 13:16李亚琴方立刚廖黎莉杨元峰
计算机应用与软件 2020年2期
关键词:数字水印三维动画矩阵

李亚琴 方立刚 廖黎莉 杨元峰

1(江苏省现代企业信息化应用支撑软件工程技术研发中心 江苏 苏州 215104)2(苏州大学 江苏 苏州 215104)

0 引 言

数字水印技术是应用于多媒体作品版权保护和信息完整性验证的有效措施,研究者已提出多种适用于文本、音频、图像、视频的成熟水印算法,近几年,出现了适用于三维模型、动画、二维码、HTML等新媒体形式的数字水印算法[1]。

基于矩阵分解理论,包括SVD分解、QR分解、Schur分解、Contourlet变换等,也广泛应用于数字水印算法中。文献[2]提出一种基于Hessenberg分解和Contourlet变换的彩色图像水印算法,该算法对行列随机删除、图像亮度对比度调整等攻击具有很好的鲁棒性。文献[3]提出了一种基于离散小波变换和矩阵的奇异值分解,应用于彩色QR码的数字水印算法。文献[4]提出了一种基于Slant变换和SVD的稳健性数字水印算法,该算法不仅提升了运行速度,而且增强了水印的安全性和稳健性。文献[5]提出了一种基于Contourlet和SVD的应用于医学图像认证的双水印算法。

数字水印技术应用于三维动画以保护三维动画版权已有所研究,文献[6]提出了一种三维动画变换域数字水印算法,设计一种基于三维DWT-DCT变换的三维动画水印算法。文献[7]中提出了一种针对三维动画中关键帧数据的数字水印算法,将水印信息嵌入到三维动画的关键帧数据中。文献[8]中提出了一种针对三维动画材质参数的数字水印算法,将水印信息嵌入到三维动画的材质数据中。Lee等[9]充分利用3D动画的插值节点和几何节点,实现了两套独立又同步的水印方案,使这种方案适用于脆弱水印和鲁棒水印的场景。Tsai等[10]提出一种对3D网格模型某些节点的水印方案,这种水印方案有很好的鲁棒性。

基于以上分析,还未有专门针对三维动画特效参数的数字水印算法。本文提出一种利用矩阵分解理论,适用于三维动画的数字水印算法。算法将三维动画中的特效参数作为嵌入载体,将特效参数形成一个矩阵,利用矩阵分解后的结果,将水印信息嵌入,从而形成含有水印的三维动画短片。

1 数字水印嵌入算法

第一步收集一部三维动画短片中的特效参数,组成一个矩阵,记为X。

“动画”是三维动画影片制作中极其重要的一个环节,出色的动画制作是一部三维动画影片成功的关键要素之一。“特效”则是三维动画影片最为复杂的表现形式,通过毛发、衣服、爆炸、粉尘、海水、火焰等的制作,可以使影片的画面呈现出极其强烈的视觉冲击效果[11]。

三维动画中的特效参数,主要包括粒子特效参数、刚体参数、柔体参数、流体参数、海洋参数、布料参数、毛发参数等。主要集中在FX模块的nParticle、流体、nCloth、nHair等菜单里的菜单选项中。

第二步对特效参数矩阵X进行满秩分解,得到列满秩矩阵B和行满秩矩阵C。

第三步对列满秩矩阵B进行奇异值SVD分解,得到酉矩阵P和Q,对角矩阵S。

第四步采集待嵌入的水印信息,形成方阵,记为W。

第五步对水印矩阵W进行三角分解,得到下三角矩阵L和上三角矩阵U。

定理3若方阵A=LU,则方阵A可以做三角分解,得到的L为下三角矩阵,U为上三角矩阵。

第六步将下三角矩阵L嵌入到酉矩阵P中,之所以选择嵌入水印矩阵W的一部分,一个重要考虑就是此方法可以嵌入秘密信息,如果被截获,避免暴露全部秘密信息。

(1) 计算矩阵L中有效元素的个数,记为COUNT=sizeof(L);

(2) 在矩阵P中,将所有元素的值由大到小排序,选取前COUNT个元素作为具体嵌入对象;

(3) 依次将L中的元素嵌入到P中较大的元素中,即L中的第一个元素嵌入到P中最大的元素中,L中的第二个元素嵌入到P中次大的元素中,以此类推。

嵌入时,通过修改最不重要位的方法来嵌入,因为最不重要位被修改,对元素的值造成的影响最小。以嵌入的第一个元素为例,说明具体嵌入的方法。

L中的第一个元素记为L1,计算L1各位上的数字之和,记为SUML1,计算SUML1的最大质因数,记为i。

#include

#include

// 子函数用于判断x是否是素数

bool isPrime(int x) {

int m = (int)sqrt(x+0.5);

for(int i=2; i<=m; i++) {

if(x%i==0) return false;

}

return true;

}

int main() {

int n;

while(scanf("%d", &n)==1&&n!=0) {

//n如果本身是素数,就是它本身

for(int i=n; i>1; i--) {

if(n%i == 0 && isPrime(i))

{//判断n是否能被i整除,并且i是否为素数

printf("%d ", i);

break;

}

}

}

return 0;

}

矩阵P中最大的元素记为MAXP,MAXP中的最不重要位记为LSBMAXP。

其他元素的嵌入与替换过程相同,在此不再赘述,完成全部嵌入后,被修改的P中含有水印信息,记为P*。

第七步利用矩阵P*、矩阵Q、矩阵S重构得到矩阵,记为B*。

第八步利用矩阵B*和矩阵C重构得到矩阵,记为X*。X*是含有水印信息的特效参数矩阵。

第九步利用X*里的元素值,修改动画中相应位置上的特效参数,即用X*中的元素值来重新设置特效,从而得到含有水印信息的三维动画。

至此,水印的嵌入过程结束。

2 数字水印提取算法

当一部三维动画短片的版权产生争议或要从三维动画短片中获得携带的秘密信息时,可以从三维动画短片当中提取水印。

提取算法基本是嵌入算法的逆过程。目前的水印算法中,提取时分为盲提取和非盲提取两种途径。盲提取即不需要原始水印和相关信息直接从检测载体中提取水印,非盲提取则需要原始水印或嵌入密钥等信息。本文的提取算法不需要原始水印的信息辅助,属于盲提取。

第一步根据嵌入时的选择,收集一部三维动画短片中的特效参数,组成一个矩阵,记为XW。

特效参数主要指创建粒子系统、动力学效果时所设置的参数和数值。

粒子系统主要用来表现密集对象群的动画效果,完成诸如云、烟雾、树叶、爆炸等其他动画设置方法难以实现的动画效果。参数主要有水滴大小、速度、变化、计数、开始时间、结束时间、粒子寿命、发射器宽度和长度,还包括粒子数量、散度、增长耗时、衰减耗时、自旋时间、气泡运动、混乱度等。

动力学参数主要指创建刚性物体、柔软物体、布料、头发等效果时所设置的参数和数值。动力学参数主要有每束头发数、被动填充、半径、不透明度、钳制值,还包括图章间距、图章深度、最小颜色、最大颜色、范围、预览平面大小、燃料速率等。

第二步对特效参数矩阵XW进行满秩分解,得到列满秩矩阵BW和行满秩矩阵CW。

第三步对列满秩矩阵BW进行奇异值SVD分解,得到酉矩阵PW和QW,对角矩阵SW。

第四步原始嵌入的水印信息作为比较对象,形成方阵,记为W。

第五步对水印矩阵W进行三角分解,得到下三角矩阵L和上三角矩阵U。

第六步从酉矩阵PW中提取水印。

(1) 计算矩阵L中有效元素的个数,记为COUNT=sizeof(L);

(2) 在矩阵PW中,将所有元素的值由大到小排序,选取前COUNT个元素作为提取位置;

由大到小的排序算法如下:

for(i=0;i

/* sizeof(PW)表示PW中元素的个数

{

k=i;

for(j=i+1;j< sizeof(PW);j++)

if(array[j]

k=j;

if(i!=k)

{

temp=array[i];

array[i]=array[k];

array[k]=temp;

}

}

(3) 依次从PW中较大的COUNT个元素中提取水印,即PW中最大的元素中提取的是第一个水印元素,PW中次大的元素中提取的是第二个水印元素,以此类推。

提取时,从最不重要位的位置上来提取,最不重要位上提取出来的是最大质因数。依次提取所有质因数,将COUNT个质因数形成矩阵,记为M。

第七步在L中,依次计算各个元素各位上的数字之和,并求出每个元素和的最大质因数,将所有质因数形成矩阵,记为M*。

第八步比较提取出的水印矩阵M和原始水印矩阵M*,利用相关系数等途径定量地衡量两个矩阵的相似性,以判断所提取出来的水印的可靠性及算法的性能。

至此,水印的提取过程结束。

3 仿真实验

为了验证算法的可行性和性能,选取一些内容中包含特效的三维动画短片进行实验。本文实验全部在maya2018、3ds max2012、MATLAB 2011b中完成。

下面选择一时长96分23秒的三维动画短片动画进行具体说明。动画中设置的灰尘、沙子、烟雾、气泡和漫天黄叶效果是利用粒子特效制作完成的。动画中设置的气垫、高空绳索、衣物、旗帜、水塘等效果是利用动力学特效制作完成的。提取动画中的特效参数组成128×128的矩阵。动画短片长度不同,特效画面数量不同,则源文件中设置的特效参数的数量也不同,故嵌入水印的载体大小也会有所区别。

图1是仿真实验的MATLAB GUI界面,然后在callback中编写按钮及控件的代码完成实验。

3.1 算法复杂度

本文研究主要集中在矩阵的分解和最不重要位替换。对矩阵进行分解和重构操作,执行比较简单,速度较快。所以,本文算法的复杂度较低,执行速度较快。

3.2 算法隐蔽性

本文算法选择的嵌入载体是特效参数,将水印信息嵌入到动画源文件的特效参数中,加上嵌入算法中选择的是把特效参数矩阵满秩分解后的矩阵作为具体嵌入位置,对动画效果影响极小,所以动画被输出成视频格式后,用户观看时,肉眼无法察觉水印的存在,故算法具有很好的隐蔽性。本文算法的峰值信噪比PSNR是42.951 8 db,较高的PSNR值较好地保证了三维动画的视觉效果和水印的不可察觉性。

3.3 算法鲁棒性

攻击一:修改特效参数。算法中将特效参数作为嵌入载体,攻击时首先选择修改部分特效参数来验证算法的鲁棒性。图2所示是修改特效参数后,提取水印与原始水印的相关系数情况。

图2 修改特效参数后,提取水印与 原始水印的相关系数

攻击二:删除特效参数。删除特效参数,改变特效画面,会影响特效的观看效果,从而容易留下攻击的痕迹,所以,不能过度地删除场景中的特效参数。图3所示是删除部分特效参数后,提取水印与原始水印之间的相关系数。

图3 删除特效参数的数量,提取水印与 原始水印之间的相关系数

攻击三:修改文件格式。maya软件中制作的源文件格式为.mb,将其转换成.obj或.stl等格式,或者再导入3ds max中保存为.max格式(动力学参数需烘焙)。以上对源文件的格式转换,只是不同的格式适应不同的软件,并未改变场景内容,所以,不会影响场景中的特效参数。修改文件格式后,提取水印与原始水印之间的相关系数为1.000 0。

攻击四:二次水印。二次水印指在第一次嵌入水印信息的基础上,再次嵌入一个水印信息。本文实验,第一次嵌入一幅32×32的图像,如图4所示。第二次嵌入作者的18位二代身份证号码。二次水印会在一定程度上改变第一次水印的信息,从而降低提取水印与原始水印的相关系数。本文嵌入两次水印后,提取水印与原始水印的相关系数为0.895 7。

图4 水印图像

4 结 语

随着虚拟现实、增强现实等技术的快速发展,三维模型和三维动画的应用领域进一步扩大,研究针对三维动画特性的数字水印算法具有重要意义。本文提出一种数字水印算法,将三维动画中的特效参数作为嵌入载体,适用于3dsmax或者maya软件,能够有效快速地嵌入水印。算法可以推广到三维动画的材质参数、骨骼参数和权重参数等,无论将哪一类参数作为嵌入载体,都可高效地嵌入并提取水印,保护三维动画的版权,可复制性强。今后,将把变换域水印算法引入三维动画数字水印中,提出鲁棒性更强的算法,为中国知识产权保护作出一份贡献。

猜你喜欢
数字水印三维动画矩阵
艺术与技术相结合的三维动画教学研究
针对高职高专3dsMax三维动画教学实例类教材编写的研究
多项式理论在矩阵求逆中的应用
基于DCT算法的视频数字水印的研究与实现
数字水印技术及其在电力系统中的应用
一种基于三维小波变换的鲁棒视频水印方案
基于分块DWT和SVD的鲁棒性数字水印算法
浅谈中国三维动画的发展进程
矩阵
矩阵