在matlab中,用DCT算法加入水印后的真彩色图像为什么抗攻击力不强?在线等!

来源:百度知道 编辑:UC知道 时间:2024/07/16 13:21:54
我用dct算法,将黑白水印加入真彩图像的R分量中,其中嵌入和提取的算法如下

%嵌入水印
for p=1:32
for q=1:32
x=(p-1)*K+1;y=(q-1)*K+1;
block1=R(x:x+K-1,y:y+K-1);
block2=dct2(block1);
if W1(p,q)==0
a=-1;
else a=1;
end
block2(1,1)=block2(1,1)*(1+a*0.029);
block2(1,2)=block2(1,2)*(1+a*0.029);
block3=idct2(block2);
R1(x:x+8-1,y:y+8-1)=block3;
end
end
I2=cat(3,R1,G,B);
subplot(1,3,3);imshow(I2,[]);title('嵌入水印后的图像I2');
imwrite(I2,'qianru.bmp','bmp');

%提取水印
K=8;
J=imread('yuantu.bmp');%读入原始图像
J=imresize(J,[256 256]);
%A=imread('qianru.bmp');%没有攻击的水印图像
A=imread('attack.bmp');%攻击后的水印图像
R2=J(:,:,1);
R3=A(:,:,1);
R2=double(R2);
R3=double(R3);
for p=1:32
for q=1:32
x=(p-1)*K+1;y=(q-1)*K+1;
block1=R2(

这个算法我看了,比较简单,把水印嵌入到直流分量和最低频的2个DCT系数。不过有个问题,(1,1)和(1,2)的系数在提取的时候处理的不对,实际上(1,1)的结果被(1,2)的结果覆盖掉了。你的本意是2个结果要综合来看吧?

即使不存在这个问题的话,这个算法的鲁棒性也不会很强,首先你的嵌入强度是a*0.029,(1,1)的系数意义为8*8图像块中的均值,其范围是0~255,嵌入后再反变换,又会有一定的精度丢失,所以你的a要取的比较大才能保证水印的存在。

另外,你说的各种攻击都会强烈的影响到图像块的均值,也就是说会使(1,1)的水印发生很大变化。

这是一个相当基础的算法,而且不是盲水印。如果嵌入强度取的大一些,应该是能够抵抗jpeg压缩的,不过嵌入到非(1,1)会好一些。其它攻击就不好说了。

总之,建议你干脆换个算法吧。

以上。
专业路过的老狼