用MATLAB 对灰度图像进行位平面分解,并显示各个位平面的内容,然后分别在各位平面嵌入自己设计的二值图内容,显示嵌入后各位平面效果以及组合的图像,将LSB嵌入水印的图像分别保存为bmp和jpg文件,然后再打开,查看最低位的内容发生的变化。
时间: 2024-10-19 17:10:04 浏览: 18
在MATLAB中,你可以通过以下几个步骤对灰度图像进行位平面分解、嵌入信息并保存结果:
1. **加载和预处理图像**:
```matlab
img = imread('your_gray_image.bmp'); % 替换为你要处理的图片路径
```
2. **位平面分解**:
MATLAB的`im2double`函数可以将图像转换为0到1之间的双精度浮点数,方便操作。接下来,位平面分解通常会将图像分为8个位平面,每个对应图像的最左上角的一个像素位。
```matlab
planes = bitand(img, [256*(ones(1,8) - ones(1,8).^8)]);
```
3. **嵌入自定义二值图**:
设定你要嵌入的信息(比如二值图`watermark`),然后选择最低有效位(LSB,Least Significant Bit)进行嵌入,可以逐个位平面上进行。
```matlab
for i = 1:8
planes(:, :, i) = im2uint8(bitshift(planes(:, :, i), -1)); % 移除最高位
planes(:, :, i) = planes(:, :, i) | uint8(watermark); % 将水印插入最低位
end
```
4. **组合位平面并显示**:
使用`repmat`和`bitwise_or`合并位平面回原。
```matlab
combined = reshape(repmat(uint8([1:8]), size(img, 1), size(img, 2)), size(img));
result = bitwise_or(combined, planes);
imshow(result)
```
5. **保存嵌入水印后的图像**:
```matlab
imwrite(result, 'embedded_watermark_' ~mod(i, 2) '.bmp', 'bmp'); % 按照二进制位保存,如.bmp或.jpg
imwrite(result, 'embedded_watermark_' ~mod(i, 2) '.jpg', 'jpg');
```
6. **验证嵌入效果**:
打开嵌入水印后保存的图像,检查是否有明显变化,特别是在最低位平面(通常为第一张保存的.bmp或.jpg)。
阅读全文