信息隐藏——MATLAB之基本操作实验

实验一:MATLAB基本操作实验

【实验目的】:

1.熟悉matlab基本功能;
2.熟悉matlab对图片矩阵的操作;
3.实现LSB信息隐藏

【实验内容】:

■一、图像翻转
■二、LSB的顺序嵌入和提取
■三、LSB的随机嵌入和提取

一.图像翻转
1)使用库函数imread()读取图片;
2)提取图片size:h,w,ch(高度,宽度,通道数);
3)初始化旋转之后的图片矩阵;
4)根据旋转的特点,将矩阵中的值根据向量旋转的特点赋给新矩阵;
pp = round(R*(p-c)+c);
5)选择区域进行图像处理;
对角线分割:if h>=w: image_new = image;
指定位置切割:if h >=150 && h<=300 && w>=150 && w<=300: image_new = image;
6)图像结果显示。
Subplot(331);subplot(332);subplot(333);…subplot(339);

二.LSB的顺序嵌入和提取
1)读取message.txt中的信息,并转化为二进制形式;

f_id = fopen(file,'r');
[msg,len_total] = fread(f_id,'ubit1');

2)读取图像,将图像LSB按位赋值为message中提取的信息;

ste_cover(f1,f2,1) = ste_cover(f1,f2,1) - mod(ste_cover(f1,f2,1),2) + msg(p,1);

3)将新图像写入。
4)注意!!!!!!!!!!不要使用.jpg格式!!!!!!!!!!!
5)将新图像读入(准备进行信息提取);
6)将新图像的LSB提取,并写入新的.txt文件

if bitand(ste_cover(f1,f2,1),1) == 1
             fwrite(frr,1,'ubit1');
             result(p,1) = 1;
         else
             fwrite(frr,0,'ubit1');
             result(p,1) = 0;

7)查看.txt文件结果,与原文件比对。
8)查看加入隐写噪声后的图片。
在这里插入图片描述

三.LSB的随机嵌入和提取
大致内容与上一个实验类似,只不过在选择LSB的时候不是顺序选择位置插入,而是经过了一个位置生成算法randinterval。

[row,col] = randinterval(ste_cover,len_total,key);

randinterval不是内置库函数,是实验手册上的一个随机数生成器,它可以根据key的值唯一的生成随机数序列。这样,只要隐写方和提取方都知道这个key,就可以加密传输数据了。
嵌入:

ste_cover(row(i),col(i),1) = ste_cover(row(i),col(i),1)-mod(ste_cover(row(i),col(i),1),2) + msg(p,1);

提取:

if bitand(ste_cover(row(i),col(i),1),1) == 1
             fwrite(frr,1,'ubit1');
             result(p,1) = 1;
         else
             fwrite(frr,0,'ubit1');
             result(p,1) = 0;

最终结果也是成功的…

【实验分析】:

性能方面没有测试,不过从结果上说还是比较成功。
其中有一个小插曲,就是我在使用.jpg图片格式进行隐写的时候,通过动态调试发现隐写过程没有任何问题,但在获取的时候,调用库函数imread之后立刻对图像矩阵进行取值分析发现,与所期望的值有些区别。百思不得其解之后,我选择用教材上的.bmp文件形式再做尝试,结果一次成功。
合理分析原因,可能是因为.jpg图片文件在生成时会进行压缩,也许会对LSB有影响。
总体来说是一次成功的实验,希望以后能继续努力!

【实验代码】

information_hiding

猜你喜欢

转载自blog.csdn.net/HizT_1999/article/details/106951286
今日推荐