用matlab做数字水印嵌入和提取,结果提取出来的水印与原水印完全不同,难道水印图像和原图像有一定的要求

麻烦各位大侠帮忙解答下,附原程序:
M=256;%原图像长度
N=32;%水印图像长度
K=8;
%显示原图像
subplot(3,2,1);I=imread('D:\matlab\watermark\h_large_C868_6271000001702f75.jpg','jpg');imshow(I);title(' 原始公开图像 ');
%显示水印图像
subplot(3,2,2);J=imread('D:\matlab\watermark\p_large_EnUk_1b6b000316655c15.jpg','jpg');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=BLOCK*(1+a*0.02);
BLOCK=idct2(BLOCK);
I(x:x+K-1,y:y+K-1)=BLOCK;
end
end
%显示嵌入水印后的图像
subplot(3,2,3);imshow(I);title(' 含水印的图像')
imwrite(I,'watermarked.jpg','jpg');

N=32;
K=8;
I=imread('D:\matlab\watermark\h_large_C868_6271000001702f75.jpg','jpg');
J=imread('watermarked.jpg','jpg');
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=idct2(BLOCK1);
BLOCK2=idct2(BLOCK2);
a=BLOCK2(1,1)/BLOCK1(1,1)-1;
if a<0
W(p,q)=0;
else
W(p,q)=1;
end
end
end
%显示提取的水印
subplot(3,2,4);imshow(W);title(' 提取的水印');

测试时发现,水印图像发生变化,提取出的水印相同,都是黑色色块

clc

[a type]=myfunction(0.7,0);/a嵌入强度,type攻击类型

x=imread('E:\ori1.bmp');

subplot(2,3,1);

image(x);

title('初始待加入水印图du像');

w=imread('E:\water1.bmp');

subplot(2,3,2);

imshow(w);

title('待用水印图像');

w=w/255;

[cA1,cH1,cV1,cD1]=dwt2(x,'haar');% 对原始图像x进行小波分解zhi

[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');

[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');

title('加入水印后的图像');

%(1)放大两倍的操作,(当然提取之前要先缩小两倍)

xxx1=imresize(Y,2,'bicubic');

xxx2=imresize(xxx1,1/2,'bicubic');

Y= double(xxx2);

end

%(8) JPEG压缩

if type==8

A='JPEG压缩,强度=10'

imwrite(uint8(round(Y)),'jpeg_n.jpg','jpg','Quality',10);%按压缩因子Quality的比例,将J2压缩到jpeg_n.jpg中。

end

title('提取结果');

原图像512*512 水印64*64

函数声明为function [a type]=myfunction(a,type)

图像降维dao,是因为,音频是zhi一维的dao,所以要用到 reshape 这个函版数。

置乱权,这个 有很多种的,一般用RandStream 这个来设定乱数。

密钥:图像(watermark)算法(比如XOR) 乱数 。

嵌入与提取: 根据算法和处理方法不同方法不同。小波 一般利用平均差值 嵌入的,提取的时候可以根据与差值比较 ,大的时候1小的时候0等方法。

扩展资料:

MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。

而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。

参考资料来源:百度百科-MATLAB

温馨提示:内容为网友见解,仅供参考
无其他回答

用matlab做数字水印嵌入和提取,结果提取出来的水印与原水印完全不同,难...
密钥:图像(watermark)算法(比如XOR) 乱数 。嵌入与提取: 根据算法和处理方法不同方法不同。小波 一般利用平均差值 嵌入的,提取的时候可以根据与差值比较 ,大的时候1小的时候0等方法。

用matlab做数字水印嵌入和提取,结果提取出来的水印与原水印完全不同,难...
密钥:图像(watermark)算法(比如XOR) 乱数 。嵌入与提取: 根据算法和处理方法不同方法不同。小波 一般利用平均差值 嵌入的,提取的时候可以根据与差值比较 ,大的时候1小的时候0等方法。

MATLAB数字水印处理技术的实现
在MATLAB中,数字水印的实现通常涉及嵌入和提取过程。嵌入过程包括选取水印图像,对原始图像进行变换域处理(如离散余弦变换),将水印信息嵌入到特定位置(如DCT系数),然后进行逆变换和编码,以完成水印的嵌入。提取过程则通过反向操作,从水印嵌入的图像中恢复原始水印信息。实现数字水印处理时,MATLAB提供了...

matlab编程实现一种简单的数字水印嵌入与提取方法
取出,嵌入水印的成分(嵌入到DB的话取出DB,两个都用了就两个都取出,在这里用DB代替)。进行嵌入时的反计算。提取后的水印图片进行保存。

怎么用matlab从含有水印的图像中提取出水印
第六步:嵌入水印数据将置乱的水印序列嵌入所选的DCT系数中,即嵌入经过3D-DCT变换后的数据块中的第一帧数据中。然后把这些数据进行反3D-DCT变换后放回原位置。第七步:将所选的数据放回原位置最后一步:写视频文件3.3视频水印的检测水印提取是嵌入的逆过程,本算法的一大优势是,水印提取时无需原始视频数据的参与,...

matlab DWT数字水印程序
首先,不知道你会不会用Matlab。如果,你会用,应该有一个简单的DWT水印嵌入程序了。读取图片,DWT变换着都不用说了吧?有个不太明白的地方,就是,预处理是在什么时候做? 在原图片上做完后,在做DWT变换后嵌入?那么,这个字符串的信息量与原图信息量一样多。水印效果就。。。如果要嵌入,也要与...

用MATLAB给图片加水印,怎样生成要加入的水印,并把水印嵌入图片中...
I=imread('d:\\My Documents\\数字水印\\LENA.BMP');subplot(2,2,1);显示原图像 imshow(I);title('原图像');产生水印序列 randn('seed',10);mark=randn(1024,1);subplot(2,2,2);plot(mark);title('水印序列');嵌入水印 T=1;for m=1:N for n=1:N x=(m-1)*K+1;y=(n-1)*K...

Matlab DWT与SVD数字水印【解析 参考源码】
Matlab中的DWT(离散小波变换)与SVD(奇异值分解)在数字水印技术中扮演着关键角色。它们基于变换域的特性,提供了一种稳健的水印嵌入和提取策略。DCT(离散余弦变换)利用图像高频信息的集中性,而SVD的稳定性则确保了水印在图像扰动时的可靠性。在水印嵌入过程中,首先对图像进行DCT变换,然后选择SVD分解...

【基于DCT变换的数字图像水印研究】 数字图像水印
(5)按水印长宽将生成的一维矩阵重置,得到提取的水印。5 仿真实验结果 本实验采用MATLAB软件为工具,对提出的DCT水印方案进行了仿真实验。6 结语 通过实验图片的效果显示,我们可以看到加入水印后的图像基本不影响原图片的质量,也看不出水印的图案,而且可以基本保持载体图片的原貌。从被攻击后的图像中也可以...

我用MATLAB做的水印,怎么用stirmark进行攻击?急求
第六步:嵌入水印数据将置乱的水印序列嵌入所选的DCT系数中,即嵌入经过3D-DCT变换后的数据块中的第一帧数据中。然后把这些数据进行反3D-DCT变换后放回原位置。第七步:将所选的数据放回原位置最后一步:写视频文件3.3视频水印的检测水印提取是嵌入的逆过程,本算法的一大优势是,水印提取时无需原始视频数据的参与,...

相似回答