数字水印算法的C++实现

合集下载

数字水印算法(包含完整程序)

数字水印算法(包含完整程序)

课程设计任务书学生姓名:_______________ 专业班级:______________________ 指导教师:_______________ 工作单位:武汉理工大学题目:数字水印算法设计初始条件:(1) Mat lab应用软件的基本知识以及基本操作技能。

(2)高等数学、信号与系统等基础运算知识。

要求完成的主要任务:(1)掌握一种数字水印的嵌入与提取算法原理。

(2)编写出水印嵌入算法的mat lab程序,并给出水印嵌入前后的版权图像,并对嵌入效果进行分析说明。

(3)编写出水印提取算法mat lab程序,并给出水印原图和提取出的水印图像, 并对水印的提取效果进行分析说明。

(4)进行水印的抗攻击实验,噪声攻击,剪切攻击,缩放攻击,压缩攻击等。

测定提取前后水印的峰值信噪比(PSNR)和相关性(NC)。

时间安排:6月20日到6月27日6月28日到7月3日7月4日理论设计与仿真撰写报告答辩年月日指导教师签名:系主任(或责任教师)签名:摘要 (2)ABSTRACT (3)1........................................................................................................................ 数字水印技术概述 (4)数字水印技术提出的背景 (4)数字水印的基本特点 (4)数字水印的应用 (5)软件的介绍 (7)MATLAB研究数字水印的优点 (7)MATLAB函数介绍 (8)3.傅立叶域水印理论基础 (10)傅立叶变换简述 (10)一维离散傅立叶变换DFT (10)快速傅立叶变换FFT (11)二维离散傅立叶变换 (12)傅立叶变换性质 (13)空间域平移性 (13)旋转不变性 (14)比例缩放性 (14)4.基于傅立叶域相关性检测的半盲水印 (15)引言 (15)基于Arnold变换的图像置乱算法 (15)水印算法 (17)算法原理 (17)算法的mat lab实现步骤 (20)算法的matlab实现及结果分析 (21)5.总结与心得体会 (26)6.参考文献 (27)附录 (28)随着计算机及网络技术的E速发展,数字作品传播和拷贝变得越来越方便, 同时使得数字作品的信息安全保护和版权保护也成为迫切需要解决的实际问题。

三维模型数字水印典型算法研究与实现

三维模型数字水印典型算法研究与实现

三维模型数字水印典型算法研究与实现
三维模型数字水印算法是一种保护三维模型版权的技术,可以嵌入和提取隐藏信息,以确定模型的所有权和完整性。

研究与实现三维模型数字水印算法需要深入
了解三维模型的特征水印算法的原理,设计合适的算法并进行实验验证和改进,
以提高水印的嵌入容量、提取准确性和鲁棒性。

下面是三维模型数字水印典型算
法的研究与实现过程。

1. 算法研究:
- 需要对三维模型的特征进行深入了解,包括点、线、面等几何数据信息。

- 对数字水印算法进行研究,了解主流的数字水印嵌入和提取技术,如频域和空域水印技术。

- 接着,根据三维模型的特征水印算法的原理,设计适用于三维模型的数字水印算法,并对其进行优化。

2. 算法实现:
- 选择合适的三维模型文件格式,如OBJ、STL等,并编写相应的解析器,以便读取和处理三维模型数据。

- 实现数字水印的嵌入算法,将水印信息嵌入到三维模型的特定部分,如顶点坐标、面法向量等。

- 实现数字水印的提取算法,从嵌入了水印的三维模型中提取出隐藏的水印信息。

- 进行实验和测试,评估算法的嵌入容量、提取准确率、鲁棒性等性能指标。

3. 算法改进:
- 针对已有的算法进行改进,提高其嵌入容量和提取准确性。

- 增加算法的鲁棒性,使其能够有效应对一些攻击,如几何攻击、噪声攻击等。

- 结合机器学习和深度学习等技术,探索更加高效和安全的三维模型数字水印算法。

医学ct图像数字水印算法

