> # ♻️ 资源
> **大小:** 535KB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010685**](https://www.yuque.com/sxbn/ks/100010685)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87425381**](https://download.csdn.net/download/s1t16/87425381)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
## 1. 二值图像中的信息隐藏
### 1.1. 二值图像
由黑白象素的分布构成图像。
### 1.2. 通常方法
利用图像区域中黑色象素的个数对秘密信息进行编码。
## 2. 二值图像信息隐藏的两种方法
### 2.1. 方法一
#### 2.1.1. 嵌入
- 把一个二值图像分成 L(m) 个矩形图像区域 Bi ,如果其中黑色象素的个数大于一半,则表示嵌入 0 ;如果白色象素的个数大于一半,则表示嵌入 1 。
- 当需要嵌入的比特与所选区域的黑白象素的比例不一致时,为了达到希望的象素关系,则需要修改一些象素的颜色。
- 修改应遵循一定的规则,原则是不引起感观察觉。
- 修改应在黑白区域的边缘进行 。
#### 2.1.2. 需注意的细节
- 应考虑有一定的冗余度。确定有效区域。
- 确定两个阈值 R1 > 50% 和 R0 < 50% ,以及一个健壮性参数 λ 。隐藏 0 时,该块的黑色象素的个数应属于 [R1 , R1 + λ] 隐藏 1 时,该块的黑色象素的个数应属于 [R0 - λ , R0] 。
- 如果为了适应所嵌入的比特,目标块必须修改太多的象素,就把该块设为无效。
- 标识无效块:将无效块中的象素进行少量的修改,使得其中黑色象素的百分比大于 R1 + 3λ ,或者小于 R0 - 3λ 。
#### 2.1.3. 提取
- 判断每一个图像块黑色象素的百分比,如果大于 R1 + 3λ ,或者小于 R0 - 3λ ,则跳过这样的无效块。
- 如果在 [R1 , R1 + λ] 或者 [R0 - λ , R0] 的范围内,则正确提取出秘密信息 0 或 1 。
### 2.2. 方法二
利用游程编码的方法,例:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714357126761-46e61b41-2b52-41db-a397-ce2a920e4447.png#averageHue=%23cccccc&from=url&id=ZgMc6&originHeight=161&originWidth=830&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
编码:< a0, 3 > < a1, 5 > < a2, 4 > < a3, 2 > < a4, 1 >
#### 2.2.1. 嵌入
- 修改二值图像的游程长度。
- 如果秘密信息位是 0 ,则修改该游程长度为偶数;如果为 1 ,则修改游程长度为奇数;如果秘密信息的取值与游程长度的奇偶性相匹配,则不改变游程长度。
#### 2.2.2. 提取
- 根据游程长度的奇偶性提取出秘密信息。
## 3. 代码实现与解释
使用 MATLAB 实现了第二种方法,即 2.2. 中的利用游程编码的方法,用 decode.m 实现秘密信息嵌入,用 encode.m 实现秘密信息提取,嵌入时用到了 str2bit 和 Vector2Matrix 两个函数做待隐藏信息的编码处理,提取时用到了 bit2str 函数解码比特串为正常字符串。
### 3.1. encode.m
```
clear all;
oi=imread('载体图片.bmp');%打开载体图像
[row col]=size(oi);
oi=oi(:);%将矩阵竖向排开变成一列
len=size(oi);
%统计游程长度
i=1;
j=1;
while i<len(1)
or=oi(i,1);
count=1;
while (i<len(1)&&oi(i+1,1)==or)
i=i+1;
count=count+1;
end
RLE(j)=count;
j=j+1;
i=i+1;
end
if i==len(1)
RLE(j)=1;
end
RLE=RLE';
%将秘密信息转化为二进制
msgfid=fopen('隐藏信息.txt','r');%打开秘密文件
[msg,msgcount]=fread(msgfid);
fclose(msgfid);
msg = str2bit(msg);
msg = msg';
msgcount=msgcount*8;
%利用游程编码的方法将秘密信息嵌入图片
for l=1:msgcount
modpoint=0;
for x=1:2*l
modpoint=modpoint+RLE(x,1);
end
if msg(l,1)==0
if ((mod(RLE(2*l,1),2)~=0)&&(RLE(2*1+1,1)~=1))
oi(modpoint+1,1)=mod((oi(modpoint+1,1)+1),2);
end
else
if ((mod(RLE(2*l,1),2)==0)&&(RLE(2*1+1,1)~=1))
oi(modpoint+1,1)=mod((oi(modpoint+1,1)+1),2);
end
end
end
%存储处理后的图片
m1=Vector2Matrix(oi,row);%将数组转换成为二维矩阵
imwrite(m1,'载体图片_隐藏信息.bmp');
%显示处理前后的图片
figure;
imshow('载体图片.bmp');
title('处理前');
figure;
imshow('载体图片_隐藏信息.bmp');
title('处理后');
```
待隐藏信息保存在 隐藏信息.txt 中,取出信息编码为二进制比特串才能进行隐藏。为了方便处理,先将图片信息存到一维数组中对其游程的奇偶性做更改,再转换为二维数组存回图片,完成信息隐藏。
### 3.2. decode.m
```
clear all;
oi=imread('载体图片_隐藏信息.bmp'); %打开携密图像
[row col]=size(oi);
oi=oi(:);%将矩阵竖向排开变成一列
len=size(oi);
%统计游程长度
i=1;
j=1;
while i<len(1)
or=oi(i,1);
count=1;
while (i<len(1)&&oi(i+1,1)==or)
i=i+1;
count=count+1;
end
RLE(j)=count;
j=j+1;
i=i+1;
end
if i==len(1)
RLE(j)=1;
end
RLE=RLE';
%将游程信息提取为二进制比特串
msgcount=256;
for i=1:msgcount
msg(i,1)=0;
end
for l=1:msgcount
if mod(RLE((2*l),1),2)==0
msg(l,1)=0; %如果游程的值为偶数,表示隐藏的信息为0
else
msg(l,1)=1; %如果游程的值为奇数,表示隐藏的信息为1
end
end
%将比特串解码为字符串后保存到文件
out=bit2str(msg);
fid=fopen('提取信息.txt', 'wt');
fwrite(fid, out);
fclose(fid);
```
提取与隐藏类似,但只需要对隐藏信息的载体图片的游程进行统计以获得相应的二进制比特串,之后再解码为正常的字符串即可。
### 3.3. 字符串处理函数
见文件 str2bit.mVector2Matrix.mbit2str.m ,分别用来:将字符串编码为比特串、将数组转换成为二维矩阵、将比特串解码为字符串,比较简单,不做详细解释。
## 4. 实验结果展示
### 4.1. 原始图片
载体图片.bmp
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714357126950-394cf5c9-a088-40e7-84a6-cf8b93bef674.png#averageHue=%23b5b5b5&from=url&id=tB8oS&originHeight=593&originWidth=596&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
### 4.2. 待隐藏秘密信息
隐藏信息.txt
### 4.3. 嵌入秘密信息后的图片
载体图片_隐藏信息.bmp
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714357127031-248904f5-9b93-4f71-a58d-28914ad6303e.png#averageHue=%23b5b5b5&from=url&id=XmRDD&originHeight=593&originWidth=596&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
### 4.4. 从图片提取的秘密信息
提取信息.txt
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010685 使用 MATLAB 实现了第二种方法,即 2.2. 中的利用游程编码的方法,用 decode.m 实现秘密信息嵌入,用 encode.m 实现秘密信息提取,嵌入时用到了 str2bit 和 Vector2Matrix 两个函数做待隐藏信息的编码处理,提取时用到了 bit2str 函数解码比特串为正常字符串。
资源推荐
资源详情
资源评论
收起资源包目录
100010685-基于 MATLAB 实现的二值图像中的信息隐藏.zip (14个子文件)
erzhimaster
LICENSE 1KB
1410658_二值图像的信息隐藏实验报告.pdf 524KB
代码
str2bit.m 541B
隐藏信息.txt 21B
载体图片.bmp 44KB
toStr.m 170B
encode.m 1KB
Vector2Matrix.m 558B
bit2str.m 202B
decode.m 749B
结果
提取信息.txt 32B
载体图片_隐藏信息.bmp 346KB
README.md 7KB
2.2.bmp 522KB
共 14 条
- 1
资源评论
- xingbao12312023-04-19非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
- m0_741581952024-03-20资源使用价值高,内容详实,给了我很多新想法,感谢大佬分享~
神仙别闹
- 粉丝: 2687
- 资源: 7642
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功