LSB 图像隐写
实验要求
- Least Significant Bit 隐写法
LSB隐写法通过将秘密信息的二进制数据嵌入到图像像素的最低有效位中来实现信息的隐藏。由于只改变了最低有效位,肉眼难以察觉隐写前后的图像差异。
实验内容
-
准备材料
-
承载秘密的图像——cat.png
-
秘密图像——Matlab.png
-
工具——Matlab
-
-
代码
% 1. 将载体图片分成8个位平面,并显示在一个界面中
goodcat = imread('cat.png');
figure;
for i = 1:8
bitPlane = bitget(goodcat, i);
bitPlane = bitPlane * 202; % 适当调节颜色的强度
subplot(2, 4, i);
imshow(bitPlane);
title(['BitPlane', num2str(i)]);
end
% 2. 制作水印图片,计划嵌入第六个位平面(因为事先观察到该面有效信息占比大)
watermark = imread('Matlab.png');
watermarkBitPlane = bitget(watermark, 6);% get所有通道的第六位面
%3. 嵌入到最低有效位
badcat= bitset(goodcat, 1, watermarkBitPlane);% 向badcat的位面1赋值
figure;imshow(badcat);title('BadCat');
% 4. 提取嵌入的秘密信息
secretPlane = bitget(badcat,1);
secretPlane = secretPlane * 255;
figure;imshow(secretPlane);title('Secret');
注:将准备图片与代码文件置于同一目录下运行。
-
截图
- 将cat.png分为8个位平面并显示
- 嵌入后的图像(嵌入了第六个位面)
- 提取出的信息
实验小结
- `BitPlane = bitget(img, i);`截取图像img的第i位面(BitPlane)
- 每个通道的8bit数值越大,颜色表现强度越大
- 当RGB图像和灰度图像一同参与运算时,需要逐个指定通道(1、2、3);本实验没有出现这种情况
- `img_after = bitset(img_before, i, BitPlane)`将图像的第i位面覆写为某一位面