医学ct图像数字水印算法
需要进一步研究和探索数字水印技术在医学影 像应用中的标准化和规范化等方面的问题。
发展前景和应用前景预测
随着医学影像技术的不断发展和数字水印技术的不断进步,数字水印技术在医学影 像领域的应用前景非常广阔。
数字水印技术在医学影像领域的应用将会越来越广泛,涉及到医疗诊断、治疗、科 研、教学等多个方面。
数字水印技术在医学影像领域的应用将会越来越注重安全性和隐私保护等方面的问 题,需要不断加强技术研究和创新,以保障医疗信息的安全和隐私。
04
医学ct图像数字水印算法的优化 和改进建议
优化算法性能
算法复杂度优化
01
通过优化算法的计算复杂度,提高算法的运行效率,减少计算
时间和资源消耗。
并行化处理
02
利用并行计算技术,提高算法的处理速度和效率,以满足实时
性要求。
优化数据结构
03
采用高效的数据结构,减少算法在处理过程中的内存占用和访
问时间。
医学ct图像数字水印算法
汇报人: 2023-12-05
• 医学ct图像数字水印技术概述 • 医学ct图像数字水印算法基础 • 医学ct图像数字水印算法的设计与实

• 医学ct图像数字水印算法的优化和改 进建议
• 医学ct图像数字水印技术的未来发展 趋势和展望
01
医学ct图像数字水印技术概述
医学ct图像特点与数字水印技术
跨平台兼容性
提高算法在不同平台和设备上的兼容性,以满足不同用户的需求 。
定制化服务
根据用户的具体需求,提供定制化的数字水印算法服务,以满足 个性化的需求。
05
医学ct图像数字水印技术的未来 发展趋势和展望
医学影像技术的不断发展对数字水印技术的挑战和机遇

用于图像处理的数字水印算法的分析与实现

用于图像处理的数字水印算法的分析与实现

用于图像处理的数字水印算法的分析与实现一、数字水印算法的基本原理数字水印技术是一种在数字图像、音频、视频等数字媒体中嵌入特定信息的技术,它可以将信息与载体媒体无缝地结合,具有不易被删除、不影响载体媒体质量、可靠性高等优点。

数字水印算法的基本原理是将要嵌入的信息通过一定的变换方式嵌入媒体中,嵌入后的数字水印数据不易被发现,但可以通过特定的解码方式得到其中的信息。

数字水印算法基于以下几个基本原理:1. 弱可见性:嵌入的数字水印不应该对原始媒体产生显著的影响,应该是无感知的或者弱可见的。

2. 鲁棒性:嵌入的数字水印应该具有一定的鲁棒性,即在经过一定的攻击或者处理后,数字水印依然能够被有效地检测出来。

3. 安全性:数字水印应该具有一定的安全性,即不能被轻易地破解或者篡改。

4. 容量:数字水印应该具有一定的容量,即可以嵌入足够多的信息,且不会对原始媒体的质量产生显著的影响。

二、常见的数字水印算法常见的数字水印算法包括频域算法、空域算法、小波变换算法、扩频算法等等。

1. 频域算法频域算法基于傅里叶变换的思想,将数字水印嵌入到载体媒体的频域中。

经过傅里叶变换处理后,原始图像的频域将变成一个矩形区域,从而可以在图像频域的某个位置嵌入数字水印信息。

常见的频域算法包括DCT、DWT、FFT等。

2. 空域算法空域算法直接将数字水印嵌入到载体媒体的像素值中,常见的空域算法包括LSB算法、改进的LSB算法、矩阵置换算法等。

其中LSB算法是最常见的一种,它将数字水印嵌入载体媒体的最不显著的位上,从而实现数字水印的嵌入。

3. 小波变换算法小波变换算法是一种比较成熟的数字水印算法,它将数字水印嵌入到图像的小波系数中,从而实现数字水印的嵌入。

小波变换可以有效地分析图像的局部特征,因此小波变换算法在数字水印中的应用越来越广泛。

4. 扩频算法扩频算法将数字水印嵌入到载体媒体的高频成分中,从而实现数字水印的嵌入。

扩频算法需要使用特定的扩频序列来加密数字水印,提高数字水印的安全性。

一种基于改进型奇异值分解的数字水印算法及实现

