灰度图像可以进行位平面分解,图像的灰度值在0-255直接,所以可以将每个像素点的十进制数值都转变为八位的二进制,将所有像素点的这八位二进制数的同一位提取出来组成图像,就可以分解组成八张位平面图像。
在对图像影响最小的位平面图像中,进行一些数值的修改,人的肉眼难以察觉,所以可以将待嵌入的图像也转化为二进制,嵌入到这些位平面当中,从而实现图片的信息隐藏。
而提取的过程则是逆向地将嵌入后的图片的对应位置的数值再提取出来组合成图片。
嵌入函数:
function [stegoI,emD,bitsnum]=LSB_en(cover,face)
stegoI = cover; %构建一个与原载体图像相同大小的容器
num = numel(cover);%统计像素的个数
data = dec2bin(face);%将待嵌入数据转换成二进制形式
data = strcat(char(data)', '');%将其转换成字符数组
% data = cellstr(data)' 字符向量元胞数组
data = str2num(data(:));%将其转换成整数数组
bitsnum=numel(data);%统计待嵌入数据总长度
%先对载体图像最低位进行嵌入
k = 0;
for j=1:num
k = k + 1;
stegoI(j)=bitset(cover(j),1,data(k));%bitset函数将cover的第1位置换为data
end
%256*256*8 = 512*5122 所以仅用容器的一位无法嵌入所有数据
%再对载体图像次低位进行嵌入
for j=1:num
k = k + 1;
stegoI(j)=bitset(stegoI(j),2,data(k));
end
emD=data(1:bitsnum);%emD为嵌入的数据
end