姚晓璐,张国有,王江帆,崔 健
(太原科技大学计算机科学与技术学院,山西 太原 030032)
随着3D打印技术的广泛应用,三维模型[1]被应用于多个领域,但是三维模型的数据信息内容容易被复制篡改,版权得不到有效保护。随着科学技术的发展,网页浏览器的出现使得国际互联网变得对用户友好起来,很明显,人们愿意在网上下载图片、视频、三维模型等。网络的传播使得三维模型的数据更加日益被复制传播,内容的所有者也在急切地寻找能够有效保护版权的材料。所以,三维模型的信息保护日益严峻。数字水印和加密技术作为信息安全的重要研究方向,是为实现版权保护和水印系统安全性[2]的重要手段,所以受到许多研究人员的重视。目前应用在图像上的水印算法较为成熟,很多学者也在致力于从图像水印算法中寻求合适的水印算法应用在三维模型上。
根据数字水印的可见性,三维模型数字水印算法分为2大类:1)非盲水印方案,在检测过程中需要原始数据和原始水印。最近安新辰等人[3]提出了一种边界自适应的可见水印算法,模型打印出来水印信息无法保留。2)盲水印方案。Kim等人[4]提出的根据模型表面粗糙度自适应地选择水印嵌入强度,利用人类视觉的掩蔽特性来增强算法的鲁棒性;有的水印算法的鲁棒性很高,但是水印系统安全性得不到保障。
为了使水印系统的安全性得到保障,研究者利用混沌系统的随机性和对初始条件的敏感性这2大特性与数字水印结合。文献[5]利用混沌和小波变换的方式来嵌入水印,使得算法的鲁棒性和安全性得到很大提高;文献[6]提出特征点混沌算法,利用Tent混沌序列对图像置乱,提供相关性函数来进行水印检测,使得算法的安全性和鲁棒性较好;文献[7]提出了混沌加密和图像水印相结合的二次加密系统,具有较强的伪装性;文献[8]利用超混沌和Slant变换提出了一种新的鲁棒水印算法,该算法具有很好的鲁棒性,对数字产品的版权保护提供了新的实用价值。因此,研究一种加密的鲁棒盲水印算法是必要的。
基于以上分析,本文针对三维模型水印系统安全性提出一种基于Logistic混沌加密[9]简化分层的盲水印算法,首先利用TTF字符库[10]生成“科大3D”字样的水印图像信息,对二值水印图像进行混沌置乱,把水印信息加密保护,然后利用网格简化算法对三维网格模型进行顶点分层[11]表示,对低层内的所有顶点建立不变空间[12],水印信息被嵌入到修改后的中层内顶点的二环邻域,高层内的顶点抵抗网格简化、平滑、噪声等强攻击。所以该算法较好地解决了不可见性和鲁棒性之间的矛盾,并且水印的提取无需原始图像,实现了盲水印的提取。
点阵字体[13]是把每一个字符都分成若干个点,然后用每个点的虚实来表示字符的轮廓。其优点是数据量较小,绘制点数较少,显示速度快,对三维网格模型的拓扑结构改变很少,作为水印信息对后续的模型影响较小。
首先要获取水印信息内容为“0”和“1”的二维数组,利用TTF字符库中WindowsAPI函数GetGlyphOutline()来生成TrueType字体的字符,包括任何形式的字符,比如汉字、英文、字母的点阵字符,也可以将不同字符的点阵数组进行结合生成更加丰富的内容,然后将数组转换为所需的二值水印图像。如图1所示,将“科大3D”字符转换为二值图像的水印图像。GetGlyphOutline()函数会将“科大3D”字解析为字轮廓的各个顶点的坐标信息及像素信息。黑色部分是点阵字体为1的区域,白色部分为点阵字体为0的区域。
图1 字符点阵和二值水印图像
高精度的三维网格模型的计算成本相对较高,所以对三维网格模型的简化非常有必要。这里主要利用二次误差作为度量边的边收缩算法[14]进行网格简化,最大程度地保留特征点和特征面片,该算法快速有效。其关键思想是依次选取收缩后新顶点误差最小的边进行迭代收缩逐步简化模型。
定义1假设代价收缩的变量为Δ,先给网格的每个顶点vi=[xi,yi,zi,1]T分配一个误差矩阵M,那顶点vi的误差为:
(1)
(v1,v2)是收缩边的2个顶点,vd是边收缩后的顶点,vd的误差矩阵Md的表示是:Md=M1+M2。为了计算vd的最小值,让其一阶导数为0,如公式(2):
(2)
其中,v′是新的收缩顶点,选取代价误差最小的边进行迭代收缩直到满足要求。新顶点的坐标为:
(3)
边折叠的过程如图2所示。
图2 边折叠过程
三维网格模型通过网格简化算法被进行了分层表示,简化处理后的三维网格模型基本不会影响原始模型的整体视觉效果,特征点将会被保留下来。图3显示的是牛模型的分层表示的视觉效果。图3(a)表示的是特征顶点数目高于原始的85%,图3(b)表示的是精细的特征顶点数目在85%左右,图3(c)表示的是粗略的特征顶点被简化到5%。表1为模型不同层内的定点数。
(a) 高层 (b) 中层 (c) 低层图3 水牛模型多层表示
表1 模型不同层内的顶点数
2.2.1 水印置乱及Logistic混沌加密
混沌的最大特性就是对初始值非常敏感,即蝴蝶效应。通过Logistic混沌序列加密,设定混沌系数以及初值,使得原始水印图像达到混沌最佳的状态,即为Logistic混沌加密。
在密码学中,安全性由密钥[15]来提供,由特定密钥加密的信息只能由这种密钥来解密。在该算法中,只需要对密钥进行保密,就可以保证整个水印算法的安全性,用密钥就可以评判算法的性能,并且不可以破坏水印系统的安全性。Arnold置乱和Logistic混沌加密使得算法对系数、初值等密钥有着很强的敏感性,即只要有一个或者2个密钥不正确,都会使得算法解密失败。具体加密步骤如下:
Step1 采用上述32×32的有意义的二值图像作为水印信息,对二值水印图像进行Arnold[16]置乱处理(公式(1)),通过改变像素坐标而改变图像灰度级别,经过Arnold变换后的水印图像会变得混乱不堪[17]。本文方法和文献[14]的方法不同在于加密的对象不同,本文加密的二值水印图像,多了一步Arnold置乱;同时应用的对象不同,本文主要应用于三维模型当中。但是如果继续进行Arnold变换,一定会出现一幅与原图相同的图像,即Arnold变换具有周期性,经过计算该二值图像的周期为24。
Step2 参数μ和初值x0为密钥,根据Logistic映射(公式(4))产生的一串混沌二值序列xk(k=0,1,2,…,1023),选取μ=0.975,x0=0.75,选取的序列长度与水印大小相同,为32×32(1024)。
xn+1=μxn(1-xn), 0≤μ≤4,xn∈(0,1),n=1,2,3,…
(4)
Step3 对于生成的序列xk(k=0,1,2,…,1023),利用公式(5)进行二值化,得到二值化序列wk。
(5)
Step4 再将置乱后的水印图像与二值序列进行异或[18]或者重新排列即可得到加密后的二值水印图像,如图4所示。
二值水印图像 Arnold置乱 混沌加密图4 水印图像
2.2.2 建立新坐标系
Step1 计算模型的低层内的所有顶点的质心Vc(即仿射不变空间的原点O′),公式为:
(6)
其中,Nl是低层模型内的顶点数,顶点Vi=(xi,yi,zi),1
Step2 计算仿射空间坐标。按照公式(7)计算协方差矩阵Cov:
(7)
选择最大的3个特征值记为a1,a2,a3(a1 Step3 抵抗仿射变换攻击。通过正交变换将原网格模型从原坐标系Oxyz变换到不变空间O′mvn。公式为: (8) 2.2.3 水印嵌入区域 为了保证水印嵌入的视觉效果,选择中层顶点密度较大且凹凸幅度较大的区域,这些区域的特点是具有良好的视觉掩蔽效果,不容易变成简化恶意攻击的目标,水印嵌入的容量可以达到所需的要求。 Step1 计算二环邻域[19]面积,公式为: (9) 其中,Si是顶点Vi二环邻域的面积。Sc是顶点Vi的二环邻域中第c个网格的面积,Ni是二环邻域中三角网格的数量。 Step2 将这些顶点二环邻域三角网格的面积按升序排列。阈值为Se。当Si≤Se时,水印嵌入顶点坐标。水印容量决定Se的大小。 2.2.4 水印嵌入强度 计算模型表面的一环邻域和二环邻域的平均法向量来自适应调整水印嵌入强度,即曲率。 (10) (11) 2.2.5 水印嵌入 水印嵌入的流程图如图5所示。 图5 水印嵌入过程 Step1 按2.2.2节建立新坐标系。 Step2 寻找合适的水印嵌入区域。冗余嵌入可提高对抗剪切等攻击的鲁棒性,所以如果在中层区域内选择k个顶点,将每一位水印信息重复h次嵌入,那么需要在三维模型中选择h×k个顶点进行水印嵌入。 Step3 计算水印嵌入的强度sin(β),根据公式(10)计算出的法向量计算水印嵌入强度sin(β)。 Step4 通过修改模型顶点的m分量(公式(12))来嵌入水印信息。 (12) 其中: (13) V′i,m是原模型顶点Vi的m分量,w′i是第i位加密后的的二值水印序列,顶点Vi的其他分量保持不变。其余h×k-1个顶点也进行同样的处理。 Step5 将新坐标系O′mvn下的模型的顶点运用逆变换(公式(10)逆过程)得到含有水印的三维网格模型。 水印提取的过程如图6所示。 图6 水印提取过程 水印检测无需输入原始网格模型,具体提取过程如下: Step1 与水印嵌入的前3个过程相同。 Step2 用公式(14)提取水印。 (14) w″i是被检测的第i位水印信息位,V′i,m是待检测的模型顶点V′i的m分量,b1、b2是由公式(13)计算出来的。 Step3 求水印corr相关系数值如公式(15),设置相关系数的阈值为0.5,如果corr>0.5,则水印信息提取成功。 (15) Step4 当水印信息提取出来时,需要根据嵌入水印的系数μ和初值x0进行混沌解密,输入嵌入时设置的2个密钥,再进行Arnold逆置乱,置乱周期为24,即可得到解密后的正确二值水印图像。 本文提出的算法是在Visual Studio 2013开发平台上开发并且利用OpenGL库显示模型。实验选用了Bunny、Dragon、Rabbit这3个标准模型进行实验。在实验部分,通过一些实验结果来说明水印算法的安全性、透明性与鲁棒性。 实验验证当水印没有被嵌入时,由置乱预处理后的水印恢复出原始水印图像。算法所采取的水印图像为32×32具有“科大3D”标志的二值水印图像(图7(a)),图像置乱恢复到原始水印的周期为24。图7(b)是将水印图像置乱了6次之后水印的错乱显示,混沌加密时选取的参数是μ=0.975,初值x0=0.75,此时的置乱性和混沌性达到最佳。所以当密钥正确时实验结果如图7所示。 (a) 原始水印 (b) 置乱后水印 (c) 加密后水印 (d) 解密后水印 (e) 恢复后水印图7 密钥正确时的实验结果 同样,当提取水印时,如果输入的密钥不正确,这里分别对置乱次数、系数μ和初值x0这3个密钥做了测试,即在只有一个密钥不正确而其他2个都正确的情况下验证恢复后的水印,如图8所示。 (a) 逆置乱次数17 (b) μ=3.97500001 (c) x0=0.7500001图8 密钥不正确时的实验结果 由图8可以看出,3个子图都是只有一个密钥出错时水印恢复的状态。可以看出,尽管只有一个密钥错误,但是恢复后的水印也已经完全无法辨认,即使初值x0只相差10-7这样微小的差值,恢复后的水印也是面目全非,无法识别。由此可见,在密钥未知的情况下或者只记得一个或者2个密钥的情况下,水印系统仍然具有极高的安全性。水印系统不易被破解。所以通过置乱和混沌加密的处理,水印系统有着很高的安全性。 为了定量地分析水印系统的性能,采用相关系数(corr)(公式(15))来分析提取出来的水印与原始水印的相似性,用信噪比(SNR)(公式(16))来分析水印嵌入后在没有攻击前和嵌入水印经过各种攻击实验后提取的水印质量变化和原模型的质量变化(信噪比达到50 dB以上,透明性得到保证)。如图9所示。 (16) (a) 原始图像 (b) 嵌入水印后的图像(SNR=84.33) (c) 原始和预处理后的水印 (d) 提取和恢复后的水印(NC=1.0000) 图9是水印图像在未受到任何攻击时的实验结果。图9(a)是原始水印图像,图9(b)是嵌入水印后的图像(SNR=84.33),可见嵌入水印后三维模型的失真度很小,同时也很难察觉到水印的存在,说明水印的透明性很高。图9(c)是原始的二值图像水印和混沌加密后的图像水印,可以看到水印图像已经变得完全混乱。图9(d)是提取和恢复后的水印图像(NC=1.0000),可见在未受到攻击时,嵌入的水印可以完全恢复。 鲁棒性是水印具有安全性的一个必要条件。现在来测试水印检测中几种主要类型的失真影响。主要包括噪声、平滑、网格简化、平移、旋转、缩放等攻击。 1)噪声攻击。嵌入水印的位置选择、自适应地嵌入水印强度对噪声攻击有一定的抵抗效果。图10显示的是在不同强度噪声的攻击下的Bunny模型,通过计算相关系数可知该算法可以抵抗一定的噪声攻击。 (a) 原始Bunny 模型 (corr=1) (b) 噪声强度(σ=0.0001)(corr=0.86) (c) 噪声强度(σ=0.001)(corr=0.48) 2)平滑攻击。模型多分层的表示及由二环邻域面积决定的水印嵌入位置,提高了水印对抗网格平滑攻击的鲁棒性。 由图11可见模型Dragon在不同程度的Taubin[20]平滑处理下,水印信息还能够从受攻击的模型中提取。当平滑攻击k≥0.04时,水印信息不能够被成功提取。说明该算法对平滑攻击具有一定的的鲁棒性。 (a) 平滑攻击(k=0.01)(corr=0.84) (b) 平滑攻击(k=0.03)(corr=0.58) (c) 平滑攻击(k=0.04)(corr=0.46) 3)简化攻击。当网格简化在15%以下时,水印信息的重复嵌入使得提取水印的相关系数在0.5以上。因此,该算法可以抵抗一般的网格简化攻击。如图12所示。 (a) 5%网格简化(corr=0.95) (b) 15%网格简化(corr=0.53) (c) 20%网格简化(corr=0.48) 4)仿射变换攻击。代表轮廓控制点层的顶点使得水印算法很容易抵抗平移、旋转、缩放等攻击。图13显示网格模型受到旋转、缩放等攻击,算法还能够捕获到水印的信息。在坐标系变换前后,水印的嵌入信息没有发生改变,因此,仿射变换并没有削弱算法的鲁棒性。 (a) 模型原坐标系 (b) 旋转攻击的坐标系(corr=0.96) (c) 缩放攻击的坐标系(corr=0.98) 本文方法与其他水印算法[21-23]的比较如表2所示。以Dragon模型为测试模型。 表2 水印方法的比较 图14 算法鲁棒性比较 通过上述实验表明,置乱和混沌加密的三维模型盲水印算法对水印进行了双重加密处理,有效地保证了水印系统的安全性;同时,该算法简单易行,能够有力地保证水印的不可感知性和鲁棒性。 本文提出了一种基于Logistic混沌加密的三维模型盲数字水印算法。为了保障水印系统的安全性,对二值水印图像进行置乱和混沌加密处理。为了提高算法的鲁棒性,方案中对三维网格模型进行网格简化将顶点分为粗层次和精细层次的顶点,精细层次的点具有视觉掩蔽的效果,携带大容量的水印信息,粗层次的轮廓控制点在受到攻击后仿射空间受到影响长度较小。实验表明提出的水印算法能够抵抗噪声、平滑、网格简化、裁剪和仿射变换等攻击。今后的工作将进一步提高算法的鲁棒性。2.3 水印的提取
3 实验结果与分析
3.1 安全性
3.2 透明性
3.3 鲁棒性
4 结束语