一种基于改进型奇异值分解的数字水印算法及实现
了鲁棒性测试的结果及 S D与 Bok V V l - D的时间对比分析 , cS 并将其与传统的 C x o 扩频方法进行 比较。测试结果 表明该算法的鲁棒性更好、 速度更快、 实用性更强。 关键词:数字水印; 奇异值分解 ; 鲁棒性; 分块奇异值分解 ; 失真补偿
中 图法分类 号 :T 32 P l 文献 标识 码 :A 文章 编号 :10 —65 20 )202— 0 139 (06 1.390 4
随着信息时代 的到来及互联 网的发展 , 已经成为信息 网络
发布的重要 途径 , 各种形式 的多媒体数 字产 品 ( 图像 、 视频 音/
为了提高水印算法 的效 率 , 本文提出 了一种改进型的基于分块 奇异值分解( l kS D) Bo ,V 的新 型图像数 字水 印算 法。 c
等) 开始在互联 网上传播 。为 了避免 开发 商 和合 法版 权 所有
( oeeo nom t nSiw C lg fr ai ce e&E gnen ,Z eagN ra nvrt, ih aZ eag3 10 l fI o r n ie ig hf n om l i sy Jnu hf n 2 04,C ia r i U ei i hn )
Ab ta t Dii lw tr rigi ap tnile h oo y hc a ov h rbe o lme i c p r h rtcinec sr c : gt aemakn s oe t c n lg ,w ihcns letepo lm fmut da o yi t oet t. a at i g p o Anagrtm b sd o VD i rb s g is i g itrin u ae nS loi ae nS s o u t an t ma eds t .B tb sd o VD,ao gw t h nagn fi i ,moe h a o o ln i te e lrigo ssz h t e r

位图数字水印的算法研究与实现

位图数字水印的算法研究与实现
像处 理 操 作 。
关 键词 : 数字水印 ; ;C 位图 D T
中 图分 类 号 :'3 1 P 1 I 文 献 标 识 码 : A D :03 6 OI1 .9 9,isn1 0 — 2 02 10 .4 .s .0 1 0 7 .01 .3o i
S u y a d Re l a i n o h e h d Us t d n a i to ft e M t o e i z n Bi a g t l a e m a k t p Di i m a W tr r
印 。 着 数 字 水 印 技 术 的 发 展 , 种 水 印 算 法 层 出 不 随 各
从 而实现压 缩域 内的水 印编码 。
所 以我 们采用 变换 域的方 法 。在 变换域 的方法 中 目前普遍 应用 的是F T D T F 、 C 以及 小波 变换 等多种 算法 , 由于F v中用 到 了复数 运算 而且 运算 量 较大 f r 而 小 波变 换 的计 算 量 过 大 ,所 以本 文 中 我 们 采用 DT C 算法 。以下是一 维D T C 的正 、 逆变 换 的表 达式 :
c l u a in b o sd rn p i a r p r f h ma e n s ac l t y c n i e i g o t l p o e t o u n b i g .Re u t o ma e t s h we h t t e o c y s l f i g e t s o d t a h s e fc fi s rin a d d t c in w s g o .T i k n f a e ma k wa e y s c e n o l r ss f to n e t n ee t a o d h s i d o w t r r s v r e r t a d c u d e it e o o

5.1图象信息隐藏与水印算法(2)-数字水印基础教程


28

隐藏算法



计算图像边界 筛选隐藏位置 数据预处理(加密、随机化等) 数据替换
29

提取算法(需要原始图像)

从原始图像确定隐藏位置 提取信息
30
隐藏了764bits
31
4 渐进图像数字水印

图像渐进传输技术

网络用户在浏览图片时,首先获得一幅模糊 图像,随着时间的推移,用户可以逐步获得 更加清晰的图像,而如果用户不想看这幅图 像的全貌,可以取消该图像的进一步传输。 这样即节省了用户的时间,又节省了网络带 宽
b a (1 s)

组合图像形成嵌入信息的图像
16

提取算法

将接收图像分为88 的图像块 嵌入位置上的值记为b’ 在嵌入位置上,初始值设为零,用插值算 法根据周围像素值计算这些位置的值,记 为a’(=a)
b' ( 1) s' a


组合s并反置乱
17
原始载体图像 Lena ,512512
R0 3
0
[ R0 , R0 ] [ R1 , R1 ]
0.5
R1 3
1
42
嵌入算法

嵌入1

修改像素值,使得黑色像素的比例在[R1,R1+] 如果修改太大,则标志为无效

修改像素值,使得黑色像素的比例大于R1+3或小于R0 -3

嵌入0

修改像素值,使得黑色像素的比例在[R0-, R0] 如果修改太大,则标志为无效

位图文件头 位图信息头 调色板 图像矩阵
47

调色板:

数字水印算法介绍

数字⽔印算法介绍数字⽔印算法列举湖南科技⼤学计算机科学与⼯程学院①基于LSB 的数字⽔印⽅案(空间域、不可逆、不可见和盲检测)嵌⼊步骤:(1)先把⽔印信息转化为⼆进制⽐特流I。

(2)根据I的长度⽣成密钥K,并且严格保存。

密钥K是对图像载体像素位置的⼀个映射。

(3)把I中的每⼀位依次根据密钥K,置换掉原始载体图像中相应位置的像素最后⼀位。

提取步骤:(1)根据严格保存的密钥K遍历嵌⼊了⽔印的图像中的相应像素,提取出最后⼀位。

(2)将提取出来的每⼀位重新组合成⽔印信息。

②基于差分扩展的数字⽔印⽅案(变换域、可逆、不可见和盲检测)嵌⼊步骤:(1)将图像M分成像素点对(x,y),将⽔印信息转化为⼆进制⽐特流,⽐特流的每⼀位⽤m 表⽰。

(2)根据⽔印信息⽐特流的长度随机⽣成信息的嵌⼊位置k作为密钥信息严格保存。

(3)对图像M计算均值l和差值h:-=+=yx h y x floor l 2((floor表⽰向下取整)(4)将⽔印⽐特信息m以差值扩展的⽅法嵌⼊到差值h中:mh h +?='2(5)将得到的h '代⼊(3)中,得到新的图像像素对,形成嵌⼊秘密信息后的图像C。

提取步骤:(1)将图像C分成像素点对(x,y),读⼊密钥信息K。

(2)将图像C依旧按照嵌⼊步骤中的(3)式计算均值l和差值h。

(3)根据密钥k找到相应位置,提取差值h的最后⼀位⽐特信息m,再将差值h进⾏变换得到1>>='h h 。

(4)将提取到的⽐特信息m进⾏组合可以恢复⽔印信息,将得到的h '代⼊嵌⼊步骤的(3)中计算新的图像像素对可以恢复原始图像载体M。

③基于直⽅图修改的数字⽔印算法(空间域、可逆、不可见和盲检测)嵌⼊步骤:(1)找到直⽅图的零点z和峰值点p,将z v p <<的像素值v⾃加1。

(2)漂移后的直⽅图v=p处即为嵌⼊⽔印的位置,将⽔印信息转化为⼆进制流并记为k,按顺序嵌⼊,即k v v +=';(3)得到的由像素值v '组成的图像就是嵌⼊秘密信息后的图像。

图片数字水印C语言代码

图片数字水印C语言代码//本文算法实现的C语言代码,Windows XP平台DEV-CPP(4.9.9.2)环境下编译通过//#include //#include //#include //头文件#include //头文件#include //#include //#define MAX_ITERA 60 //常量宏定义#define MIN_DOUBLE (1e-30) //常量宏定义#define F_EXTPAD 4 //常量宏定义#define D_EXTPAD 2 //常量宏定义//函数原型预定义区域void RecoverWaterMark3(char *InVector,char *OutWater,double a);void InsertWaterMark3(char *InVector,char *OutVector,char *InWater,char *OutWater,double a);void RecoverWaterMark2(char *InVector,char *OutWater,double a);void InsertWaterMark2(char *InVector,char *OutVector,char *InWater,char *OutWater,double a);void RecoverWaterMark1(char *InVector,char *OutWater,double a);void InsertWaterMark1(char *InVector,char *OutVector,char *InWater,char *OutWater,double a);void Arnold256(char *in,char *out,unsigned char *q,int N,int k1,int k21,int k22,int k23,int k24,int type);int SVD(double a[],int m,int n,double u[],double v[],double eps);void Matrices(double a[],double b[],int m,int n,int k,double c[]);void ppp(double a[],double e[],double s[],double v[],int m,int n);void sss(double fg[2],double cs[2]);void YIQ2RGB(char *out,double *Y,double *I,double *Q,int N);void RGB2YIQ(char *in,char *out,double *Y,double *I,double *Q,int N);void DWT2D(double **rows, int width, int height, int levels,int inverse);void IDWT1D(double *x, int N);void DWT1D(double *x_in, int N);void CheckPSNR(double *p0,double *p1,int m,int n,double a);unsigned char Double2Char(double d);void Array2D1D(double **aa,double *a,int m,int n);void Array1D2D(double *a,double **aa,int m,int n);void errorNexit(char *s,char *d);void MsgBox(char *s,char *a,char *b);double MAX(double,double,double);static double *x_alloc = NULL; //静态内存指针//////////////////////////////////////主函数//////////////////////////////////////////////////////////////////////// //////载体图片默认为lmk.bmp-----------------必须为640*640*24bit//水印图片默认为W.bmp-------------------必须为64*64*8bit //W_a.bmp为水印图片加密后输出-----------大小为64*64*8bit //lmk_w10.bmp为嵌入水印后的载体图片------大小为640*640*24bit//lmk_w20.bmp为嵌入水印后的载体图片------大小为640*640*24bit//---a----------------------------------水印嵌入强度,初始默认为0.05//临时文件SLL3.dat,SLH3.dat,SHL3.dat,SHH3.dat,W.dat,Uw.dat,Vw.dat,分别保存了//载体图片LL3子图分解后的奇异值矩阵(double)------用于提取水印使用//载体图片LH3子图分解后的奇异值矩阵(double)------用于提取水印使用//载体图片HL3子图分解后的奇异值矩阵(double)------用于提取水印使用//载体图片HH3子图分解后的奇异值矩阵(double)------用于提取水印使用//原始水印加密后的数据矩阵(double)---------------用于评价NC//水印奇异值分解后的左奇异向量(double)-----------用于提取水印时合成水印图像//水印奇异值分解后的右奇异向量(double)-----------用于提取水印时合成水印图像//////////////////////////////////////主函数//////////////////////////////////////////////////////////////////////// ////int main(){double a=0.05; //初始嵌入强度int type=6,t;char *s;void (*insert)(),(*recover)(); //函数指针for(;;){printf("请选择嵌入方式:\n");printf(" 1:方式一 \n");printf(" 2:方式二 \n");printf(" 3:方式三 \n");printf(" 4:退出程序 \n\n");scanf("%d",&t);if(t==1) //选择嵌入方式1{insert=InsertWaterMark1;recover=RecoverWaterMark1;s="方式一";printf("已选中方式一,当前方式将把水印信息全部嵌入到LL3子图中。

matlab数字水印算法及实现和源代码

1.数字作品的知识产权保护----数字作品(如电脑美术、扫描图像、数字音乐、视频、三维动画)的版权保护是当前的热点问题。

由于数字作品的拷贝、修改非常容易,而且可以做到与原作完全相同,所以原创者不得不采用一些严重损害作品质量的办法来加上版权标志,而这种明显可见的标志很容易被篡改。

----“数字水印”利用数据隐藏原理使版权标志不可见或不可听,既不损害原作品,又达到了版权保护的目的。

目前,用于版权保护的数字水印技术已经进入了初步实用化阶段,IBM公司在其“数字图书馆”软件中就提供了数字水印功能,Adobe公司也在其著名的Photoshop软件中集成了Digimarc公司的数字水印插件。

然而实事求是地说,目前市场上的数字水印产品在技术上还不成熟,很容易被破坏或破解,距离真正的实用还有很长的路要走。

2.商务交易中的票据防伪----随着高质量图像输入输出设备的发展,特别是精度超过 1200dpi 的彩色喷墨、激光打印机和高精度彩色复印机的出现,使得货币、支票以及其他票据的伪造变得更加容易。

----另一方面,在从传统商务向电子商务转化的过程中,会出现大量过度性的电子文件,如各种纸质票据的扫描图像等。

即使在网络安全技术成熟以后,各种电子票据也还需要一些非密码的认证方式。

数字水印技术可以为各种票据提供不可见的认证标志,从而大大增加了伪造的难度。

3.证件真伪鉴别----信息隐藏技术可以应用的范围很广,作为证件来讲,每个人需要不只一个证件,证明个人身份的有:身份证、护照、驾驶证、出入证等;证明某种能力的有:各种学历证书、资格证书等。

国内目前在证件防伪领域面临巨大的商机,由于缺少有效的措施,使得“造假”、“买假”、“用假”成风,已经严重地干扰了正常的经济秩序,对国家的形像也有不良影响。

通过水印技术可以确认该证件的真伪,使得该证件无法仿制和复制。

4.声像数据的隐藏标识和篡改提示----数据的标识信息往往比数据本身更具有保密价值,如遥感图像的拍摄日期、经/纬度等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告实验名称:数字水印算法实现数字水印算法的C++实现[摘要]通过在原始数据中嵌入秘密信息--水印来证实数据的所有权。

这种被嵌入的水印可以是一段文字、标识、序列号等,而且这种水印通常是不可见或不可察的,它与原始数据紧密结合并隐藏其中,并可以经历一些不破坏源数据使用价值或商用价值的操作而能保存下来。

数字水印技术除了应具备信息隐藏技术的一般特点外,还有着其固有的特点和研究方法。

在数字水印系统中,隐藏信息的丢失,即意味着版权信息的丢失,从而也就失去了版权保护的功能,也就是说,这一系统就是失败的。

由此可见,数字水印技术必须具有较强的鲁棒性、安全性和透明性。

本文是关于在24位宿主图像的文档说明。

[关键词]数字水印标识安全性宿主图像水印图像1. 算法实现思路1.1 数字水印的提出及研究现状1994年在一次国际重要学术会议上由Tirkel等人发表了题目为“A digital watermark”的第一篇有关数字水印的文章,当时他们已经意识到了数字水印的重要性,提出了数字水印的概念及可能的应用,并针对灰度图像提出了两种向图像最低有效位中嵌入水印的算法。

1996年在英国剑桥牛顿研究所召开了第一届国际信息隐藏学术研讨会,标志着信息隐藏学的诞生,而作为信息隐藏学主要分支之一的数字水印技术的研究也得到了迅速的发展。

到1999年第三届国际信息隐藏学术研讨会,数字水印成为主旋律,全部33篇文章中有18篇是关于数字水印的研究。

我国近年来已有少数的研究所和大学开展了对水印技术的研究工作,如:中科院自动化研究所的模式识别国家重点实验室、天津大学图像信息中心等。

数字水印的研究引起了各种学科的研究人员的兴趣,但受关注的程度不及国外,研究的人员不多,研究的领域不广,从理论和实际成果两方面来看,国内在数字水印方面的研究工作还处于刚起步阶段。

我国已明确表示:所有的知识产权保护和安全认证问题不可能依靠国外的力量,必须由我们自主开发解决。

因此,无论从学术研究角度,还是从应用技术的角度,开展数字水印的研究都具有十分重要的意义。

1.2 程序开发思路因特网的出现以及计算机、扫描仪和打印机的广泛使用使得数字化多媒体数据的获取、交换和传输变得异常简单。

但是通过网络传播数据也使有恶意的个人或团体在没有得到数据文件所有者许可的情况下能肆意地复制和传播有版权保护的文档。

数字水印技术则为这种问题提供了一个潜在的解决方案。

数字水印(Digital Watermarking )是往多媒体数据(如图像、声音、视频信号等)中添加某些数字信息以达到版权保护等作用。

如果没有鲁棒性(Robustness )的要求,水印与信息伪装技术上的处理本质上是完全一致的。

在绝大多数情况下我们希望添加的信息是不可察觉的(Imperceptible ),并且希望攻击者在不破坏数据本身质量的情况下无法将水印去掉。

发展数字水印技术的原动力就是为了提供多媒体数据的版权保护。

1.3 数字水印的实现算法1) 空间域水印L.F.Turner与R.G.van Schyndel等人的空间域水印算法是最低有效位算法(LSB)与改进算法。

由于该算法是通过调整原始数据的最低几位来隐藏信息,使一般用户对于隐藏信息,在视觉上很难察觉。

虽然其有较大的信息嵌入量,但作为数字水印算法,因其基本原理限制,所隐藏的数字水印信息是极为脆弱的,无法经受一些有损的信号处理。

Bander等人提出的基于统计的数字水印方案(Patchwork)和纹理块映射编码方法则是空间域水印技术的典型设计。

Patchwork任意选择N对图像点,增加其一点的亮度的同时,相应降低另一点的亮度值。

通过这一调整过程完成水印的嵌入。

Pitas和Kaskalis利用“Patchwork”算法的基本原理,提出了数字图像签名的思想。

这种算法可以有效抵抗二次采样攻击与JPEG压缩。

2) 变换域算法基于变换域的技术可以嵌入大量比特数据而不会导致可察觉的缺陷,往往采用类似扩频图像的技术来隐藏数字水印信息。

