您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 信息隐藏-实验七-DCT域图像水印
实验七DCT域图像水印(一)实验目的了解频域水印的特点,掌握基于DCT系数关系的图像水印算法原理,设计并实现一种基于DCT域的图像水印算法。(二)实验环境1、Windowsxp操作系统2、Matlab7.1版本软件3、BMP图像(三)实验原理1、嵌入信息利用载体中两个特定DCT系数的相对大小来表示隐藏的信息。载体图像分为8*8分块,进行二维DCT变换,分别选择其中的两个位置,比如用(u1,v1)和(u2,v2)代表所选定的两个系数的坐标。如果Bi(u1,v1)Bi(u2,v2),代表隐藏了1;如果相反,则交换两系数。如果Bi(u1,v2)Bi(u2,v2),代表隐藏0;如果相反,则交换两系数2、提取信息提取的时候接收者对包含水印信息的图像文件进行二维DCT变换,比较每一块中约定位置的DCT系数值,根据其相对大小,得到隐藏信息的比特串,从而恢复出秘密信息。3、特殊处理引入一个Alpha变量对系数的差值进行控制,将两个系数的差值放大,可以保证提取秘密信息的正确性。(四)实验步骤1、嵌入秘密信息。2、提取秘密信息。(五)实验截图1、图像显示截图原始图像嵌入水印图像图1-1原始图像和携密图像的对比图结果:在显示上两者基本无差别。2、所含秘密信息截图图1-2提取秘密信息结果:所隐藏的信息为‘0123456789’。(六)代码附录1、嵌入秘密信息clc;clear;msgfid=fopen('hidden.txt','r');%打开秘密文件,读入秘密信息[msg,count]=fread(msgfid);count=count*8;alpha=0.02;fclose(msgfid);msg=str2bit(msg)';[len,col]=size(msg);io=imread('lena.bmp');%读取载体图像io=double(io)/255;output=io;i1=io(:,:,1)%取图像的一层来隐藏T=dctmtx(8);%对图像进行分块DCTrgb=blkproc(i1,[8,8],'P1*x*P2',T,T');%对图像分块进行DCT变换[row,col]=size(DCTrgb);row=floor(row/8);col=floor(col/8);%顺序信息嵌入temp=0;fori=1:countifmsg(i,1)==0ifDCTrgb(i+4,i+1)DCTrgb(i+3,i+2)%选择(5,2)和(4,3)这一对系数temp=DCTrgb(i+4,i+1);DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);DCTrgb(i+3,i+2)=temp;endelseifDCTrgb(i+4,i+1)DCTrgb(i+3,i+2)temp=DCTrgb(i+4,i+1);DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2);DCTrgb(i+3,i+2)=temp;endendifDCTrgb(i+4,i+1)DCTrgb(i+3,i+2)DCTrgb(i+4,i+1)=DCTrgb(i+3,i+2)-alpha;%将原本小的系数调整更小,使得系数差别变大elseDCTrgb(i+3,i+2)=DCTrgb(i+3,i+2)-alpha;endend%将信息写回并保存wi=blkproc(DCTrgb,[8,8],'P1*x*P2',T',T);%对DCTrgb进行逆变换output=io;output(:,:,1)=wi;imwrite(output,'lena1.bmp');figure;subplot(1,2,1);imshow('lena.bmp');title('原始图像');subplot(1,2,2);imshow('lena1.bmp');title('嵌入水印图像');2、提取秘密信息clc;clear;wi=imread('lena1.bmp');wi=double(wi)/255;wi=wi(:,:,1)%取图像的一层来提取T=dctmtx(8);%对图像进行分块DCTcheck=blkproc(wi,[8,8],'P1*x*P2',T,T');%对图像分块进行DCT变换fori=1:80%80为隐藏的秘密信息的比特数ifDCTcheck(i+4,i+1)=DCTcheck(i+3,i+2)message(i,1)=1;elsemessage(i,1)=0;endendout=bit2str(message);fid=fopen('message.txt','wt');fwrite(fid,out);fclose(fid);(七)实验心得通过此次的实验,了解了频域水印的特点。并利用这个来隐藏信息。考虑到人眼对蓝色的辨识度不高,对其蓝色分量做些稍微的修改,人肉眼可能看不出来。所以就对图像的第三层进行DCT变换,再挑选特定的值进行比较和处理,嵌入信息,再进行DCT逆变换,得到嵌入水印的图像。
本文标题:信息隐藏-实验七-DCT域图像水印
链接地址:https://www.777doc.com/doc-1859104 .html