LSB算法的matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一实验目的
1、了解隐显密码学相关的密码算法;
2、熟悉不同“位平面”对图像质量的影响;
3、掌握基于图像的LSB信息隐藏算法;
4、用MATLAB函数实现LSB信息隐藏;
5、掌握LSB信息提取算法。
二实验条件
1、熟练使用matlab
2、掌握LSB算法知识,了解其原理
3、安装了matlab的计算机
三实验原理
1、BMP位图格式
BMP文件是一种常见格式图形文件,是隐藏信息的一种好载体。一副位图是由许多像素点组成,每个像素点用若干二进制位来描述其灰度或颜色;而每个像素点的这些二进制的低位对改点灰度或颜色的影响很小,故改变像素点的低位所引起的图像变化人眼不易发觉。正因如此,可利用这些低位存储秘密信息以实现信息的隐藏。
BMP图像文件格式,是微软公司为其WINDOWS环境设置的标准图像格式,BMP表示的是将一幅图像分割成栅格,栅格的每一点称为像素,每一个像素具有自己的RGB值,即一幅图像是由一系列像素点构成的点阵。位图文件格式支持4b RLE(行程长度编码)以及8b和24b编码。
位图头文件包含位图文件的类型大小信息和版面信息。位图信息头包含图像本身的属性,包括位图的宽度、高度、压缩类型等。
2、LSB算法原理
对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感,其最初是用于脆弱性水印的。
LSB算法基本步骤:
1)将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;
2)用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;
3)将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。
四、程序设计
1、程序开发平台及工具
平台:windows xp
软件版本:matlab7.0
2、源代码
1)信息嵌入部分
clear all
close all
Img=imread('lena.bmp');
Double_Img=double(Img);
fileID=fopen('test.txt','r');
[msg,len]=fread(fileID,'ubit1');
[m,n]=size(Double_Img);
p=1;
for f2=1:n
for f1=1:m
Double_Img(f1,f2)=Double_Img(f1,f2)-mod(Double_Img(f1,f2),2)+ms g(p,1);
if p==len
break;
end
p=p+1;
end
if p==len
break;
end
end
Double_Img=uint8(Double_Img);
imwrite(Double_Img,'result.bmp');
subplot(121);imshow(Img);title('原图片');
subplot(122);imshow(Double_Img);title(' 嵌入信息后的图片');
程序运行结果如下:
其中,test.txt文件中所包含的信息为:whut 2)信息提取部分
Img=imread('result.bmp');
Img=double(Img);
[m,n]=size(Img);
xx=fopen('result.txt','a');
len=32;
p=1;
for f2=1:n
for f1=1:m
if bitand(Img(f1,f2),1)==1
fwrite(xx,1,'bit1');
result(p,1)=1;
else
fwrite(xx,0,'bit1');
result(p,1)=0;
end
if p==len
break;
end
p=p+1;
end
if p==len
break;
end
end
fclose(xx);
程序运行后,在work文件夹中会自动添加一个名为result的txt文件,打开之后即可看到所嵌入的信息,即whut。
五、实验小结
由实验可知,应用LSB算法在图像中嵌入适量的文本信息,并不影响图像的视觉效果,从而达到了信息隐藏的目的。
通过本次实验,更好的理解了LSB的算法原理,对BMP格式的图像构成也有了一定的认识。另外,Matlab的使用有助于以后类似实验的展开。