%文件名:randlsbhide.m
%函数功能:本函数将完成随机选择LSB的信息隐秘,载体选用灰度BMP图
%输入格式举例:[ste_cover,len_total]=randlsbhide(′glenna.bmp′,′message.txt′,′scover.bmp′,2001) %参数说明:
%input是信息隐蔽载体图像%file是秘密消息文件 %output是信息隐秘后的生成图像 %key是随机间隔函数的密钥
function[ste_cover,len_total]=randlsbhide(input,file,output,key) %读入图像矩阵 cover=imread(input);
ste_cover=cover;ste_cover=double(ste_cover); %将文本文件转换为二进制序列 f_id=fopen(file,′r′);
[msg,len_total]=fread(f_id,′ubit1′); %判断嵌入消息量是否过大 [m,n]=size(ste_cover); If len_total>m*n
error(′嵌入消息量过大,请更换图像′); end
%p作为消息嵌入位数计数 p=1;
%调用随机间隔函数选取像素点
[row,col]=randinterval(ste_cover,len_total,key); %在LSB隐秘消息 for i=1:len_total
ste_cover(row(i),col(i))=ste_cover(row(i),col(i))-mod(ste_cover(row(i),col(i)),2)+msg(p,1);
if p==len_total break; end p=p+1; end
ste_cover=uint8(ste_cover); imwrite(ste_cover,output); %显示实验结果
subplot(1,2,1);imshow(cover);title(′原始图像′);
subplot(1,2,2);imshow(output);title(′隐藏信息的图像′);
(2)编写函数比较两幅图像区别 %文件名:compare.m
%函数功能:本函数完成显示隐秘前后两幅图像的区别
%输入格式举例:F=compare(′blenna.bmp′,′scover.bmp′) %参数说明:
- 9 -
%original是原始载体图像 %hided是隐秘后的图像 %F是差值矩阵
functionF=compare(original,hided) %读取原始载体图像矩阵 W=imread(original); W=double(W)/255; %读取隐秘后图像矩阵 E=imread(hided); E=double(E)/255;
%将两图像矩阵相减,显示效果
此处填入合适的语句,完成相应功能 %注意,MATLAB中矩阵相减只支持double型
imshow(mat2gray(F) )
(3)隐秘消息的提取 %文件名:randlsbget.m
%函数功能:本函数将完成提取隐秘于LSB上的秘密消息
%输入格式举例:result=randlsbget(′scover.jpg′,56,′secret.txt′,2001) %参数说明:
%output是信息隐秘后的图像 %len_total是秘密消息的长度
%goalfile是提取出的秘密消息文件 %key是随机间隔函数的密钥 %result是提取的消息
function result=randlsbget(output,len_total,goalfile,key) ste_cover=imread(output); ste_cover=double(ste_cover); %判断嵌入消息量是否过大 [m,n]=size(ste_cover); frr=fopen(goalfile,′a′);
%p作为消息嵌入位数计数器,将消息序列写回文本文件 p=1;
%调用随机间隔函数选取像素点
[row,col]=randinterval(ste_cover,len_total,key); for i=1:len_total
if bitand(ste_cover(row(i),col(i)),1)==1 fwrite(frr,1,′bit1′); result(p,1)=1; else
fwrite(frr,0,′bit1′); result(p,1)=0; end
if p==len_total
- 9 -
break; end p=p+1; end
fclose(frr);
2、顺序选取图像载体像素,实现隐秘消息的嵌入与提取 (1)隐秘消息的嵌入 %文件名:lsbhide.m
%函数功能:本函数将完成在LSB上的顺序信息隐秘,载体选用灰度BMP图 %输入格式举例:
[ste_cover,len_total]=lsbhide(′glenna.bmp′,′message.txt′,′scover.bmp′) %参数说明:
%input是信息隐蔽载体图像,为灰度BMP图 %file是秘密消息文件
%output是信息隐秘后生成图像 %ste_cover是信息隐秘后图像矩阵 %len_total是秘密消息的长度,即容量
function[ste_cover,len_total]=lsbhide(input,file,output) %读入图像矩阵 cover=imread(input); ste_cover=cover;
ste_cover=double(ste_cover); %将文本文件转换为二进制序列 f_id=fopen(file,′r′);
[msg,len_total]=fread(f_id,′ubit1′); %判断嵌入消息量是否过大 [m,n]=size(ste_cover); if len_total>m*n
error(′嵌入消息量过大,请更换图像′); end
%p作为消息嵌入位数计数
此处填入合适的语句,完成按顺序进行信息嵌入
%生成信息隐秘后图像 imwrite(ste_cover,output); %显示实验结果
subplot(1,2,1);imshow(cover);title(′原始图像′);
subplot(1,2,2);imshow(output);title(′隐藏信息的图像′);
(2)调用函数compare.m比较两幅图像区别
(3)隐秘消息的提取
- 9 -
%文件名:lsbget.m
%函数功能:本函数将完成提取隐秘于LSB上的秘密消息
%输入格式举例:result=lsbget(′scover.bmp′,56,′secret.txt′) %参数说明:
%output是信息隐秘后的图像 %len_total是秘密消息的长度
%goalfile是提取出的秘密消息文件 %result是提取的消息
functionresult=lsbget(output,len_total,goalfile) ste_cover=imread(output); ste_cover=double(ste_cover); %判断嵌入消息量是否过大 [m,n]=size(ste_cover); frr=fopen(goalfile,′a′);
%p作为消息嵌入位数计数器,将消息序列写回文本文件
此处填入合适的语句,将消息序列写回文本文件
实验小结:
对顺序嵌入隐秘消息和随机嵌入隐秘消息两种方法的实现结果进行比较。
- 9 -
实验四 基于图像的DCT域信息隐藏
一、 实验目的
该实验为验证性实验。目的是通过实验使学生掌握经典信息隐藏算法,在Matlab环境下,编写基于图像DCT域的信息隐藏算法程序。用Matlab函数实现DCT域的信息隐藏及提取,并进行分析。
二、 实验要求
1、实验前要做好充分准备,包括:复习实验所涉及的知识点,掌握Matlab编程语言和调试环境。
2、实验时注意记录实验过程中产生的数据、出现的问题及解决问题的方法。 3、理论联系实际,认真分析实验结果,回答思考题。
4、实验后完成实验报告(含相关截图,并附打印的程序清单)。
三、 实验环境
计算机(安装Visual C++ 6.0和Matlab 6.5以上版本)
四、 实验原理
隐秘算法核心是将我们选取的像素点的最不重要位依次替换成秘密信息,以达到信息隐秘的目的。在DCT域隐藏的信息处于图像的显著区域,比在时域嵌入信息更具有鲁棒性。
五、 实验内容与步骤
(1)完善程序实现在DCT域对隐秘消息的嵌入。 (2)完善程序实现在DCT域对隐秘消息的提取。 (3)改变alpha值,并对所得结果进行比较。
六、 实验小结
- 9 -
相关推荐: