❶ dwt数字水印中频嵌入位置 谁能告诉我下,是进行3层小波变换的。怎么嵌入啊。。。
中频你所说的,其实就是对dwt小波的相关系统的大小 ,是中间的那些值,也可以是对图像进行3层分解后的,选择第2次分解中的得到的值,一般人们会把信息嵌入到后者之中,方法:就是对你的水印进行量化,新系数=原系数+a*水印量化值;
有什么问题在问我。
❷ 基于DCT域数字水印有几种方法 , 基于小波域数字水印方法有几种
DCT域水印算法
基于DCT的水印算法的最大优点就是其与国际压缩标准(JPEG}MPEG,H.261/263)兼容,
水印的嵌入和检测都能够在数据的压缩域中直接进行。但在压缩域中直接进行水印嵌入和
检测所带来的问题是:在量化后的DCT系数上添加的水印(系数的变换)可能在解压缩的过
程中被放大,从而引起水印和图像的失真。好的水印算法必须综合水印的嵌入和图像压缩
技术使失真维持到最小。
Cox等提出在图像全局DCT变换域中除Dc分量外系数幅值最大的n个系数中嵌入水印信
息,由于图像的主要能量均集中在图像低频区域(故低频区域具有较大的系数幅值),因此
相当于在图像的重要分量中嵌入水印信息。另一方面,人类视觉系统对图像的低频、高频
能量比较敏感,而对图像的高频区域变化不敏感,一般的处理都保留图像的重要分量(低
频区域),而改变非重要分量(高频区域),所以水印信息对图像处理的鲁棒性较好。
目前,大部分的DCT水印方法采用的是基于DCT的8x8图像块。E.Koch和J.Zhao从所有
图像块中随机选取一系列图像块,对其进行8x8分块DCT变换,然后将二进制的水印序列添
加到变换矩阵的中频系数来实现水印的嵌入,同时他们在水印嵌入时引入了密钥机制,实
现了水印技术与密码技术的结合:A.GBors和I.Pitas基于高斯网状分类器来抽取图像块,
采用两种方法来添加水印。一种是通过在选定图像块的DCT变换的中频系数中添加线性限
制来加入水印:另一种是在DCT系数中定义一个固定的圆形区域来进行水印嵌入,这种方法
不需要原始图像就可以进行水印的检测。
C.T.Hsu和J.L.wu等071利用可视化模型,在8x8分块DCT系数中按Zig—Zag扫描顺序选择
4x4个中频系数组成小块,通过比较相邻两个小中频系数块中相应位置上系数的大小进行
标志图像水印的嵌入。Bami等从整幅图像的DCT系数中选择中频系数作为水印的嵌入位置。
这些算法选择DCT的中频或低频系数对水印的不可见性和鲁棒性加以折衷,难以抵抗
压缩编码及其他一些图像处理的攻击,而且水印的不可见性极大的依赖于不同图像的特
性。并且他们无一例外地将Dc分量排除在外。黄继武等指出DC分量比任何AC分量都具有更
大的感觉容量,从鲁棒性出发,Dc分量最适合用来嵌入水印,结合图像照度掩蔽特性和纹
理掩蔽特性可得到不可见性和鲁棒性较好的水印算法。
dwt水印算法
自从小波技术成为MPEG-4及JPEG--2000压缩标准的核心技术以来,基于小波域的水印
算法越来越多。在小波域嵌入水印的原因是:可以防止由于JPEG-2000有损压缩而造成的水
印消除:可以利用信源编码领域对图像失真的可见性研究成果来控制水印的嵌入位置和强
度:可以实现在压缩域直接嵌入水印。此外,利用小波多分辨率分析可以更好地控制水印
在宿主图像中的分布,更好地解决鲁棒性和可见性之间的矛盾。
❸ 求matlab代码 要求基于DWT的数字水印嵌入 水印为二维码 要求水印嵌入提取 并且压缩 剪切 加噪后再提取
clc
[a type]=myfunction(0.7,0);/a嵌入强度,type攻击类型
x=imread('E:\ori1.bmp');
subplot(2,3,1);
image(x);
title('初始待加入水印图像');
w=imread('E:\water1.bmp');
subplot(2,3,2);
imshow(w);
title('待用水印图像');
w=w/255;
[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 对原始图像x进行小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
[width,height,cnums]=size(w);% w为水印序列
for i=1:width
for j=1:height
waterdata(i,j)=double(cD3(i,j))+a*double(w(i,j));
end
end
cD3=waterdata;
X3=idwt2(cA3,cH3,cV3,cD3,'db1'); % 小波反变换,重构图像
X2=idwt2(X3,cH2,cV2,cD2,'db1');
Y=idwt2(X2,cH1,cV1,cD1,'db1');
subplot(2,3,3);
image(Y); % 显示水印结果图像
title('加入水印后的图像');
if type==0
A='无攻击'
Y=Y;
end
if type==1
A='放大2倍后的图像'
%(1)放大两倍的操作,(当然提取之前要先缩小两倍)
xxx1=imresize(Y,2,'bicubic');
xxx2=imresize(xxx1,1/2,'bicubic');
Y= double(xxx2);
end
if type==2
%(2)缩1/2
A='缩1/2的图像'
xxx1=imresize(Y,2/4,'bicubic');
xxx2=imresize(xxx1,4/2,'bicubic');
Y= double(xxx2);
end
%(3) 3×3空域低通滤波
if type==3
A='3×3空域低通滤波攻击'
B=(1/9)*ones(3,3);
xxx2=filter2(B,Y);
Y= double(xxx2);
end
%(4) 4领域平均
if type==4
A='4领域平均攻击'
B=[0 1 0;1 0 1;0 1 0]*(1/4);
xxx2=filter2(B,Y);
Y= double(xxx2);
end
%(5) 3*3窗口中值滤波:
if type==5
A='3*3窗口中值滤波攻击'
xxx2=medfilt2(Y);%默认3*3
Y= double(xxx2);
end
%%(6)裁减1/16
if type==6
A='裁减1/16攻击'
for i=128-44:128+45
for j=128-45:128+44
Y(i,j)=0;
end
end
Y=double(Y);
end
%(7) 高斯噪声的情况
if type==7
A='高斯噪声攻击 强度=0.01'
Y=imnoise(uint8(round(Y)),'gaussian',0,0.01);
end
%(8) JPEG压缩
if type==8
A='JPEG压缩,强度=10'
imwrite(uint8(round(Y)),'jpeg_n.jpg','jpg','Quality',10);%按压缩因子Quality的比例,将J2压缩到jpeg_n.jpg中。
[Y,map]=imread('jpeg_n.jpg','jpg');
end
%(9) 其他为无攻击
if type>8
A='无攻击'
Y=Y;
end
subplot(2,3,4);
image(Y); % 显示攻击后水印结果图像
title(A);
% 水印提取部分
[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 对原始图像进行三级小波分解
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
olddata=cD3;
[ccA1,ccH1,ccV1,ccD1]=dwt2(Y,'haar');% 对含水印图像进行三级小波分解
[ccA2,ccH2,ccV2,ccD2]=dwt2(ccA1,'haar');
[ccA3,ccH3,ccV3,ccD3]=dwt2(ccA2,'haar');
[width,height]=size(ccD3);
newdata=ccD3;
waterdata=zeros(width,height);
for i=1:width
for j=1:height
watermark(i,j)=(double(newdata(i,j))-double(olddata(i,j)))/a; %提取算法
end
end
watermark=watermark*255;
subplot(2,3,5);
imshow(watermark);
title('提取结果');
原图像512*512 水印64*64
函数声明为function [a type]=myfunction(a,type)
❹ 帮忙解释一段基于DWT的数字水印的MATLAB代码
a是把图像做小波分解后的低频分量再做一次小波分解的结果。
c是把a中的高频分量减掉a的平均值得到的结果。这样减的目的是使得c中的数值相对于0基本保持平均。
s是c中数值的几何平均值,其目的是根据图像的特点,达到自适应的嵌入强度。
C就是把c加了水印的系数了。
同志,在这里能碰到搞水印的真是不容易啊……
以上。
专业路过的老狼
❺ 请问基于DWT的图像数字水印算法和基于DCT的图像数字水印算法哪个简单点
DCT 比较流行而且算法比较简单
❻ matlab DWT数字水印程序
首先,不知道你会不会用Matlab。如果,你会用,应该有一个简单的DWT水印嵌入程序了。
读取图片,DWT变换着都不用说了吧?
有个不太明白的地方,就是,预处理是在什么时候做?在原图片上做完后,在做DWT变换后嵌入?
那么,这个字符串的信息量与原图信息量一样多。水印效果就。。。。。。
如果要嵌入,也要与原图一样,做DWT变换。不然,嵌入信息太多了。如果这样做了,就和后一种嵌入方法一样了。
也就是,先做DWT变换,假设最后DWT变换后的4个图片为A,B,C,D.
A图不动,B和C可嵌入,D图压缩就没了.所以,A图做直方图处理,然后与水印一起嵌入到,B和C图.
你要求里面,直方图压缩到[N,255-N]。N=G/2;?
直方图灰度范围[N,255-N],我们设定:
Oimg=A图;
WMKimg=水印;
Zimg=直方图调整后的图片;%%也就是说,色数范围是[N,255-N].
也就是说,[0,255]的图片,现在要用[N,255]的灰色度来显示。(这个直方图变化直接可以做出来)
分析到这里之后,就比较容易了。
Wimg=Oimg与Zimg差值矩阵。
然后,Wimg和WMKimg按照随机密钥做处理,嵌入就可以了
最上面的是A图.
❼ matlab编程实现一种简单的数字水印嵌入与提取方法
DCT嵌入水印图片与DWT是擦不多的。在Matlab上直接用函数的话值是一样的,应该说DWT包含DCT。下面我说一下嵌入过程,程序就不写了。网上很多的。给你一个嵌入思路。
DWT方法。原图大小为(512,512)嵌入图片大小为(64,64)
嵌入:
读取原图片。
读取水印图片。
原图片要处理为灰图。
水印图片要处理为2值图。
生成伪随机乱数(记住是怎么生成的,提取时用到)。
随机乱数做成2值图K与水印图生成密钥WK的2值图(方法有很多种)。
原图片做3次DWT处理(Matlab里函数是dwt2)得到图片DA,DB,DC,DD。
取出DB或DC,或者DB,DC都用上,设一个嵌入强度Q,与密钥K一起嵌入到DB,DC中(方法有很多种)。
将嵌入后的DB,DC与没有嵌入的DA,DD一起(DA,DB,DC,DD顺序不要错了)进行反DWT处理。
得到嵌入水印后的图片进行保存。
提取:
读取嵌入水印后的图片。
嵌入水印后的图片做3次DWT,并得到DA,DB,DC,DD。
定义Q(嵌入时的强度,比如5)。
生成嵌入水印时的伪随机乱数并做成2值图K。
取出,嵌入水印的成分(嵌入到DB的话取出DB,两个都用了就两个都取出,在这里用DB代替)。
进行嵌入时的反计算。
提取后的水印图片进行保存。
❽ 一种基于DWT的非自适应数字水印算法及其MATLAB实现
你这个很简单啊,提取时有原始图像,在图片在网上搜索《lena图像》应该能搜到。
至于水印图,自己可以用画图工具,做一个32x32的,在matlab上处理一下做成2值图。
至于代码部分,开始段,[cA1,cH1,cV1,cD1]=dwt2(x,'db1') % x 是原图处理过的灰度图。
这就没什么了啊。已经都告诉你了。
流程是这样的。
嵌入过程:
读取原图。
对原图做灰度处理。
读取水印。
对水印图做2值处理。
对灰度图做3次DWT。
设置嵌入强度。
根据嵌入算法将水印嵌入到需要的部分。
将嵌入后的部分,替换原来的部分后做IDWT。
提取过程:
读取原图,做3次DWT。
读取嵌入水印的图片,做3次DWT。
取出原来嵌入的部分,和原图为嵌入的部分根据算法提取水印。
大体是这样,奉劝你一句,不要抄他的,这个算法很小白,抄也要抄有前途的啊。这个很白痴啊。嵌入水印在[cA3,cH3,cV3,cD3]中,哪有嵌入到cD3中的?白痴啊。一般选择嵌入也是选中间的cH3或cV3或这两个都选。还有,提取时还需要原图片,很无语了,需要原图片还需要做什么别的算法吗?简单的加减乘除就搞定了。里面还添加了for运算,matlab里for的运算速度是最慢了。