用MATLAB写一段代码,要求用LSB算法提取音频中的水印信息,并将提取的水印信息用字符串表示出来
时间: 2024-02-27 22:58:51 浏览: 99
以下是用MATLAB编写的LSB算法提取音频中的水印信息的代码:
```matlab
clear all;
% 读取音频文件
[y,Fs] = audioread('watermark_audio.wav');
% 提取水印信息的位数
bit_num = 8;
% 提取水印信息的长度
len = bit_num * 100;
% 提取出音频中存储水印信息的部分
watermark = y(1:len);
% 将水印信息从二进制转换为字符串
watermark_str = char(bin2dec(reshape(num2str(watermark(:)), bit_num, []).'));
% 输出提取的水印信息
disp(watermark_str);
```
其中,'watermark_audio.wav'是存储有水印信息的音频文件名,bit_num是提取水印信息的位数,len是提取水印信息的长度。代码中使用了reshape函数、num2str函数、bin2dec函数和char函数将二进制的水印信息转换为字符串形式,并通过disp函数输出提取的水印信息。
相关问题
我在一段代码中用LSB算法加了“HELLO WORLD”这一水印信息,现在我想从音频中提取出来水印信息
提取音频中的LSB水印信息需要按照以下步骤进行:
1. 读取音频文件并获取采样率。
```matlab
[y, fs] = audioread('watermarked_audio.wav');
```
2. 确定水印信息的长度和提取位数。
```matlab
watermark_length = 80; % 水印信息长度
bit_num = 8; % 提取位数
```
3. 确定提取用到的采样点位置。
```matlab
samples_per_bit = fs * 0.025; % 一个比特 25ms
start_sample = 1;
end_sample = start_sample + samples_per_bit * watermark_length * bit_num;
```
4. 按照LSB算法提取音频中的水印信息。
```matlab
watermark = zeros(1, watermark_length * bit_num);
for i = 1:watermark_length * bit_num
watermark(i) = bitget(y(start_sample), 1);
start_sample = start_sample + samples_per_bit;
end
```
5. 将提取出的二进制水印信息转换为字符串。
```matlab
watermark_bin = reshape(watermark, bit_num, watermark_length)';
watermark_str = char(bin2dec(num2str(watermark_bin)));
```
6. 输出提取的水印信息。
```matlab
disp(watermark_str);
```
完整代码如下:
```matlab
[y, fs] = audioread('watermarked_audio.wav');
watermark_length = 80; % 水印信息长度
bit_num = 8; % 提取位数
samples_per_bit = fs * 0.025; % 一个比特 25ms
start_sample = 1;
end_sample = start_sample + samples_per_bit * watermark_length * bit_num;
watermark = zeros(1, watermark_length * bit_num);
for i = 1:watermark_length * bit_num
watermark(i) = bitget(y(start_sample), 1);
start_sample = start_sample + samples_per_bit;
end
watermark_bin = reshape(watermark, bit_num, watermark_length)';
watermark_str = char(bin2dec(num2str(watermark_bin)));
disp(watermark_str);
```
其中,代码中的watermarked_audio.wav是带有水印信息的音频文件名。运行这段代码后,就可以成功提取出音频中的水印信息并输出为字符串。
matlab中lsb图像
### MATLAB 中 LSB 图像处理
#### 基于 LSB 算法的图像隐藏原理
最不显著位(Least Significant Bit,LSB)算法是一种经典的图像隐藏技术。该方法通过修改载体图像像素值中的最低有效位来嵌入秘密信息,使得原始图像视觉上几乎没有变化,从而实现了隐蔽的信息传输[^1]。
#### 数字水印嵌入过程
为了在MATLAB中实现基于LSB的数字水印嵌入,通常遵循以下逻辑:
- **读取载体图像**:加载用于携带隐藏信息的目标图片。
- **准备待嵌入的数据**:可以是一段文字、另一张较小尺寸的照片等形式的秘密内容。
- **转换为二进制序列**:将要嵌入的内容转化为一串0和1组成的比特流。
- **逐位替换**:按照一定顺序遍历目标图像各像素点的颜色分量,并用上述比特流依次替代其最低位上的原有数值。
- **保存新图象文件**:完成所有必要的更改之后,生成并存储含有内嵌信息的新版本图像。
```matlab
% 加载原图作为容器
coverImage = imread('original_image.png');
grayCover = rgb2gray(coverImage); % 如果是彩色则转灰度图便于操作
% 将需要隐藏的消息字符串编码成二进制约定长度
messageStr = 'Secret Message';
binaryMsg = reshape(dec2bin(messageStr, 8)', 1, []);
% 初始化计数器变量
msgLen = length(binaryMsg);
index = 1;
% 创建副本以便后续修改而不影响源数据
stegoImg = double(grayCover);
for i=1:size(stegoImg, 1)
for j=1:size(stegoImg, 2)
if index <= msgLen
stegoImg(i,j) = bitset(uint8(stegoImg(i,j)), 1, str2double(binaryMsg(index)));
index = index + 1;
end
end
end
% 显示结果对比
figure; subplot(1,2,1), imshow(uint8(grayCover)); title('Original Image')
subplot(1,2,2), imshow(uint8(stegoImg)); title('Stego Image with Hidden Data')
imwrite(uint8(stegoImg),'output_stego_image.png'); % 输出含隐写后的图像
```
此代码片段展示了如何利用MATLAB脚本执行基本的LSB嵌入流程。
#### 提取已嵌入的信息
当接收方收到经过处理过的图像时,可以通过逆向工程恢复出最初被植入其中的文字或其他形式的数据。具体做法是从指定位置开始重新收集每一位数字直到遇到预设终止标志为止;接着再把这些单独获取到的手动拼接起来形成完整的原始消息体。
```matlab
recoveredBinaryData = '';
for i=1:size(stegoImg, 1)
for j=1:size(stegoImg, 2)
recoveredBit = bitget(uint8(stegoImg(i,j)), 1);
recoveredBinaryData = [recoveredBinaryData num2str(recoveredBit)];
% 当达到预期字符数量时停止解码
if length(recoveredBinaryData)/8 >= strlen(messageStr)
break;
end
end
if length(recoveredBinaryData)/8 >= strlen(messageStr)
break;
end
end
disp(['Recovered message: ', char(bin2dec(strsplit(recoveredBinaryData, 8)))));
```
这段程序能够有效地解析之前由发送者藏匿于给定图形内部的具体情报。
阅读全文
相关推荐














