Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-05-27
年龄: 39
帖子: 1
声望力: 0 ![]() |
![]()
大哥大姐们小弟在此求助了,毕业论文是基于小波技术的数字水印技术的研究,要求实现matlab仿真,可以实现水印的嵌入和提取
小弟不才,经过网上拼凑得出下面的三级haar小波嵌入和提取程序,但是提取出来的水印是漆黑一片,我改了一级haar小波之后,提取是可以了,但是就是不明白具体的原理过程和程序语句意义,指导老师又不给指点,估计他也是不怎么知道的,每次都说自己回去查资料....我都无奈了....要求全部弄清,我哪里搞的懂啊:cry: 望高手指点下啊.... 这个是三级haar小波分解的 嵌入: clear all; % save start time start_time=cputime; k=0.1; % set the gain factor for embeding % read in the cover object file_name='lena256.bmp'; cover_object=double(imread(file_name)); % determine size of watermarked image Mc=size(cover_object,1); %Height Nc=size(cover_object,2); %Width % read in the message image and reshape it into a vector file_name='c.bmp'; message=double(imread(file_name)); Mm=size(message,1); %Height Nm=size(message,2); %Width message_vector=fix(reshape(message,Mm*Nm,1)./2); % read in key for PN generator file_name='_key.bmp'; key=double(imread(file_name))./2;%256 %reset MATLAB's PN generator to state "key" rand('state',16); %三层harr小波变换 [cA1,cH1,cV1,cD1] = dwt2(cover_object,'haar'); [cA2,cH2,cV2,cD2] = dwt2(cA1,'haar'); [cA3,cH3,cV3,cD3] = dwt2(cA2,'haar'); [r1,c1] = size(cA3); pn_sequence_h1=round(2*(rand(r1,c1)-0.5)); cA3=cA3+20*pn_sequence_h1; % add pn sequences to H1 and V1 componants when message = 0 pn_sequence_h=round(2*(rand(Mc/2,Nc/2)-0.5)); pn_sequence_v=round(2*(rand(Mc/2,Nc/2)-0.5)); for (kk=1:length(message_vector)) if (message(kk) == 0) cH1=cH1+k*pn_sequence_h; cV1=cV1+k*pn_sequence_v; end end % perform IDWT cA2 = idwt2(cA3,cH3,cV3,cD3,'haar',[Mc/4,Nc/4]); cA1 = idwt2(cA2,cH2,cV2,cD2,'haar',[Mc/2,Nc/2]); watermarked_image = idwt2(cA1,cH1,cV1,cD1,'haar',[Mc,Nc]); % convert back to uint8 watermarked_image_uint8=uint8(watermarked_image); % write watermarked Image to file imwrite(watermarked_image_uint8,'dwt_watermarked.bmp','bmp'); % display processing time elapsed_time=cputime-start_time, % display watermarked image figure(1) imshow(watermarked_image_uint8,[]) title('Watermarked Image') figure(2) subplot(2,2,1); imshow(cA1,[]); subplot(2,2,2);imshow(cA2,[]); subplot(2,2,3);imshow(cA3,[]); subplot(2,2,4);imshow(cD1,[]); figure(3) imshow(cA3,[]); 提取: clear all; % save start time start_time=cputime; % read in the watermarked object file_name='dwt_watermarked.bmp'; watermarked_image=double(imread(file_name)); % determine size of watermarked image Mw=size(watermarked_image,1); %Height Nw=size(watermarked_image,2); %Width % read in original watermark file_name='c.bmp'; orig_watermark=double(imread(file_name)); % determine size of original watermark Mo=size(orig_watermark,1); %Height No=size(orig_watermark,2); %Width % read in key for PN generator file_name='_key.bmp'; key=double(imread(file_name))./256; % reset MATLAB's PN generator to state "key" rand('state',16); % initalize message to all ones message_vector=ones(1,Mo*No); [cA1,cH1,cV1,cD1] = dwt2(watermarked_image,'haar'); % add pn sequences to H1 and V1 componants when message = 0 pn_sequence_h=round(2*(rand(Mw/2,Nw/2)-0.5)); pn_sequence_v=round(2*(rand(Mw/2,Nw/2)-0.5)); for (kk=1:length(message_vector)) correlation_h(kk)=corr2(cH1,pn_sequence_h); correlation_v(kk)=corr2(cV1,pn_sequence_v); correlation(kk)=(correlation_h(kk)+correlation_v(kk))/2; end for (kk=1:length(message_vector)) if (correlation(kk) > mean(correlation)) message_vector(kk)=0; end end % reshape the message vector and display recovered watermark. figure(1) message=reshape(message_vector,Mo,No); imshow(message,[]) title('Recovered Watermark') % display processing time elapsed_time=cputime-start_time, 这个是一级haar小波分解的 嵌入: clear all; %读入原图像 cover_object=double(imread('lena.bmp')); %原图像的行数和列数 Mc=size(cover_object,1); %行数 Nc=size(cover_object,2); %列数 %进行dwt小波变换 [cA1,cH1,cV1,cD1]=dwt2(cover_object,'haar'); %读入水印图像 file_name='_copyright.bmp'; message=double(imread(file_name)); %水印的行数与列数 Mm=size(message,1); %行数 Nm=size(message,2); %列数 water_vector=reshape(message,Mm*Nm,1); k=0.01; %嵌入强度 [r1,c1]=size(cD1); cD1_vector=reshape(cD1,r1*c1,1); %检查水印信息是否过大 if (Mm*Nm> r1*c1) error('水印太大') end %将随机数发生器的状态置为1100 randn('state',1100); %嵌入水印 x=1; y=1; h=waitbar(0,'水印嵌入中,请等待'); for j=1:Mm*Nm cD1_vector(j,1)=cD1_vector(j,1)+0.01*water_vector(j,1); end cD1=reshape(cD1_vector,r1,c1); close(h); %idwt waternarked_image_x=idwt2(cA1,cH1,cV1,cD1,'haar',[Mc,Nc]); %转换为unit8并写入dwt_watermarked.bmp watermarked_image_uint=uint8(waternarked_image_x); imwrite(watermarked_image_uint,'dwt_watermarked.bmp','bmp'); %显示图像 figure(1) imshow(waternarked_image_x,[]) title('嵌入水印图像'); figure(2) I=imread('lena.bmp'); imshow(I,[]) title('原始图像') figure(3) subplot(2,2,1); imshow(cA1,[]); subplot(2,2,2);imshow(cA2,[]); subplot(2,2,3);imshow(cA3,[]); subplot(2,2,4);imshow(cD1,[]); title('haar小波分解') 提取: clear all; %读入嵌入水印图像 watermarked_object=double(imread('dwt_watermarked.bmp')); cover_object=double(imread('lena.bmp')); Mc=size(cover_object,1); %行数 Nc=size(cover_object,2); %列数 %读入原始水印 file_name='_copyright.bmp'; message=double(imread(file_name)); %原始水印的行数与列数 Mm=size(message,1); %行数 Nm=size(message,2); %列数 %对水印进行dwt变换 [cA1,cH1,cV1,cD1]=dwt2(cover_object,'haar'); [wcA1,wcH1,wcV1,wcD1]=dwt2(watermarked_object,'haar'); [r1,c1]=size(cD1); cD1_vector=reshape(cD1,r1*c1,1); cD2_vector=reshape(wcD1,r1*c1,1); %提取水印 x=1; y=1; h=waitbar(0,'水印提取中,请等待'); for j=1:Mm*Nm water_vector(j,1)=(cD2_vector(j,1)-cD1_vector(j,1))/0.01; end close(h); %将水印message重新排列 water=reshape(water_vector,Mm,Nm); marked=uint8(water); imwrite(marked,'recovermarked.bmp','bmp'); %显示提取水印与原始水印 figure(1) imshow(marked,[]) title('提取出的水印'); figure(2) I=imread('orig_watermark.bmp'); imshow(I,[]) title('原始水印') |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2008-07-17
年龄: 41
帖子: 5
声望力: 0 ![]() |
![]()
读一些相关的论文吧。
基于DWT的音频水印研究。。。
__________________
日光之下并无新事 |
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2008-07-23
年龄: 36
帖子: 2
声望力: 0 ![]() |
![]()
牛呀
学习! |
![]() |
![]() |
![]() |
#4 |
初级会员
注册日期: 2009-03-05
年龄: 38
帖子: 2
声望力: 0 ![]() |
![]()
好东西呀 学啦
|
![]() |
![]() |
![]() |
#5 |
游客
帖子: n/a
|
![]()
为什么我的还是运行不起来呢?就是楼主的一级小波那个啊。。说我的reshape有问题。。请问。。对图像有什么要求么
|
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
【资料】matlab基础资源(经典+实用) | dnping | MATLAB论坛 | 47 | 2008-03-20 18:33 |
如何在重压之下保持冷静 | ciji1995 | 学术科研 | 3 | 2007-07-31 21:09 |
【求助】给一幅图像添加个坐标轴 | sangsang129 | MATLAB论坛 | 0 | 2007-06-19 10:36 |