关于Matlab数字水印

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Matlab数字水印相关的知识,希望对你有一定的参考价值。

Matlab数字水印哪有详细资料
免费的,谢谢

随着数字技术和计算机网络技术的迅速发展,数字化信息的传播和获取变得空前快捷和方便,促进了多媒体信息交流的发展。但是由于数字媒体易于存储、复制和传播的特点,使大量数字媒体在以合法形式进行传播的同时,经常遭遇非法复制与传播。而一些传统加密技术在数据传输中又不能有效地防止伪造及侵权行为 在这种形势下,作为传统加密技术的有效补充,数字水印技术(Digital Watermarking)应运而生。
在数字媒体应用日益广泛的同时,在相当长的一段时间,大部分的图文信息还将以印刷方式存在和传播。但是日益猖獗的假冒伪劣行为却给印刷品的防伪带来了新的挑战 在这种情况下 将具有高技术含量且制作成本低的数字水印技术用于印刷品的防伪是目前一个新的课题和方向。
数字水印是一种新的数字媒体保护技术,它是将特定的信息(如版权信息、序列号、公司标志、有意义的文本等)嵌入到图像、语音、视频等各种数字媒体中,以达到版权保护等目的。同时,这种信息的嵌入不影响主媒体的使用价值,不容易被人的知觉系统觉察且通过特定的恢复方法,可提取出来原来嵌入的信息。通过提取这些隐藏的信息 可以确认内容的创建者和购买者,检测其真实性、完整性。常见的在图像中嵌入数字水印可以视为在强背景(即原始图像)下叠加一个视觉上看不到的弱信号(水印)。由于人的视觉系统(Human Visual System,HVS)分辨率受到一定的限制 只要叠加信号的幅度低于HVS的对比度门限,HVS就无法感觉到信号的存在。因此 在HVS的对比度门限范围内,对原始图像做一定的改动(加入水印),就可达到在不改变视觉效果的情况下嵌入一些隐藏的信息。一般对数字水印有几个基本要求:①不可感知性;②可证明性:③鲁棒性:④安全性。
通用的数字水印模型包含两个阶段:水印的嵌入和水印的提取或检测。嵌入阶段的设计主要解决两个问题:①数字水印的生成。可以是一串伪随机数、数字标识、文本以及图像等,也可以是与作者有关的字符串、图标等信息经过加密产生:②嵌入算法。嵌入方案的目标是使数字水印在不可感知性和鲁棒性之间找到一个较好的折中。
检测阶段主要是设计一个相应于嵌入过程的检测算法。检测的结果是原水印(如字符串或图标等)或是基于统计原理的检验结果以判断水印存在与否,检测方案的目标是使错判与漏判的概率尽量小。为了增加去除水印的不可预测的难度, 目前大多数水印制作方案都在加入、提取时采用了密钥 只有掌握密钥的人才能读出水印。
数字水印技术有多种方法,根据数字水印加载方法的不同,可将数字水印分为空间域数字水印和变换域数字水印两大类。根据检测水印是否需要原始图像 可将数字水印技术分为私有水印技术、半私有水印技术和公开水印技术三类。
1.特殊要求
由于在印刷中必须对连续调图像进行加网以得到离散的半色调图像 用改变印版上单位面积内着墨量多少即网点数目来表示连续调图像的层次和颜色的变化 所以将数字水印技术应用于印刷品的防伪就必须考虑印刷中加网这一环节,即用于印刷品防伪的数字水印技术是基于半色调技术之上的。
除此之外,与在数字媒体中的应用相比,应用于印刷品防伪的数字水印除了以上提到的几个基本要求外,还要满足一些特殊的要求:
①视觉不可见性和机读性。表现在采用打印或印刷设备时,在各种分辨率下加入的水印,不能因分辨率的高低而使水印显现,同时它不影响原有印刷品的质量 只有通过特定的检测设备和计算机软件才可识别。
②抵抗色彩变换、文件格式变换在A/D和D/A转化过程中,数字水印算法需抵抗伽玛矫正和色彩失真 另外,图像在流通过程中,由于印刷品的老化也会产生色彩失真。同时也要能抵抗经常遇到图像文件格式(如BMP、TIFF、JPEG等)之间转换及常见的操作(旋转、剪切, 缩放等)。
③对印刷设备没有特殊要求.不改变印刷工艺流程.不增加印刷成本。
2.原理及算法
用于印刷品防伪的数字水印技术的原理与用于多媒体的数字水印技术的原理大致相同.只不过在水印的嵌入过程要考虑到加网.在水印的提取及检测过程要对印刷品图文信息进行扫描.在这个过程有一个模/数(A/D)转换过程。这就要求基于半色调的数字水印技术的算法在相应的嵌入和检测过程中必须考虑这些因素。其嵌入和检测过程如图1、2所示。
纵观以往数字水印在印刷品防伪方面的研究工作.可查阅资料并不多。现有的基于半色调图像的数字水印技术大致有以下几种:
①基于半色调图像的数字水印技术是将不可见的数字信息嵌入到一幅半色调图像中.通过扫描该半色调图像并实施一定的提取算法来获得嵌入的水印信息。其中的一种技术是使用两个不同的抖动矩阵来产生顺序抖动半色调图像.由于这两个不同的抖动矩阵所具有的不同统计特性.因此可以检测到水印是否存在。
②第二种技术是利用向量量化将水印嵌入到误差扩散半色调图像的最低有效位(LSB)上。
③第三种技术是在顺序抖动或误差扩散图像中.把水印数据隐藏在随机的位置.通过自套牢或成对套牢技术来改变这些随机位置的像素值来实现信息的隐藏(效果图如图3所示)。
④第四种技术是将水印数据隐藏在误差扩散图像里,使用误差扩散的方法来减轻因隐藏数据而带来的图像失真,以使图像获得良好的视觉效果。在上述方法中.尽管被隐藏的数据本身也是图像,但这些算法并没有提供直接在半色调图像上观察这些被隐藏的图像的方法。
⑤ 另一类技术是将被隐藏的可视图像嵌入两幅或多幅半色调图像中.当把这两幅图像进行叠合时.被隐藏的图像就可直接显现出来。其中的一种技术是运用随机网屏或共轭网屏来将被隐藏的信息嵌入到半色调图像中。因为共轭所具有的性质.当两幅半色调图像被叠合在一起时.被隐藏的信息将会呈现出来(其效果图如图4所示)。
⑥ 另一种技术是考虑噪声平衡误差扩散和交替使用不同的误差扩散核扩散的半色调数字水印技术。
⑦还有人使用一种基于半色调技术的人眼视觉系统模型.提出了直接二进制位搜索(Di rect Bina rySearch. DBS)的方法。DBS用于半色调图像的设计.以实现最优化的视觉效果质量与水印的检测。
3.结果讨论
我们用Matlab 6.5编程模拟实现了256级灰度图像lena (图3一a)的误差扩散加网(使用的是Jarvis—Nike误差扩散核)得到半色调图像(图3 一b),并使用不同的数字水印嵌入算法分别得到了含有水印信息的半色调图像:如图3一c和图4一b。
图3一c中使用的水印嵌入技术是把水印数据隐藏在误差扩散图像中随机的位置(位置由密钥决定).通过自套牢来改变这些随机位置的像素值来实现信息的隐藏。所得到的含有水印的半色调图像与原Iena半色调图像图3一b相比较.可以看到相当于在原图中加入一些噪声.当嵌入的水印信息不大.在HVS的对比度限定范围内时.是不会改变其视觉效果的。图4一b中使用的水印嵌入技术则是根据原半色调图像和水印图像的特征将水印信息嵌入到原半色调图像得到含有水印信息的半色调图像(图4一b).当将所得的图像与原来的半色调图像叠加时.就可以再现水印图像。
在实验条件下.将所得到的图像打印、扫描、预处理后根据对应的水印提取算法.可以分别提取出对应的水印图像。在实验中.水印除了使用图中的二值图片外.我们还使用了文本、武汉大学校徽等都得到了满意的结果。
美国Digimarc公司率先在1995年推出的媒体桥(mediab rldge)技术就以插件形式集成到Phot0 Sh0P和Corel Draw图像处理软件中。随后,又推出了开拓访问Inte rnet的一条新途径—— 通过在杂志广告、产品包装、目录甚至各类票据中隐藏不可见的数字水印。用户将这些传统媒体放在网络摄像机(web came ra)前,就可以直接将用户带到与印刷图像内容相关联的网络站点,并在计算机上显示出产品的相关信息。英国Signum公司推出的VerlData系列软件,用不可见的水印阻止商标的盗版以及重要文档的伪造、盗版和未授权的更改。瑞士AlpVision公司专为打印文档设计的SafePape r软件则可嵌在MicrosoftWord软件中。它将水印信息(如商标 专利 名字 金额等)隐藏到打印纸内.以此来证明该文档的真伪。日本的I BM东京研究实验室提出了用数据隐藏作为解决方案来鉴定数字化照片的来源.证实数字化照片的完整性.判断照片是否被篡改以及定位篡改的地方。
我国的有关部门研究人员正在加紧数字水印印刷防伪技术的研究工作.大连理工大学研究的数字水印防伪印刷技术可以实现在印刷图像中加入数字水印.并且可以通过扫描仪和专用软件完成印刷图像中数字水印的自动检测。上海阿须数码技术有限公司也推出了有自主知识产权的图像数字水印软件A S S u reImageMa rk 2.0:成都宇飞信息工程有限责任公司研究的印刷打印数字水印技术已得到商业化应用.并于2004年4月1日获得”国家科技型中小型企业创新基金”的资助。标志着我国数字水印技术的研究已经进入实质性阶段,其研发与应用水平与国际先进水平的差距逐步缩小。
最为一种较新的技术—— 数字水印在印刷领域中的应用是一个新的方向.我们相信.数字水印技术将在防伪印刷领域发挥越来越大的作用.并会带来可观的经济效益和社会效益。但是我们应同时看到目前市场上用于印刷品防伪的数字水印产品在技术上还不成熟.仍有大量的研究工作要做。
参考技术A 百度里面起看嘛