这类技术一般基于常用的图像变换,基于局部或是全部的变换,这些变换包括离散余弦变换(DCT)、小波变换(WT)、傅氏变换(FT或FFT)以及哈达马变换(Hadamard transform)等等。

其中基于分块的DCT是最常用的变换之一,现在所采用的静止图像压缩标准JPEG也是基于分块DCT的。

最早的基于分块DCT的一种数字水印技术方案是由一个密钥随机地选择图像的一些分块,在频域的中频上稍稍改变一个三元组以隐藏二进制序列信息。

选择在中频分量编码是因为在高频编码易于被各种信号处理方法所破坏,而在低频编码则由于人的视觉对低频分量很敏感,对低频分量的改变易于被察觉。

该数字水印算法对有损压缩和低通滤波是稳健的。

另一种DCT数字水印算法是首先把图像分成8×8的不重叠像块,在经过分块DCT 变换后,即得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。

该算法是通过对选定的DCT系数进行微小变换以满足特定的关系,以此来表示一个比特的信息。

在水印信息提取时,则选取相同的DCT系数,并根据系数之间的关系抽取比特信息。

除了上述有代表性的变换域算法外,还有一些变换域数字水印方法,它们当中有相当一部分都是上述算法的改进及发展,这其中有代表性的算法是I.Podichuk和Zeng Wen-jun提出的算法。

