使用matlab实现lsb隐写
时间: 2023-12-06 14:18:22 浏览: 37
实现 LSB 隐写需要完成以下两个步骤:
1. 将待隐藏的信息转换成二进制序列。
2. 将二进制序列嵌入到图像的 LSB 位中。
下面是一个简单的 Matlab 实现:
```matlab
% 读取图像
img = imread('lena.png');
% 将待隐藏信息转换成二进制序列
msg = 'Hello, World!'; % 待隐藏信息
msg_bin = dec2bin(msg); % 转换成二进制序列
msg_bin = msg_bin(:); % 将二进制序列展开为一维向量
% 将二进制序列嵌入到图像的 LSB 位中
img_bin = dec2bin(img); % 将图像转换成二进制序列
img_bin(:, end) = msg_bin; % 将待隐藏信息嵌入到 LSB 位中
img_stego = uint8(bin2dec(img_bin)); % 将二进制序列转换成图像
% 显示嵌入后的图像
imshow(img_stego);
```
该代码首先读取一张图像(这里以 `lena.png` 为例),然后将待隐藏信息转换成二进制序列,并将其嵌入到图像的 LSB 位中,最后将得到嵌入信息后的图像,并通过 `imshow` 函数显示出来。需要注意的是,嵌入信息后的图像 `img_stego` 的数据类型应该为 `uint8`,因为图像的像素值范围通常为 0~255。
相关问题
基于matlab的lsb隐写代码
LSB隐写是一种基础的隐写术,可以将一些秘密信息隐藏到图像或者音频等媒体文件中。下面是一个基于MATLAB实现的LSB隐写代码示例:
```matlab
clc;
clear all;
% 设置秘密信息
secretMessage = 'Hello, world!';
% 读取载体图像
carrierImage = imread('carrierImage.bmp');
carrierImageSize = size(carrierImage);
% 显示载体图像
subplot(2, 2, 1);
imshow(carrierImage);
title('原始载体图像');
% 将秘密信息转换为二进制字符串
secretMessageBin = dec2bin(uint8(secretMessage), 8)';
secretMessageBin = secretMessageBin(:)';
% 检查秘密信息是否太长
if length(secretMessageBin) > numel(carrierImage)
error('秘密信息太长了!');
end
% 将秘密信息插入到载体图像中
carrierImageBin = dec2bin(carrierImage(:), 8)';
carrierImageBin(1:length(secretMessageBin)) = secretMessageBin;
carrierImageBin = reshape(carrierImageBin, size(carrierImage));
carrierImageOut = uint8(bin2dec(carrierImageBin));
% 显示带有秘密信息的载体图像
subplot(2, 2, 2);
imshow(carrierImageOut);
title('带有秘密信息的载体图像');
% 保存带有秘密信息的载体图像
imwrite(carrierImageOut, 'carrierImageOut.bmp');
% 提取秘密信息
secretMessageBinOut = carrierImageBin(1:length(secretMessageBin));
secretMessageOut = char(bin2dec(reshape(secretMessageBinOut, 8, [])'));
% 显示提取出的秘密信息
subplot(2, 2, [3 4]);
text(0.5, 0.5, secretMessageOut, 'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle', 'FontSize', 16);
axis off;
title('提取出的秘密信息');
```
这个代码示例中,我们首先读取了一个名为`carrierImage.bmp`的载体图像,然后将一个简单的秘密信息(`Hello, world!`)插入到了载体图像中。插入秘密信息的方法是将秘密信息转换为二进制字符串,然后将二进制字符串逐位插入到载体图像的每个像素的最低位中。最后,我们提取出了秘密信息并将其显示出来。
请注意,这个示例代码并没有进行加密,仅仅是将秘密信息隐藏到了载体图像中。如果想要更加安全的隐写,需要考虑使用加密算法对秘密信息进行保护。
LSB隐写matlab
LSB隐写是一种常见的信息隐藏技术,可以将秘密信息嵌入到图像或音频等多媒体文件中,而不影响原始文件的质量。在Matlab中实现LSB隐写可以使用imread和imwrite函数读取和写入图像文件,使用bitget和bitset函数获取和设置像素值的二进制位,从而实现信息的嵌入和提取。
以下是一个简单的LSB隐写Matlab代码示例:
```matlab
% 读取原始图像
img = imread('lena.png');
% 将秘密信息转换为二进制序列
msg = 'Hello, world!';
msg_bin = dec2bin(msg, 8) - '0'; % 转换为数字数组
% 在图像的最低有效位(LSB)中嵌入秘密信息
idx = 1;
for i = 1:size(img, 1)
for j = 1:size(img, 2)
if idx > size(msg_bin, 1)
break;
end
img(i, j, 1) = bitset(img(i, j, 1), 1, msg_bin(idx));
idx = idx + 1;
end
if idx > size(msg_bin, 1)
break;
end
end
% 保存含有秘密信息的图像
imwrite(img, 'lena_secret.png');
% 从含有秘密信息的图像中提取秘密信息
idx = 1;
msg_bin2 = zeros(size(msg_bin));
for i = 1:size(img, 1)
for j = 1:size(img, 2)
if idx > size(msg_bin, 1)
break;
end
msg_bin2(idx) = bitget(img(i, j, 1), 1);
idx = idx + 1;
end
if idx > size(msg_bin, 1)
break;
end
end
msg2 = char(bin2dec(char(msg_bin2 + '0' )))'; % 转换为字符数组
disp(msg2); % 输出提取的秘密信息
```