如何利用matlab软件实现水印添加和提取

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

如何利用matlab软件实现水印添加和提取如何利用matlab软件实现水印添加和提取?其实也很简单呀?首先是按照你的嵌入规则来进行嵌入。提取的过程就是嵌入的逆过程1:size=256;block=8;blockno=size/block;%一行有32格LENGTH=size*size/64;Alpha1=0.025;Alpha2=0.1;T1=3;I=zeros(size,size);%产生全矩阵D=zeros(size,size);BW=zeros(size,size);Block_dct1=zeros(block,block);%产生水印,并显示水印信息;subplot(3,2,1);Info='dcf';InfoStrSize=length(Info);%将字符串转换为位数组array=zeros(1,InfoStrSize*8);form=1:InfoStrSizeInfochar=double(Info(m));%%'c'为99forn=1:8array(8*(m-1)+n)=bitget(Infochar,n);%%获得Infochar第n位的值endendplot(array);title('原始水印信息');%显示原图subplot(3,2,2);i=imread('lena.bmp');imshow(i,[]);title('原始图像')%显示prewitt为算子的边缘图BW=edge(i,'prewitt');%BW=edge(I,’Roberts’);%BW=edge(I,’Sobel’);%BW=edge(I,’zerocross’);subplot(3,2,3);imshow(BW);Title('原始图像边缘图');%嵌入水印l=1;k=1;form=1:blocknoforn=1:blocknox=(m-1)*block+1;y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格block_dct1=i(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。block_dct1=dct2(block_dct1);%对二维数组进行离散余弦变换。dct是有损压缩如jpeg使用的技术。Dct是可逆的运算BW_8_8=BW(x:x+block-1,y:y+block-1);%得到边界矩阵。ifm=1|n=1T=0;elseT=sum(BW_8_8);T=sum(T);endifTT1Alpha=Alpha2;%block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));ifl=(InfoStrSize*8)block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*array(l));l=l+1;endelseAlpha=Alpha1;%block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));endBlock_dct=idct2(block_dct1);D(x:x+block-1,y:y+block-1)=Block_dct;k=k+1;endend%显示嵌入水印后的图像subplot(3,2,4);imshow(D,[]);title('嵌入水印图像')%保存该图像D=uint8(D);imwrite(D,'marked.bmp');2:%提取水印D=imread('marked.bmp');D=double(D);I=imread('lena.bmp');I=double(I);array2=zeros(1,InfoStrSize*8);K=1;l=1;form=1:blocknoforn=1:blocknox=(m-1)*block+1;y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格block_dct1=I(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。block_dct2=D(x:x+block-1,y:y+block-1);Block_dct1=dct2(block_dct1);%对二维数组进行离散余弦变换。dct是有损压缩如jpeg使用的技术。Dct是可逆的运算Block_dct2=dct2(block_dct2);BW_8_8=BW(x:x+block-1,y:y+block-1);%得到边界矩阵。ifm=1|n=1T=0;elseT=sum(BW_8_8);T=sum(T);endifTT1Alpha=Alpha2;%block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));ifl=(InfoStrSize*8)tmp=(Block_dct2(1,1)/Block_dct1(1,1)-1);tmp=tmp/Alpha;tmp2=round(tmp);array2(l)=double(tmp2);l=l+1;endelseAlpha=Alpha1;%block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k));endk=k+1;endendsubplot(3,2,5);plot(array2);title('提取水印');extractedInfo=zeros(InfoStrSize,1);form=1:InfoStrSizeinfochar=0;forn=1:8ifarray2(8*(m-1)+n)==1infochar=infochar+bitset(0,n,1);endendextractedInfo(m)=infochar+extractedInfo(m);endresultStr=char(extractedInfo);subplot(3,2,6);plot(array2);title(strcat('代表字符',resultStr))

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功