信息隐藏实验四二值图像信息隐藏汇编.docx

上传人:李医生 文档编号:11697355 上传时间:2021-08-31 格式:DOCX 页数:8 大小:160.14KB
返回 下载 相关 举报
信息隐藏实验四二值图像信息隐藏汇编.docx_第1页
第1页 / 共8页
信息隐藏实验四二值图像信息隐藏汇编.docx_第2页
第2页 / 共8页
信息隐藏实验四二值图像信息隐藏汇编.docx_第3页
第3页 / 共8页
信息隐藏实验四二值图像信息隐藏汇编.docx_第4页
第4页 / 共8页
信息隐藏实验四二值图像信息隐藏汇编.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《信息隐藏实验四二值图像信息隐藏汇编.docx》由会员分享,可在线阅读,更多相关《信息隐藏实验四二值图像信息隐藏汇编.docx(8页珍藏版)》请在三一文库上搜索。

1、实验四二值图像信息隐藏一、实验目的了解二值图像的特点,掌握基于二值图像的信息隐藏原理,读懂两种基于二 值图像的信息隐藏方法,并自己设计另一种二值信息隐藏的方法。二,实验环境(1) Windows XP操作系统;(2) MATLAB 7.2版本软件;(3)二值图像文件。三、实验原理二值图像又称为单色图像或黑白图像,一般用1或0表示黑色或白色像素点, 利用二值图像信息隐藏的方法主要是根据图像中黑白像素数量的比较来隐藏信 息。方法一:把一个二值图像分成一系列矩形图像区域 B,某个图像区域B中黑 色像素的个数大于一半,则表示嵌入 0;如果白色像素的个数大于一半,则表示 嵌入1。但是当需要嵌入的比特与所

2、选区域的黑白像素的比例不一致时,为了达 到希望的像素关系,则需要修改一些像素的颜色。方法二:采用游程编码方法在二值图像中隐藏信息。 秘密信息嵌入时修改二 值图像的游程长度,如果秘密信息位是0,则修改该游程长度为偶数;如果为1, 则修改游程长度为奇数;如果秘密信息的取值与游程长度的奇偶性相匹配,则不改变游程长度。方法三:将二值图像分块,使用一个与图像块大小相同的密钥二值图像块, 与每一个图像块按像素进行“与”运算,“与”运算的结果可以确定是否在该块 中嵌入数据,或嵌入怎样的数据。四,实验步骤下面以方法三为原理,进行实验。1.嵌入秘密信息主要思想:首先将载体图像分块,块数为秘密信息的二进制码个数,

3、 分块大 小为载体图像的长和宽分别除以块数;设定一个与图像块大小相同的密钥二值图像块,具体为一个8X8的数组,其中前4行全为1,后4行全为0;将载体图像 块与密钥二值图像块进行“与”运算。经过运算后,参与统计的像素变为前4行。接下来统计“有效”像素黑白的个数,某个图像区域B中黑色像素的个数大于“有效”像素一半,则表示嵌入0;如果白色像素的个数大于“有效”像素一半,则表示嵌入1。但是当需要嵌入的比特与所选区域的黑白像素的比例不一致 时,为了达到希望的像素关系,则需要修改一些像素的颜色。Matlab代码如下:msgfid=fopen(hidden.txt,T);%打开秘密文件msg,count=f

4、read(msgfid); fclose(msgfid); msg = str2bit(msg); msg = msg; count=count*8; io=imread(hunter.bmp);%读入载体图像watermarklen=count;%嵌入水印信息长度,也就是载体图像分块的数量值row col=size(io); l1=floor(row/watermarklen);%载体图像分块后的长度l2=floor(col/watermarklen);%载体图像分块后的宽度pixelcount=l1*l2;%每个分块总像素的数量值miyue=ones(6,8);zeros(2,8);%密钥

