数字水印算法的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图像数字水印算法
发展前景和应用前景预测
随着医学影像技术的不断发展和数字水印技术的不断进步,数字水印技术在医学影 像领域的应用前景非常广阔。
数字水印技术在医学影像领域的应用将会越来越广泛,涉及到医疗诊断、治疗、科 研、教学等多个方面。
数字水印技术在医学影像领域的应用将会越来越注重安全性和隐私保护等方面的问 题,需要不断加强技术研究和创新,以保障医疗信息的安全和隐私。
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. 扩频算法扩频算法将数字水印嵌入到载体媒体的高频成分中,从而实现数字水印的嵌入。
扩频算法需要使用特定的扩频序列来加密数字水印,提高数字水印的安全性。
一种基于改进型奇异值分解的数字水印算法及实现
中 图法分类 号 :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.声像数据的隐藏标识和篡改提示----数据的标识信息往往比数据本身更具有保密价值,如遥感图像的拍摄日期、经/纬度等。
C语言中的安全数字水印与版权保护
C语言中的安全数字水印与版权保护数字水印是一种信息隐藏技术,通过在数字媒体中嵌入少量隐藏信息的方式,来实现防伪、版权保护等目标。
在C语言中,也可以应用这一技术来保护软件的版权。
一、数字水印的基本原理数字水印可以分为可见水印和不可见水印两种类型。
可见水印是直接嵌入到图像、音频或视频中的一种信息,而不可见水印则是对媒体进行一定的变换后得到的一串隐藏信息。
在C语言中,我们可以通过对程序代码进行嵌入信息的方式来实现不可见水印。
具体的实现方式如下:1. 版权信息嵌入:将版权信息以特定格式嵌入到源代码中。
例如,可以在文件头部或者注释中加入版权声明、作者信息等。
2. 功能隐藏:将一部分代码进行加密或者隐藏,使得除了具有解密密钥的人之外无法理解和使用这部分代码。
3. 变量嵌入:在代码中嵌入特定的变量,用于标识该软件的唯一性或版本信息。
二、版权保护的意义和措施软件的版权保护对于软件开发者来说非常重要。
C语言作为一种广泛应用的编程语言,其代码容易被复制和修改,因此需要采取一些措施来保护软件的版权。
1. 加密与混淆:对源代码进行加密和混淆处理,使得他人无法轻易获取源代码或者理解其中的逻辑。
2. 数字签名:通过对软件进行数字签名,可以验证软件的合法性和完整性。
这样一来,即使他人获取了软件的源代码,也无法伪造数字签名。
3. 授权认证:在软件中加入授权认证模块,通过验证用户的授权信息来限制软件的使用。
三、应用实例以下是一个C语言中的安全数字水印与版权保护的应用实例:```c#include <stdio.h>#include <stdlib.h>// 版权声明#define COPYRIGHT "Copyright (C) 2022. All rights reserved."// 关键代码的加密函数int encrypt(int value) {// TODO: 加密算法的具体实现// ...}// 主函数int main(int argc, char *argv[]) {// 打印版权声明printf("%s\n", COPYRIGHT);// 关键代码的解密int decryptedValue = encrypt(1234);// TODO: 其他功能实现return 0;}```在以上代码中,我们通过在文件头部加入版权声明,来明确该软件的版权信息。
数字图像水印算法的设计与实现
数字图像水印算法的设计与实现随着数字技术的不断发展,数字图像水印技术已经成为了一种广泛应用的技术。
数字图像水印技术能够将数字信息嵌入到待传输的图像中,以达到保护图像版权和传输安全的目的。
本文将介绍几种数字图像水印算法的设计与实现。
一、DCT域水印算法DCT域水印算法是一种基于离散余弦变换的水印算法。
首先,将待加水印的图像分成若干个8 x 8的小块,然后对每个小块进行离散余弦变换。
在进行离散余弦变换后,将水印信息嵌入到变换后的系数中。
最后,对所有加入水印的小块进行逆离散余弦变换得到加水印的图像。
实现该算法时需要注意,由于嵌入水印信息会对原始图像进行修改,需要进行适当的幅值控制,避免对图像质量造成过大的影响。
二、DWT域水印算法DWT域水印算法是一种基于小波变换的水印算法。
该算法将待加水印的图像进行小波变换,得到高频分量和低频分量。
然后,将水印信息嵌入到低频分量中。
最后,对修改后的低频分量和高频分量进行逆变换,得到加水印的图像。
实现该算法时需要注意,小波变换会引入一定的失真,需要进行一定的幅值控制和去噪操作,以保证加水印后的图像质量。
三、LSB域水印算法LSB域水印算法是一种基于最低有效比特的水印算法。
该算法将待加水印的图像的最低有效比特替换为水印信息,一般只修改少量像素的最低有效比特,从而达到水印目的。
实现该算法时需要注意,由于只修改了最低有效比特,所以加入的水印信息比较容易受到攻击,需要进行加密和鲁棒性增强措施。
四、RS域水印算法RS域水印算法是一种基于区域选择的水印算法。
该算法将待加水印的图像分成若干个区域,然后针对每个区域选择不同的水印嵌入算法。
不同的区域使用不同的嵌入算法可以提高水印的安全性和鲁棒性。
实现该算法时需要注意,需要进行充分的选取区域和嵌入算法,以保证加入的水印信息具有一定的独特性和抗攻击能力。
总的来说,数字图像水印算法涉及到的技术比较复杂,涉及到离散余弦变换、小波变换、最低有效比特、区域选择等多个方面。
数字水印算法的C++实现
数字⽔印算法的C++实现实验报告实验名称:数字⽔印算法实现数字⽔印算法的C++实现[摘要]通过在原始数据中嵌⼊秘密信息--⽔印来证实数据的所有权。
这种被嵌⼊的⽔印可以是⼀段⽂字、标识、序列号等,⽽且这种⽔印通常是不可见或不可察的,它与原始数据紧密结合并隐藏其中,并可以经历⼀些不破坏源数据使⽤价值或商⽤价值的操作⽽能保存下来。
数字⽔印技术除了应具备信息隐藏技术的⼀般特点外,还有着其固有的特点和研究⽅法。
在数字⽔印系统中,隐藏信息的丢失,即意味着版权信息的丢失,从⽽也就失去了版权保护的功能,也就是说,这⼀系统就是失败的。
由此可见,数字⽔印技术必须具有较强的鲁棒性、安全性和透明性。
本⽂是关于在24位宿主图像的⽂档说明。
[关键词]数字⽔印标识安全性宿主图像⽔印图像1. 算法实现思路1.1 数字⽔印的提出及研究现状1994年在⼀次国际重要学术会议上由Tirkel等⼈发表了题⽬为“A digital watermark”的第⼀篇有关数字⽔印的⽂章,当时他们已经意识到了数字⽔印的重要性,提出了数字⽔印的概念及可能的应⽤,并针对灰度图像提出了两种向图像最低有效位中嵌⼊⽔印的算法。
1996年在英国剑桥⽜顿研究所召开了第⼀届国际信息隐藏学术研讨会,标志着信息隐藏学的诞⽣,⽽作为信息隐藏学主要分⽀之⼀的数字⽔印技术的研究也得到了迅速的发展。
到1999年第三届国际信息隐藏学术研讨会,数字⽔印成为主旋律,全部33篇⽂章中有18篇是关于数字⽔印的研究。
我国近年来已有少数的研究所和⼤学开展了对⽔印技术的研究⼯作,如:中科院⾃动化研究所的模式识别国家重点实验室、天津⼤学图像信息中⼼等。
数字⽔印的研究引起了各种学科的研究⼈员的兴趣,但受关注的程度不及国外,研究的⼈员不多,研究的领域不⼴,从理论和实际成果两⽅⾯来看,国内在数字⽔印⽅⾯的研究⼯作还处于刚起步阶段。
我国已明确表⽰:所有的知识产权保护和安全认证问题不可能依靠国外的⼒量,必须由我们⾃主开发解决。
数字水印算法的C++实现
数字水印算法的C++实现
陈磊
【期刊名称】《黑龙江科技信息》
【年(卷),期】2008(000)017
【摘要】通过介绍使用C++实现一个简单的数字水印嵌入算法来近一步了解数字水印技术.
【总页数】2页(P59-60)
【作者】陈磊
【作者单位】天津工业大学计算机与自动化学院,天津300211
【正文语种】中文
【中图分类】TP3
【相关文献】
1.用Visual C++实现基于数学形态学的数字图像处理 [J], 张嘉怡;伍川辉;刘建文
2.用C++语言实现校园网中电子公文的数字签名 [J], 王淮亭
3.利用Visual C++实现数字图像处理研究 [J], 靳铁良
4.数字签名算法SHA-1的C++实现 [J], 朱珍
5.基于Visual C++的数字图像的几种特效实现 [J], 罗丽云; 段艳萍
因版权原因,仅展示原文概要,查看原文内容请购买。
基于DCT域的图像数字水印算法
D T变换 , C 利用视觉掩 蔽效应[ 对块进行分类 ; 密钥产生 2 1 , 根据
的随机序列和 二值水 印图像 ,在原始图像的 DC T域嵌 入不 同
基金 项 目:中南民族大学 自然科 学基金项 目( Z 0 0 4; Y Q 50 ) 国家民委重点:研 项 目( Y 2 0 ) 件 MZ 0 0 4
维普资讯
计算机 时代 2 0 年 第 1 期 06 0
知的质量亏损和变形 。
将 原始 图像 F 分成互不覆盖的 8 8子块 B,对每个子块 X
B 进行 二维 DC T变换 , 后进行块 分类 。考虑到 H 然 VS特性并 类: 第一类 是照 度较低且纹理简单的块 , 叠加的水 印强 度最 小 ;
可 ()不可见性 :即水印信息 的嵌入不应影 响原 始信息可感 结 合图像的照明掩蔽特性和纹理掩 蔽特性 , 以把 子块 分成三 1 () 2 鲁棒性 : 即嵌入的水印应该能够抵 御来 自授权 访问者 的
效果好等优点 。二维 D T变换和 IC C D T反变换公式如下 :
Fuv= ( ,)
i
变换成 一个长度为 n 的序列 { 。, w1用密钥 K y e 作随机种 子产 生 0 nl 到 — 的伪随机 序列 { 1 水印比特嵌入 各个 分块 , 后每 r, 将 然
个块进行逆 D T变 换得 到嵌 入水印后的灰 度图像 F。 C
第二类 是照度较高且纹理复杂 的块 , 加的水印强度最大 ;有效 。 三 类是剩余的块 。该过程 中还 可以将图像子块 的 D T直流系 数字水印根据水印嵌入位置的不同,可分为空间域水印和变 数和边缘 点数作 为子块分类 的依据 。 换域水印两种。 变换域水印已经成为研究的热点之一。 本文提出了
基于混沌特性的小波数字水印算法C-SVD
小结
优点
• 基于混沌序列,水印难 以伪造
缺点
• 非盲水印,需要原信息, 检测较为复杂
• 变换域嵌入,不可见性 好,鲁棒性强
• 水印信息无“意义”
• 嵌入强度自由控制,可 实现不同水印目的
• 对图像格式有要求,索 引图像需要转换
系统在某个参数和给定的初始条件下,其运动是确定性的, 但是该运动的长期状态对初始条件极其敏感。
混沌序列{Xn}是一个伪随机序列,{Xn}对初值非常敏感。初
始条件的任意小的改变如1.0e-6,都会引起完全不同的行为。
因而{Xn}可以用作作品原创者的身份指纹。
混合光学双稳模型
算法①: 生成{Sn}
基于混沌特性的小波数字 水印算法C-SVD
目录
• 1、小波
• 2、基于混沌特性的小波数字水印算法C-SVD 2.1、小波SVD数字水印算法SVD 2.2、基于混沌特性的小波数字水印算法C-SVD
• 3、图像和声音的数字水印嵌入
• 4、数字水印的检测
• 5、数字水印检测结果的评测
1.1 小波分析
• 小波变换是一种信号的时间-尺度(时间-频率)分析方法, 它具有多分辨率分析(Multiresolution Analysis)的特 点。
4、数字水印的检测
数字水印的检测成功与否非常关键,一个信号中的水 印如果不能正确地被检测出来,那么就失去了数字水印存 在的意义。
有关概念: 盲水印和非盲水印 有意义水印和无意义水印
数字水印的检测步骤
设原图像为XP,被检测图像为XP’,如下: (1)将原图像进行小波分解,得到低频分量Ca (2)将被检测图像进行小波分解,得到低频分量Ca’ (3)计算两个低频分量的差值W’=Ca-Ca’ (4)由原图像得到原水印W (5)计算两个水印之间的相关系数
数字水印技术探索与实现
数字水印技术探索与实现随着数字化时代的不断发展,无论是电子商务、电子支付、数字化图书馆还是数字音像等都离不开数字化技术。
而其中,数字水印技术是一项十分重要的技术。
数字水印技术可以在数字图像、音频和视频等媒体文件中嵌入特定的标识符,以识别和保护这些文件的版权。
数字水印技术在音视频盗版领域的应用已经十分普遍,而数字水印技术在其他领域的应用也正不断被发掘,探索数字水印技术的实现方法已经变得非常必要。
一、数字水印技术的原理数字水印技术是通过将一个标识符以一种不影响人类感知的方式嵌入到图像、音频或者视频等数字媒体文件中,这个标识符就是数字水印。
数字水印能够隐藏在图像或者语音中,不被人肉眼注意到,在保留原始文件所有信息的情况下,实现版权信息或其他信息的嵌入和识别。
这种提供信息完整性、不可见性和鲁棒性的数字水印技术,避免了版权图片被盗用、音频被盗包、视频被篡改等的风险,可以有效地保护数字媒体的版权和完整性。
数字水印技术的实现基于两个主要步骤:嵌入和提取。
嵌入是将数字水印嵌入原始的数字媒体文件中,而提取则是从嵌入了数字水印的数字媒体文件中提取数字水印信息。
在嵌入数字水印时,数字水印被修改并且嵌入媒体数据中,以便在之后的提取过程中能够提取出来。
而在提取数字水印时,根据相应的算法对带有水印信息的数据进行解码和恢复,最终得到数字水印信息。
二、数字水印技术的应用数字水印技术不仅可以应用在版权保护上,也可以应用在信息隐藏和溯源等领域。
首先是版权保护方面,数字水印技术可以用来标识创作权并为版权所有者提供保护。
数字水印可以在数字音乐、电影、视频和游戏等娱乐产品中嵌入,以标示产品的来源和版权信息。
其次是信息隐藏方面,数字水印技术可以嵌入加密的消息或其他类型的信息,以提供标记或隐藏信息的方法。
最后是溯源方面,数字水印技术可以嵌入一些信息,以帮助识别或确定数据的来源和完整性。
三、数字水印技术的实现策略数字水印技术的实现需要解决许多困难,例如对交互性、假冒性和统计性攻击的容忍,并能够针对在数字水印图像中的对抗行为进行检测。
VC实现数字水印设计报告
计算机科学与技术学院信科专业综合实践设计报告专业:电子信息科学与技术《班级:信科07-4班设计题目: VC实现数字水印的加入与提取成员:姚万华指导教师:~2010年 10月 14日、课程设计指导教师评阅书指导教师评语:`)$[成绩:指导教师签字:年月日{【摘要】:当前,数字图像技术的主要研究热点之一是数字水印的应用。
本文介绍了LSB算法的思想,利用 VC技术对数字图像水印LSB算法进行实现,并总结LSB算法的利弊,提出了可行的改进措施。
》关键词:VC;图像处理;数字水印;LSB算法#一、前言 (9)背景 (9)/数字水印的现状 (10)数字水印的应用 (12)二、数字水印技术 (14)数字水印的起源、概念和基本原理 (14)数字水印的嵌入和提取 (14)三、数字水印的典型算法 (15)最低有效位算法(LSB) (16)Patchwork 算法 (16)<纹理块映射编码 (16)其他 (16)四、LSB算法的VC实现 (16)五、实验体会 (20)参考书目: (21)附录1:算法设计说明书 (21)附录二:主要原程序 (23)&*]一、前言)背景随着网络通信的普及,许多传统媒体内容都向数字化转变,并且在电子商务中即将占据巨大的市场份额,如mP3的网上销售,数字影院的大力推行,网上图片、电子书籍销售等等。
在无线领域,随着移动网络由第二代到第三代的演变,移动用户将能方便快速的访问因特网上数字媒体内容,基于有线或无线网络的数字媒体内容的影院即将是信息时代新的趋势。
但是,数字媒体内容的安全问题恰恰制约着信息化进程,虽然成熟的密码学可以解决安全传递和访问控制,但是一旦解密后,数字媒体内容便可以随意的被拷贝、传播,它给媒体内容制造商造成了巨大的损失;同时,密文信息的传递也容易引起攻击者的注意。
因此如何安全的传送信息就成了其中的关键,数字水印技术就成为开启这一难点的钥匙。
数字水印(digital water marking)是实现版权保护的有效办法,已成为多媒体信息安全研究领域的一个热点,也是信息隐藏技术研究领域的重要分支。
Matlab与VC联合编程在数字水印工程中的应用
Matlab与VC联合编程在数字水印工程中的应用车敏;张红梅【摘要】在软件研发过程中,为了缩短软件的研发周期,通常会借助Matlab提供的丰富的工具箱函数,但是基于Matlab开发的软件很难满足人性化用户界面的要求,为此要使用基于强大的图形界面编辑功能的VC开发环境.只有采用二者联合编程才能高效的完成软件的开发.采用传统的Matlab和VC联合编程方法因无法脱离Matlab的运行环境而仅适用于软件的试验阶段,而无法应用于工程开发中. 为了克服传统Matlab和VC联合编程方法的弊端,提出了一种可以脱离Matlab运行环境的VC与Matlab联合编程新方法,并已经成功应用数字水印工程的开发中的.【期刊名称】《现代电子技术》【年(卷),期】2010(033)024【总页数】3页(P55-57)【关键词】MAT文件;MEX文件;Matlab引擎;数字水印【作者】车敏;张红梅【作者单位】空军工程大学,理学院,陕西,西安,710051;空军工程大学,理学院,陕西,西安,710051【正文语种】中文【中图分类】TN911-340 引言Matlab是Matrix Laboratory的缩写,早期主要用于现代控制中复杂的矩阵、向量的各种运算。
时至今日,经过MathWorks公司各行业专家的不断完善,Matlab已经发展成为适合多学科,多种工作平台的大型软件。
在设计研究单位和工业部门,Matlab被广泛用于科学研究和解决各种具体问题[1]。
但是Matlab对界面的支持能力较差,所编写的软件不能脱离Matlab编程环境,所以仅用于前期试验性开发。
Visual C++(简称VC)是软件开发人员最常用的编程工具之一,具有强大的图形界面编程能力,而且代码执行效率高,运行稳定,目前被广泛应用于各行业工程的开发[2]。
数字水印技术是近几年发展起来的一项具有跨学科性质的新技术,通过向多媒体数据(如图像、声音、视频等)中添加某些图像、数字信息以达到文件真伪鉴别、版权保护等功能[3]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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色位图)。