他们的方法是基于静止图像的DCT变换或小波变换,研究视觉模型模块返回数字水印应加载在何处及每处可承受的JND(Just Noticeable Difference恰好可察觉差别)的量值(加载数字水印的强度上限),这种水印算法是自适应的。

3) 压缩域算法基于JPEG、MPEG标准的压缩域数字水印系统不仅节省了大量的完全解码和重新编码过程,而且在数字电视广播及VOD(Video Oil Demand)中有很大的实用价值。

相反地,水印检测与提取也可直接在压缩域数据中进行。

Hartung提出了一种针对MPEG-2压缩视频数据流的数字水印案。

在Hartung方案中,只有MPEG-2数据流最后一部分数据被改变,其原理是,首先对DCT编码数据块中每一输入的Huffman码进行解码和逆量化,以得到当前数据块的一个DCT系数;其次,把相应水印信号块的变换系数与之相加,从而得到水印叠加的DCT系数,再重新进行量化和Huffman编码,最后对新的Huffman码字的位数n,与原来的无水印系数的码字n0进行比较,只在n1不大于n0的时候,才能传输水印码字,否则传输原码字,这就保证了不增加视频数据流位率。

4) NEC算法该算法由NEC实验室的Cox等人提出,该算法在数字水印算法中占有重要地位,其实现方法是,首先以密钥为种子来产生伪随机序列,该序列具有高斯N(0,1)分布,密钥一般由作者的标识码和图像的哈希值组成,其次对图像做DCT变换,最后用伪随机高斯序列来调制(叠加)该图像除直流分量外的1000个最大的DCT系数。

