实验四 基于DCT域的信息隐藏算法【内容充实】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四基于DCT域的信息隐藏算法
一、实验目的
该实验为验证性实验。
目的是通过实验使学生掌握经典信息隐藏算法,在Matlab环境下,编写基于图像DCT域的信息隐藏算法程序。
用Matlab函数实现DCT域的信息隐藏及提取,并进行分析。
二、实验要求
1、实验前要做好充分准备,包括:复习实验所涉及的知识点,掌握Matlab 编程语言和调试环境。
2、实验时注意记录实验过程中产生的数据、出现的问题及解决问题的方法。
3、理论联系实际,认真分析实验结果,回答思考题。
4、实验后完成实验报告(含相关截图,并附打印的程序清单)。
三、实验环境
计算机(安装Visual C++ 6.0和Matlab 6.5以上版本)
四、实验原理
隐秘算法核心是将我们选取的像素点的最不重要位依次替换成秘密信息,以达到信息隐秘的目的。
在DCT域隐藏的信息处于图像的显著区域,比在时域嵌入信息更具有鲁棒性。
五、实验内容与步骤
(1)完善程序实现在DCT域对隐秘消息的嵌入。
%文件名: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)-10;%将原本小的系数调整得更小
else
DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+4,k2(i)+1)-10;
end
end
%信息写回保存
DCTrgb1=DCTrgb;
data=blkproc(DCTrgb,[8 8],'P1*x*P2',T',T);
result=data0;
result(:,:,1)=data;
imwrite(result,'1.jpg');
(2)比较信息嵌入前后图像的区别。
%文件名:compare.m
%函数功能:本函数完成显示隐秘前后两幅图像的区别
%输入格式举例:F=compare(′blenna.bmp′,′scover.bmp′) %参数说明:
%original是原始载体图像
%hided是隐秘后的图像
%F是差值矩阵
function F=compare(original,hided)
%读取原始载体图像矩阵
W=imread('lena.jpg');
imshow(W)
%W=double(W)/255;
%读取隐秘后图像矩阵
E=imread('1.jpg');
imshow(E)
%E=double(E)/255;
%将两图像矩阵相减,显示效果
%F=E-W;
%注意,MATLAB中矩阵相减只支持double型
%imshow(mat2gray(F))。