实验四 基于DCT域的信息隐藏算法.docVIP

  • 24
  • 0
  • 约 6页
  • 2017-02-01 发布于重庆
  • 举报
实验四 基于DCT域的信息隐藏算法

实验 基于DCT域的信息隐藏算法 实验目的 该实验为验证性实验。目的是通过实验使学生掌握经典,并进行分析实验要求 1、实验前要好充分准备,包括:复习实验所涉及的知识点,掌握Matlab编程语言和调试环境。 2、实验时注意记录实验过程中产生的数据、出现的问题及解决问题的方法。 3、理论联系实际,认真分析实验结果,回答思考题。 4、实验后,并附打印的程序清单。实验 计算机(安装Visual C++ 6.0和Matlab 6.5以上版本,以达到信息隐秘的目的。在DCT域隐藏的信息处于图像的显著区域,比在时域嵌入信息更具有鲁棒性。 实验内容与步骤alpha值,并对所得结果进行比较分析。 %文件名:hidedctadv.m %函数功能:本函数用于DCT域的信息隐藏 %输入格式举例:[count,msg,data]=hidedctadv(lenna.jpg,1.jpg,1.txt,1982,1); %参数说明: %image为载体图象 %imagegoal为藏有秘密信息的载体,即隐秘载体 %msg为待隐藏的信息 %key为密钥,用来控制随机选块 %alpha为控制量,用来保证编码的正确性 %count为待隐藏信息的长度 %result为隐藏结果 function [count,msg,result]=hidedctadv(image,imagegoal,msg,key,alpha) %按位读取秘密信息 frr=fopen(1.txt,r); [msg,count]=fread(frr,ubit1); fclose(frr); data0=imread(lena.jpg); %将图象矩阵转为double型 data0=double(data0)/255; %取图象的一层做隐藏 data=data0(:,:,1); %对图象分块 T=dctmtx(8); %对分块图象做DCT变换 DCTrgb=blkproc(data,[8 8],P1*x*P2,T,T); DCTrgb0=DCTrgb; %产生随机的块选择,确定图像块的首地址 [row,col]=size(DCTrgb); row=floor(row/8); col=floor(col/8); a=zeros([row col]); [k1,k2]=randinterval(a,count,2001); for i=1:count k1(1,i)=(k1(1,i)-1)*8+1; k2(1,i)=(k2(1,i)-1)*8+1; end %信息嵌入 temp=0; for i=1:count if msg(i,1)==0 if DCTrgb(k1(i)+4,k2(i)+1)DCTrgb(k1(i)+3,k2(i)+2) temp=DCTrgb(k1(i)+4,k2(i)+1); DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2); DCTrgb(k1(i)+3,k2(i)+2)=temp; end else if DCTrgb(k1(i)+4,k2(i)+1)DCTrgb(k1(i)+3,k2(i)+2) temp=DCTrgb(k1(i)+4,k2(i)+1); DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2); DCTrgb(k1(i)+3,k2(i)+2)=temp; end end if DCTrgb(k1(i)+4,k2(i)+1)DCTrgb(k1(i)+3,k2(i)+2) DCTrgb(k1(i)+3,k2(i)+2)=DCTrgb(k1(i)+3,k2(i)+2)-0.1;%将原本小的系数调整得更小 else DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+4,k2(i)+1)-0.1; end end %信息写回保存 DCTrgb1=DCTrgb; data=blkproc(DCTrgb,[8 8],P1*x*P2,T,T); result=data0; result(:,:,1)=data; imwrite(result,2.jpg); 实验小结 通过实验掌握经典,并进行分析- 9 -

文档评论(0)

1亿VIP精品文档

相关文档