该算法具有较强的鲁棒性、安全性、透明性等。

5) 生理模型算法人的生理模型包括人类视觉系统HVS和人类听觉系统HAS。

该模型不仅被多媒体数据压缩系统利用,同样可以供数字水印系统利用。

它们的基本思想均是利用从视觉模型导出的JND描述来确定在图像的各个部分所能容忍的数字水印信号的最大强度,从而能避免破坏视觉质量,也就是说,利用视觉模型来确定与图像相关的调制掩模,然后再利用其来插人水印。

这一方法同时具有好的透明性和鲁棒性。

2. 算法实现文中只给出部分关键代码。

2.1 水印图像的嵌入程序。

水印图像嵌入://转换公式为Gray(i,j)=0.11*R(i,j)+0.59*G(i,j)+0.3*B(i,j),//其中Gray(i,j)为转换后的黑白图像在(i,j)点处的灰度值,//其中绿色所占的比重最大,所以转换时可以直接使用G值。

void CWaterMarkDlg::OnWaterEmbed(){// TODO: Add your control notification handler code hereif ((bm[0].bmHeight*bm[0].bmWidth)<3*(bm[1].bmHeight*bm[1].bmWidth)) {//不能嵌入水印MessageBox("水印图象过大请更换较大宿主图象","错误",MB_OK);Mark=FALSE;}if(!Mark)return ;if(biBitCount<biBitCount1){MessageBox("水印受限制");return ;}RGBQUAD *m_copymater; //定义一个水印信息的数据副本m_copymater = new RGBQUAD [WaterHeight*WaterWidth];int i,j;int count=0;BYTE m_r,m_b;if(m_waterEmbed !=NULL) //m_waterEmbed是水印.嵌入后.的位图数据全局变量if(m_Ih!=0)for(int l =0;l<m_Ih;l++)delete [] m_waterEmbed[l];m_waterEmbed = new RGBQUAD*[ImageHeight];for(i=0;i<ImageHeight;i++)m_waterEmbed[i] = new RGBQUAD [ImageWidth];for(i=0;i<ImageHeight;i++) //将原来的图象的数据复制到m_waterEmbed里for(j=0;j<ImageWidth;j++)m_waterEmbed[i][j]=m_tOriPixelArray[i][j];for(i=0;i<WaterHeight;i++)//将水印信息的数据复制到一维数组m_copymater水印信息的数据副本里for(j=0;j<WaterWidth;j++){m_copymater[i*WaterHeight+j]=m_watermarkdata[i][j];count++;}number=count;//记录嵌入的点数int k=0;if (biBitCount==24) //Operate_Byte()嵌入水印信息位操作{for(i=0;i<IMAGEHEIGHT&&COUNT>0;i++)for(j=0;j<ImageWidth&&count>0;j++,count--)//下面可以用一条语句的但为了测试还是多句{m_r=m_waterEmbed[i][j].rgbRed;m_b=m_waterEmbed[i][j].rgbBlue;BYTE &a=m_r;BYTE &b=m_b;BYTE c=m_copymater[i*ImageHeight+j].rgbGreen;Operate_Byte(a,b,c);m_waterEmbed[i][j].rgbRed=m_r;m_waterEmbed[i][j].rgbBlue=m_b;}PutInWaterMessage();}elsereturn;CDC *dc=GetDC();//将象素打印出来RECT m_rect;float w,h,p,q;GetDlgItem(IDC_STATIC2)->GetClientRect(&m_rect);if(m_rect.right<ImageWidth&&m_rect.bottomw=(float)m_rect.right/(float)ImageWidth;h=(float)m_rect.bottom/(float)ImageHeight;}elsew=h=1;for( p=0,i=0;i<ImageHeight;i++,p++)for( j=0, q=0;j<ImageWidth;j++,q++)dc->SetPixel(2+(int)(q*w),235+(int)(p*h),RGB(m_waterEmbed[i][j].rgbRed, m_waterEmbed[i][j].rgbGreen,m_waterEmbed[i][j].rgbBlue));ReleaseDC(dc);delete [] m_copymater;m_Ih=ImageHeight; //为保证直接更换水印信息而没有更换宿主图象提供原宽高 void error bugm_Iw=ImageWidth;m_Wh=WaterHeight;m_Ww=WaterWidth;TRACE("\n%d\n",ImageHeight);GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE);}3. 程序运行开发环境 Microsoft Visual C++ 6.0程序功能在程序中打开宿主图像24位(保存格式为:24位位图),水印图像8位(H*W最好为:131*170)(保存格式为256色位图)。

相关文档
最新文档