5、二值图像块percent=24; iw=io; in=io;%存放与运算后的图像信息%各原图像块与密钥块进行与运算 m=1; while m=watermarklen i=1; j=1; in(i:(i+l1-1),j:O+l2-1)=io(i:(i+l1-1),j:(j+l2-1)&miyue; i=i+8; j=j+8; m=m+1; endinblack(1,watermarklen)=0;% inwhite(1,watermarklen)=0;% n=1;while n=watermarklen某一个分块中黑色像素的个数某一个分块中白色像素的个数for i=l1*(n-1)+1:(l1

6、*n-2) %只计算有效前4行的黑白个数for j=l2*(n-1)+1:l2*nif in(i,j)=0inblack(1,n尸inblack(1,n)+1;%计算每个分块中的黑色像素的个数elseinwhite(1,n尸inwhite(1,n)+1;%计算每个分块中的白色像素的个数endendendn=n+1;endn=1;while n=percent;% 嵌入1的时候,黑色像素比白色像素多,需要修改一些像素的颜色 modcount(1,n)=inblack(1,n)-percent+1;k=1;for i=l1*(n-1)+1:(l1*n-2)for j=l2*(n-1)+1:l2*n

7、if (iw(i,j)=0&k=percent;% 嵌入0的时候,白色像素比黑色像素多,需要修改一些像素的颜色 modcount(1,n)=inwhite(1,n)-percent+1;k=1;for i=l1*(n-1)+1:(l1*n-2)for j=l2*(n-1)+1:l2*nif (iw(i,j)=1&k=modcount(1,n) iw(i,j)=0;k=k+1;endendendendendn=n+1;endn=1;iwblack(1,watermarklen)=0;%iwwhite(1,watermarklen)=0;%while n=watermarklenfor i=l1*

8、(n-1)+1:l1*nfor j=l2*(n-1)+1:l2*n if iw(i,j)=0iwblack(1,n尸iwblack(1,n)+1;% 的个数elseiwwhite(1,n)=iwwhite(1,n)+1;% 的个数end某一个分块中黑色像素的个数某一个分块中白色像素的个数计算每个分块中的黑色像素计算每个分块中的白色像素endendn=n+1; endfigure;imshow(hunter.bmp);imwrite(iw,huntermarked.bmp);figure;得到的结果如下图所示:imshow(huntermarked.bmp);这是隐藏前后载体图像变化的比较,可以

9、明显的看出图像经过存储秘密信息 的处理后图像发生了很大的变化,即出现了一条间断斜线,这是因为在存储秘密 信息时,如果图像块中0/1的比例与密文不一致,则需要改动载体图像的像素(常 常不止改变一个像素点),所以对载体图像的影响还是比较明显的。但是这种使用密钥二值图像块的方法比将整个图像块作为对象的方法效果稍微好一些,因为在分析和修改0/1个数时数量减少了,对载体图像的影响也稍 微减轻了一些。下面是使用密钥二值图像块和不使用密钥二值图像块的目标载体 的比较:读入载体图像2.提取秘密信息wi=imread(huntermarked.bmp);% row col=size(wi);l1=floor(r

10、ow/watermarklen);% l2=floor(col/watermarklen);% pixelblack(1,watermarklen)=0;% pixelwhite(1,watermarklen)=0;% n=1;while n=watermarklenfor i=l1*(n-1)+1:l1*nfor j=l2*(n-1)+1:l2*n if wi(i,j)=0载体图像分块后的长度载体图像分块后的宽度某一个分块中黑色像素的个数某一个分块中白色像素的个数watermarklen=80;%嵌入的水印信息的长度pixelblack(1,n尸pixelblack(1,n)+1;%计算每个

11、分块中的黑色像素的个数elsepixelwhite(1,n)=pixelwhite(1,n)+1;%计算每个分块中的白色像素的个数endendendn=n+1;endn=1;while npixelblack(1,n)%如果白色像素块多于黑色像素块,秘密信息为 1message(n,1)=1elsemessage(n,1)=0%如果黑色像素块多于白色像素块,秘密信息为endn=n+1; end%各提取的秘密信息转换成字符串out=bit2str(message);fid=fopen(message.txt, wt);fwrite(fid, out)fclose(fid);message 二1000C11110000001IC1100001100110I1000D0011011101010000110100000011111001010010101转换为字符串的结果:文件(F)编辑(E)格式9)查看 帮助30123456789五,实验总结采用游程编码方式隐藏的信息量较大,而且隐写后的载体图像和原始载体图 像从视觉上看差别不大,是一种较好的二值图像信息隐藏方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1