您好,看到您的关于matlab的水印程序,您有没有相应的水印提取程序

我是刚开始接触这方面,不是很懂,如能赐教,万分感激!

参考技术A function dwtgl
clear all
clc;
%保存开始时间
start_time=cputime;
figure(1);
%读出原始图像
subplot(2,2,1);
input=imread('image.bmp');
imshow(input);
title('原始图像');
%读出水印
subplot(2,2,2);
water=imread('watermark.bmp');
imshow(water);
title('水印');
%三色分离
input=double(input);
water=double(water);
inputr=input(:,:,1);
waterr=water(:,:,1);
inputg=input(:,:,2);
waterg=water(:,:,2);
inputb=double(input(:,:,3));
waterb=double(water(:,:,3));
%系数r大,增加鲁棒性,r小增加透明性
r=0.04;
%水印R的分解
[Cwr,Swr]=wavedec2(waterr,1,'haar');
%图像R的分解
[Cr,Sr]=wavedec2(inputr,2,'haar');
%水印的嵌入
Cr(1:size(Cwr,2)/16)=...
Cr(1:size(Cwr,2)/16)+r*Cwr(1:size(Cwr,2)/16);
k=0;
while k<=size(Cr,2)/size(Cwr,2)-1
Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+...
(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/4+...
k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+...
r*Cwr(1+size(Cwr,2)/4:size(Cwr,2)/2);
Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+...
(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/2+...
k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)+...
r*Cwr(1+size(Cwr,2)/2:3*size(Cwr,2)/4);
Cr(1+3*size(Cwr,2)/4+k*size(Cwr,2)/4:3*size(Cwr,2)/4+...
(k+1)*size(Cwr,2)/4)=Cr(1+3*size(Cr,2)/4+...
k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+...
r*Cwr(1+3*size(Cwr,2)/4:size(Cwr,2));
k=k+1;
end;
Cr(1:size(Cwr,2)/4)=Cr(1:size(Cwr,2)/4)+r*Cwr(1:size(Cwr,2)/4);
g=0.02;
%水印G的分解
[Cwg,Swg]=WAVEDEC2(waterg,1,'haar');
%图像G的分解
[Cg,Sg]=WAVEDEC2(inputg,2,'haar');
%水印的嵌入
Cg(1:size(Cwg,2)/16)=...
Cg(1:size(Cwg,2)/16)+g*Cwg(1:size(Cwg,2)/16);
k=0;
while k<=size(Cg,2)/size(Cwg,2)-1
Cg(1+size(Cg,2)/4+k*size(Cwg,2)/4:size(Cg,2)/4+...
(k+1)*size(Cwg,2)/4)=Cg(1+size(Cg,2)/4+...
k*size(Cwg,2)/4:size(Cg,2)/4+(k+1)*size(Cwg,2)/4)+...
g*Cwg(1+size(Cwg,2)/4:size(Cwg,2)/2);
Cg(1+size(Cg,2)/2+k*size(Cwg,2)/4:size(Cg,2)/2+...
(k+1)*size(Cwg,2)/4)=Cg(1+size(Cg,2)/2+...
k*size(Cwg,2)/4:size(Cg,2)/2+(k+1)*size(Cwg,2)/4)+...
g*Cwg(1+size(Cwg,2)/2:3*size(Cwg,2)/4);
Cg(1+3*size(Cg,2)/4+k*size(Cwg,2)/4:3*size(Cg,2)/4+...
(k+1)*size(Cwg,2)/4)=Cg(1+3*size(Cg,2)/4+...
k*size(Cwg,2)/4:3*size(Cg,2)/4+(k+1)*size(Cwg,2)/4)+...
g*Cwg(1+3*size(Cwg,2)/4:size(Cwg,2));
k=k+1;
end;
Cg(1:size(Cwg,2)/4)=Cg(1:size(Cwg,2)/4)+g*Cwg(1:size(Cwg,2)/4);
b=0.16;
%水印B的分解
[Cwb,Swb]=WAVEDEC2(waterb,1,'haar');
%图像B的分解
[Cb,Sb]=WAVEDEC2(inputb,2,'haar');
%水印的嵌入
Cb(1:size(Cwb,2)/16)+b*Cwb(1:size(Cwb,2)/16);
k=0;
while k<=size(Cb,2)/size(Cwb,2)-1
Cb(1+size(Cb,2)/4+k*size(Cwb,2)/4:size(Cb,2)/4+...
(k+1)*size(Cwb,2)/4)=Cb(1+size(Cb,2)/4+...
k*size(Cwb,2)/4:size(Cb,2)/4+(k+1)*size(Cwb,2)/4)+...
g*Cwb(1+size(Cwb,2)/4:size(Cwb,2)/2);
Cb(1+size(Cb,2)/2+k*size(Cwb,2)/4:size(Cb,2)/2+...
(k+1)*size(Cwb,2)/4)=Cb(1+size(Cb,2)/2+...
k*size(Cwb,2)/4:size(Cb,2)/2+(k+1)*size(Cwb,2)/4)+...
b*Cwb(1+size(Cwb,2)/2:3*size(Cwb,2)/4);
Cb(1+3*size(Cb,2)/4+k*size(Cwb,2)/4:3*size(Cb,2)/4+...
(k+1)*size(Cwb,2)/4)=Cb(1+3*size(Cb,2)/4+...
k*size(Cwb,2)/4:3*size(Cb,2)/4+(k+1)*size(Cwb,2)/4)+...
b*Cwb(1+3*size(Cwb,2)/4:size(Cwb,2));
k=k+1;
end;
Cb(1:size(Cwb,2)/4)=Cb(1:size(Cwb,2)/4)+b*Cwb(1:size(Cwb,2)/4);
%图像的重构
inputr=WAVEREC2(Cr,Sr,'haar');
inputg=WAVEREC2(Cg,Sg,'haar');
inputb=WAVEREC2(Cb,Sb,'haar');
%三色的叠加
temp=size(inputr);
pic=zeros(temp(1),temp(2),3);
for i=1:temp(1);
for j=1:temp(2);
pic(i,j,1)=inputr(i,j);
pic(i,j,2)=inputg(i,j);
pic(i,j,3)=inputb(i,j);
end
end
%转化为uint8
output=uint8(round(pic));
imwrite(output,'watermarked.bmp','bmp');
%显示时间
elapsed_time=cputime-start_time,
%输出结果
%subplot(2,2,3);
figure(3);
imshow(output);
title('水印图像');
%保存开始时间
start_time=cputime;
figure(1);
%读出原始图像
subplot(1,2,1);
input=imread('image.bmp');
imshow(input);
title('原始图像');
%读出水印图像
subplot(1,2,2);
watermarked_image=imread('watermarked.bmp');
imshow(watermarked_image,[]);
title('水印图像');
%三色分离
input=double(input);
watermarked_image=double(watermarked_image);
inputr=input(:,:,1);
watermarked_imager=watermarked_image(:,:,1);
inputg=input(:,:,2);
watermarked_imageg=watermarked_image(:,:,2);
inputb=input(:,:,3);
watermarked_imageb=watermarked_image(:,:,3);
%水印图像R的分解
[Cwr,Swr]=WAVEDEC2(watermarked_imager,2,'haar');
%图像R的分解
[Cr,Sr]=WAVEDEC2(inputr,2,'haar');
%水印图像G的分解
[Cwg,Swg]=WAVEDEC2(watermarked_imageg,2,'haar');
%图像G的分解
[Cg,Sg]=WAVEDEC2(inputg,2,'haar');
%水印图像B的分解
[Cwb,Swb]=WAVEDEC2(watermarked_imageb,2,'haar');
%图像B的分解
[Cb,Sb]=WAVEDEC2(inputb,2,'haar');
%提取水印的小波系数
r=0.04;
for k=0:3
whr(k+1,:)=Cwr(1+size(Cwr,2)/4+k*size(Cwr,2)/16:...
size(Cwr,2)/4+(k+1)*size(Cwr,2)/16)-...
Cr(1+size(Cr,2)/4+k*size(Cr,2)/16:...
size(Cr,2)/4+(k+1)*size(Cr,2)/16);
wvr(k+1,:)=Cwr(1+size(Cwr,2)/2+k*size(Cwr,2)/16:...
size(Cwr,2)/2+(k+1)*size(Cwr,2)/16)-...
Cr(1+size(Cr,2)/2+k*size(Cr,2)/16:...
size(Cr,2)/2+(k+1)*size(Cr,2)/16);
wdr(k+1,:)=Cwr(1+3*size(Cwr,2)/4+k*size(Cwr,2)/16:...
3*size(Cwr,2)/4+(k+1)*size(Cwr,2)/16)-...
Cr(1+3*size(Cr,2)/4+k*size(Cr,2)/16:...
3*size(Cr,2)/4+(k+1)*size(Cr,2)/16);
end
whr=(whr(1,:)+whr(2,:)+whr(3,:)+whr(4,:))/(4*r);
wvr=(wvr(1,:)+wvr(2,:)+wvr(3,:)+wvr(4,:))/(4*r);
wdr=(wdr(1,:)+wdr(2,:)+wdr(3,:)+wdr(4,:))/(4*r);
war=(Cwr(1:size(Cwr,2)/16)-Cr(1:size(Cr,2)/16))/r;
g=0.02;
for k=0:3
whg(k+1,:)=Cwg(1+size(Cwg,2)/4+k*size(Cwg,2)/16:...
size(Cwg,2)/4+(k+1)*size(Cwg,2)/16)-Cg(1+...
size(Cg,2)/4+k*size(Cg,2)/16:...
size(Cg,2)/4+(k+1)*size(Cg,2)/16);
wvg(k+1,:)=Cwg(1+size(Cwg,2)/2+k*size(Cwg,2)/16:...
size(Cwg,2)/2+(k+1)*size(Cwg,2)/16)-Cg(1+...
size(Cg,2)/2+k*size(Cg,2)/16:...
size(Cg,2)/2+(k+1)*size(Cg,2)/16);
wdg(k+1,:)=Cwg(1+3*size(Cwg,2)/4+k*size(Cwg,2)/16:...
3*size(Cwg,2)/4+(k+1)*size(Cwg,2)/16)-...
Cg(1+3*size(Cg,2)/4+k*size(Cg,2)/16:...
3*size(Cg,2)/4+(k+1)*size(Cg,2)/16);
end
whg=(whg(1,:)+whg(2,:)+whg(3,:)+whg(4,:))/(4*g);
wvg=(wvg(1,:)+wvg(2,:)+wvg(3,:)+wvg(4,:))/(4*g);
wdg=(wdg(1,:)+wdg(2,:)+wdg(3,:)+wdg(4,:))/(4*g);
wag=(Cwg(1:size(Cwg,2)/16)-Cg(1:size(Cg,2)/16))/g;
b=0.08;
for k=0:3
whb(k+1,:)=Cwb(1+size(Cwb,2)/4+k*size(Cwb,2)/16:...
size(Cwb,2)/4+(k+1)*size(Cwb,2)/16)-...
Cb(1+size(Cb,2)/4+k*size(Cb,2)/16:...
size(Cb,2)/4+(k+1)*size(Cb,2)/16);
wvb(k+1,:)=Cwb(1+size(Cwb,2)/2+k*size(Cwb,2)/16:...
size(Cwb,2)/2+(k+1)*size(Cwb,2)/16)-...
Cb(1+size(Cb,2)/2+k*size(Cb,2)/16:...
size(Cb,2)/2+(k+1)*size(Cb,2)/16);
wdb(k+1,:)=Cwb(1+3*size(Cwb,2)/4+k*size(Cwb,2)/16:...
3*size(Cwb,2)/4+(k+1)*size(Cwb,2)/16)-...
Cb(1+3*size(Cb,2)/4+k*size(Cb,2)/16:...
3*size(Cb,2)/4+(k+1)*size(Cb,2)/16);
end
whb=(whb(1,:)+whb(2,:)+whb(3,:)+whb(4,:))/(4*b);
wvb=(wvb(1,:)+wvb(2,:)+wvb(3,:)+wvb(4,:))/(4*b);
wdb=(wdb(1,:)+wdb(2,:)+wdb(3,:)+wdb(4,:))/(4*b);
wab=(Cwb(1:size(Cwb,2)/16)-Cb(1:size(Cb,2)/16))/b;
%重构水印图像
cwr=[war,whr,wvr,wdr];
swr(:,1)=[sqrt(size(war,2)),sqrt(size(war,2)),2*sqrt(size(war,2))];
swr(:,2)=[sqrt(size(war,2)),sqrt(size(war,2)),2*sqrt(size(war,2))];
wr=waverec2(cwr,swr,'haar');
cwg=[wag,whg,wvg,wdg];
swg(:,1)=[sqrt(size(wag,2)),sqrt(size(wag,2)),2*sqrt(size(wag,2))];
swg(:,2)=[sqrt(size(wag,2)),sqrt(size(wag,2)),2*sqrt(size(wag,2))];
wg=waverec2(cwg,swg,'haar');
cwb=[wab,whb,wvb,wdb];
swb(:,1)=[sqrt(size(wab,2)),sqrt(size(wab,2)),2*sqrt(size(wab,2))];
swb(:,2)=[sqrt(size(wab,2)),sqrt(size(wab,2)),2*sqrt(size(wab,2))];
wb=waverec2(cwb,swb,'haar');
%三色叠加
temp=size(wr);
pic=zeros(temp(1),temp(2),3);
for i=1:temp(1);
for j=1:temp(2);
pic(i,j,1)=wr(i,j);
pic(i,j,2)=wg(i,j);
pic(i,j,3)=wb(i,j);
end
end
output=uint8(round(pic));
%转化为uint8
watermark_image_uint8=uint8(output);
imwrite(watermark_image_uint8,'extract.bmp','bmp');
figure(2);
subplot(1,2,1);
imshow(watermark_image_uint8);
title('提取水印');
subplot(1,2,2);
imshow('watermark.bmp');
title('原始水印');
%显示时间
elapsed_time=cputime-start_time,

以上是关于关于Matlab数字水印的主要内容,如果未能解决你的问题,请参考以下文章

这是个matlab关于添加水印的程序,帮忙看看错在哪

关于opencv对图片添加水印

数字水印基于matlab DFT数字水印嵌入提取攻击含Matlab源码 2320期

数字水印基于matlab DFT数字水印嵌入提取攻击含Matlab源码 2320期

数字水印基于matlab混沌的变换域图像数字水印嵌入提取攻击(含相关性)含Matlab源码 2323期

数字水印基于matlab混沌的变换域图像数字水印嵌入提取攻击(含相关性)含Matlab源码 2323期