信息隐藏 实验三 LSB图像信息隐藏精要.doc
文本预览下载声明
实验三: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
end
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
显示全部