1.想找到一些关于基于DCT变换域的数字水印算法的资料
较早利用分块DCT的水印技术是Koch .E、Zhao.J的文章[1],他们的水印方案是用一个密钥随机的选择图像的一些分块,在频域的中频上稍稍改变一个三元组来隐藏二进制序列信息。这种方法对有损压缩和低通滤波是稳健的。Cox等[2]提出了著名的基于图像全局变换的数字水印技术,该方案对整个图像作离散余弦变换(DCT),然后将水印嵌入到预先设定的低频分量中,水印信号由高斯分布的实数序列组成,算法不仅在视觉上具有不可察觉性,而且稳健性也非常好,可经受JPEG压缩、滤波、剪切等攻击。Barni等[3]提出一种利用HVS掩蔽特性的基于DCT的水印算法,在水印嵌入阶段,对 的图像进行 的DCT变换,对DCT系数按Zig-Zag扫描重新排列为一维向量,留下向量中开始的L个系数不作修改,对第L个系数后面的M个系数进行修改以嵌入水印。黄继武等人[4] 在对DCT系数DC和AC分量的定性和定量分析的基础上,指出DC分量比AC分量更适合嵌入水印,嵌入DC分量的水印具有更好的稳健性,并提出了一个利用DC分量的自适应算法。
以上算法至少有以下两个缺点:①在水印提取过程中使用了原始图像,这一点在实时的网络环境中很难做到;②只能给出水印存在有无的回答,在许多应用场合要求水印是有意义的,如一个二维图像(商标、印鉴等)。显然,这种有意义的水印所包含的信息量、可感知性、可辩识性及保密性,是无意义的伪随机噪声所不能比拟的。
本文在研究了前人算法的基础上,提出了一个利用块分类的DCT域自适应扩频图像水印算法,嵌入的水印是一个可视二值图像。用两个不相关的伪随机序列分别代表水印信息中的0和1,从而达到扩频的目的,将扩频后的水印信号,嵌入到分块DCT域的中低频段系数中。在嵌人过程中充分考虑到了局部图像的复杂度,能够自适应地调整嵌人强度,水印检测算法不需要原始图像,实现了盲检测。仿真实验表明:图像经过JPEG有损压缩、低通与中值滤波、剪切等图像处理操作后仍是稳健的。
2.DCT域图像数字水印算法
%嵌入水印的程序代码
clear
clc
M =512;%原图像长度
N =64;%水印图像长度
K =8;
I=zeros(M,M);J=zeros(N,N);BLOCK=zeros(K,K);
%显示原图像
subplot(2,3,1);
I=imread('liftingbody.png','png');imshow(I);title('原始公开图像');
%显示水印图像
subplot(2,3,2);
J=imread('shuiyin.bmp','bmp');imshow(J);title ('水印图像');
%水印嵌入
for p=1:N
for q=1:N
x=(p-1)*K+1; y=(q-1)*K+1;
BLOCK =I(x:x+K-1,y:y+K-1);BLOCK=dct2(BLOCK);
if J(p,q)==0
a=-1;
else
a=1;
end
BLOCK(1,1)=BLOCK(1,1)*(1+a*0.03);BLOCK=idct2(BLOCK);
I(x:x+K-1,y:y+K-1)=BLOCK;
end
end
%显示嵌入水印后的图像
subplot(2,3,3);
imshow(I);title('嵌入水印后的图像');
imwrite(I,'watermarked.bmp','bmp');
%从嵌入水印的图像中提取水印
I=imread('liftingbody.png','png');
J=imread('watermarked.bmp','bmp');
J=imnoise(J,'gaussian',0,0.01);
subplot(2,3,4);imshow(J,[]);title('加入高斯噪声');
for p=1:N
for q=1:N
x=(p-1)*K+1;
y=(q-1)*K+1;
BLOCK1 =I(x:x+K-1,y:y+K-1);
BLOCK2 =J(x:x+K-1,y:y+K-1);
BLOCK1=dct2(BLOCK1);
BLOCK2=dct2(BLOCK2);
a = BLOCK2(1,1)/BLOCK1(1,1)-1;
if aW(p,q)=0;
else
W(p,q)=1;
end
end
end
%显示提取的水印
subplot(2,3,5);
imshow(W);
title('从含水印图像中提取的水印');
至于分析算法对噪声攻击的抵抗性能.你需要计算PSNR和相关系数NC就可以了
3.谁有DCT算法,数字水印提取和嵌入的程序?
M=256;%原图像长度
N=32;%水印图像长度
K=8; %图像分块大小
I=zeros(M,M);%创建一个零矩阵,用于存放载体图像
J=zeros(N,N); %创建一个零矩阵,用于存放水印图像
BLOCK=zeros(K,K);%创建一个零矩阵,用于存放图像分块
%显示水印图像
subplot(1,8,2);
J=imread('14','bmp'); %读入水印图像
imshow(J); %显示水印图像
title('水印图像');
%显示原图像
subplot(1,3,2);
I=imread('11','bmp'); %读入原始图像
imshow(I); %显示原始图像
title('原始公开图像');
%嵌入水印
tem=1;%创建变量tem,没用
for p=1:N%水印图像行循环
for q=1:N%水印图像列循环
x=(p-1)*K+1; %x为载体图像行坐标
y=(q-1)*K+1; %y为载体图像列坐标
BLOCK=I(x:x+K-1,y:y+K-1); %BLOCK为载体图像I的分块,分块大小为K*K,
%初始值为I(0:K-1,0:K-1)
BLOCK=dct2(BLOCK);%对BLOCK进行二维DCT变换,得到新的BLOCK即%DCT系数矩阵BLOCK
if J(p,q)==0%如果水印图像的第(p,q)个像素为0
a=-1;%嵌入参数为-1
else
a=1; %若如果水印图像的第(p,q)个像素为1嵌入参数为1
end
BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01); %对载体图像的分块的DCT系数矩阵
%BLOCK
BLOCK=idct2(BLOCK);%对DCT系数矩阵进行反变换,得到嵌入水印后的载体
%图像分块BLOCK
I(x:x+K-1,y:y+K-1)=BLOCK;%用嵌入水印后的图像分块BLOCK代替载体图像
%的对应分块
End%水印图像列循环结束
End%水印图像行循环结束
%显示嵌入水印后的图像
subplot(1,3,3);
imshow(I);%显示嵌入水印后图像
title('嵌入水印后的图像');
imwrite(I,'embedded.bmp','bmp');%将嵌入水印后图像写成bmp文件
够详细吧,希望对你有用。
4.毕业论文数字图像的水印嵌入研究,要提出算法吗
现在做水印已经做得很多了,基本能提出新的算法对一个毕业论文来说比较难了,我个人认为,主要是参照别人的算法,如果学校要求严格的话,自己努力改进一点,就出来自己的东西了,水印嵌入和提取的算法程序很多,尤其是Matlab的,自己网上下载两个好的,有解释的那种,仔细看懂后,自己研究出点东西就是个毕业论文了,我毕业论文也做这个,嘿嘿,最近正在看,对于图像水印的话,大部分就是离散余弦变换(DCT)变换,也有离散小波变换的,小波变换比较难点,而且大部分是针对语音的,余弦变换的程序很多,大部分都是通过修改变换系数来嵌入水印,多搜些资料看看,不太难。
加油啊,如果满意回答的话希望给点分啦。
5.你好啊,请问你的基于DCT的音频数字水印的水印嵌入代码可以给我看
%水印嵌入*********************************************************************************************(1)
%1同步信号,在音频起始点嵌入10个幅值相同的点
[x,fs,nbits]=wavread('E:\wave1\0000.wav');
lenx=length(x);
w=wavread('E:\wave1\0001.wav');
y=[0.02; 0.02 ;0.02; 0.02 ;0.02; 0.02 ;0.02; 0.02 ;0.02 ;0.02];
%input m
m=1000;
k=fix(lenx/10/m)*10;
w1=w(1:m);
%input a
a=50;
%2分段处理,
for i=1:k:m*k
%3离散余弦变换
x1=dct(x(i:i+k-1));
%排序找出中频系数mid 用公式mid'=mid(1+a*w)
[x11,index]=sort(x1);
j=fix(i/k)+1;
for t=1:3
%4修改中频系数
x1(index(t+1))=x11(t+1)*(1+a*w(j));
%纪录被改变的系数和序号
recordx(j,t)=x11(t+1);
recordi(j,t)=index(t+1);
%5离散余弦逆变换
x(i:i+k-1)=idct(x1);
end
end
%6合并得到嵌入水印后的音频信号
x=[y;x];
%将嵌入水印后的音频信号保存
wavwrite(x,fs,nbits,'E:\wave1\00000.wav');
%水印提取*********************************************************************************************(2)
%1同步检测
[x2,fs,nbits]=wavread('E:\wave1\00000.wav');
lenxx=length(x2)-m*k;
i=1;
%input b
b=0.001;
while and(or(or(abs(x2(i)-0.02)>b,abs(x2(i+1)-0.02)>b),abs(x2(i+2)-0.02)>b),i<lenxx)
i=i+1;
end
while and(abs(x2(i+3)-0.02)<b, i<=lenxx)
i=i+1;
end
%判断是否有同步检测信号
if i>lenxx
error('没有同步检测信号 ');
end
%2含有水印的音频信号做分段处理
x3=x2((i+3):(i+2+m*k));
length(x3)
%3原始音频信号做分段处理
for i=1:k:m*k
%4含有水印的音频信号做离散余弦变换
x4=dct(x3(i:i+k-1));
j=fix(i/k)+1;
%5水印提取
w21=(x4(recordi(j,1))/recordx(j,1)-1)/a;
w22=(x4(recordi(j,2))/recordx(j,2)-1)/a;
w23=(x4(recordi(j,3))/recordx(j,3)-1)/a;
w2(j)=(w21+w22+w23)/3;
end
%6求相关系数
cox1=(w1'*w2')/(norm(w1)*norm(w2))
%水印攻击*********************************************************************************************(3)