- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息隐藏实验三LSB图像信息隐藏剖析
实验三:LSB图像信息隐藏
一、实验目的
了解信息隐藏中最常用的LSB算法的特点,掌握LSB算法原理,设计并实现一种基于图像的LSB隐藏算法;了解如何通过峰值信噪比来对图像进行客观评价,并计算峰值信噪比值。
二、实验环境
(1)Windows 7操作系统;
(2)MATLAB R2012b版本软件;
(3)BMP格式灰度图像文件。
三、原理简介
任何多媒体信息在数字化时都会产生物理随机噪声,而人的感官系统对这些随机噪声并不敏感。替换技术就是利用这个原理,通过使用秘密信息比特替换随机噪声,从而实现信息隐藏目的。
在BMP灰度图像的位平面中,每个像素值为8比特二进制,表示该点亮度。
图像高位平面对图像感官质量起主要作用,去除图像最低几个位平面并不会造成画面质量的明显下降。利用这个原理可用秘密信息(或称水印信息)替代载体图像低位平面以实现信息嵌入。
本算法选用最低位平面来嵌入秘密信息。最低位平面对图像的视觉效果影响最轻微,但很容易受噪声影响和攻击,可采用冗余嵌入的方式来增强稳健性加以解决,即在一个区域(多个像素)中嵌入相同的信息,提取时根据该区域中的所有像素判断。
四、实验步骤
1. 隐藏提取及测试
算法分为三个部分实现:
(1)隐藏算法;
(2)提取算法;
(3)测试脚本。
1)隐藏算法
源代码hide_lis.m如下:
function o = hide_lsb(block,data,I)
%function o = hide_lsb(block,data,I)
%隐藏提取及测试
%block:隐藏的最小分块大小
%data:秘密信息
%I:原始载体
si = size(I);
lend = length(data);
N = floor(si(2)/block(2));%将图像划分为M*N个小块
M = min(floor(si(1)/block(1)),ceil(lend/N));
o = I;
for i = 0 : M-1 %计算每小块隐藏的秘密信息
rst = i*block(1) + 1;
red = (i+1)*block(1);
for j = 0 : N-1 %计算每小块隐藏的秘密信息的序号
idx = i*N + j + 1;
if idx lend
break;
end
%取每小块隐藏的秘密信息
bit = data(idx);
%计算每小块水平方向起止位置
cst = j*block(2) + 1;
ced = (j+1)*block(2);
%将每小块最低位平面替换为秘密信息
o(rst:red,cst:ced) = bitset(o(rst:red,cst:ced),1,bit);
end
nd
2)提取算法
源代码dh_lsb.m如下:
function out = dh_lsb(block,I)
%function out = dh_lsb(block,I)
%源代码dh_lsb.m如下:
%block:隐藏的最小分块大小
%I:携密载体
si = size(I);
%将图像划分为M*N个小块
N = floor(si(2)/block(2));
M = floor(si(1)/block(2));
out = [];
%计算比特1判决阀值:每小块半数以上元素隐藏是比特1时,判决该小块嵌入信息为1
thr = ceil((block(1)*block(2) + 1)/2);
idx = 0;
for i = 0 : M-1
%计算每小块垂直方向起止位置
rst = i*block(1) + 1;
red = (i+1)*block(1);
for j = 0 : N-1
%计算每小块将要数据的秘密信息的序号
idx = i*N + j + 1;
%计算每小块水平方向起止位置
cst = j*block(2) + 1;
ced = (j + 1)*block(2);
%提取小块最低位平面,统计1比特个数,判决输出秘密信息
tmp = sum(sum(bitget(I(rst : red,cst : ced),1)));
if (tmp = thr)
out(idx) = 1;
else
out(idx) = 0;
end
文档评论(0)