基于MATLAB的多媒体隐写与恢复系统实现

基于MATLAB的多媒体隐写与恢复系统实现


一、系统架构设计

graph TD
A[输入载体] --> B{载体类型}
B --> C[图片隐写]
B --> D[音频隐写]
B --> E[视频隐写]
B --> F[文本隐写]
C --> G[LSB/DCT/Watermark]
D --> H[频域嵌入/时域调制]
E --> I[帧间差分/3D-DCT]
F --> J[ASCII/Unicode编码]
G --> K[隐写]
H --> K
I --> K
J --> K
K --> L[隐写载体生成]
L --> M[恢复算法]
M --> N[特征提取]
N --> O[信息解码]

二、核心算法实现

1. 图片隐写(LSB+DCT复合算法)
%% 图片隐写(支持文本/二进制数据)
function stego_img = image_steganography(cover_img, secret_data, method)
    % 参数预处理
    [rows, cols, ~] = size(cover_img);
    secret_bin = dec2bin(secret_data, 8)'; % 转换为二进制矩阵
    
    % 选择嵌入方法
    switch method
        case 'LSB'
            % LSB嵌入(顺序嵌入)
            stego_img = cover_img;
            idx = 1;
            for i = 1:rows
                for j = 1:cols
                    for k = 1:3 % RGB三通道
                        if idx > numel(secret_bin)
                            return;
                        end
                        % 修改最低有效位
                        stego_img(i,j,k) = bitset(cover_img(i,j,k), 1, str2double(secret_bin(idx)));
                        idx = idx + 1;
                    end
                end
            end
            
        case 'DCT'
            % DCT嵌入(频域隐藏)
            stego_img = cover_img;
            block_size = 8;
            for i = 1:block_size:rows
                for j = 1:block_size:cols
                    % 分块DCT
                    block = im2double(cover_img(i:i+block_size-1,j:j+block_size-1));
                    dct_block = dct2(block);
                    
                    % 嵌入信息(中频系数修改)
                    info_bits = secret_bin(idx:idx+3);
                    for k = 1:4
                        coeff = dct_block(k,k);
                        coeff = bitset(floor(coeff), 2, str2double(info_bits(k)));
                        dct_block(k,k) = coeff;
                    end
                    
                    % 逆DCT
                    stego_img(i:i+block_size-1,j:j+block_size-1) = idct2(dct_block);
                    idx = idx + 4;
                end
            end
    end
end
2. 音频隐写(频域掩蔽法)
%% 音频隐写(WAV格式)
function stego_audio = audio_steganography(audio, secret_data)
    % 参数设置
    [fs, len] = size(audio);
    t = 0:1/fs:(len/fs)-1;
    
    % 载荷调制(AM调制)
    carrier = sin(2*pi*1000*t); % 1kHz载波
    modulated = audio + 0.1*secret_data*carrier;
    
    % 添加掩蔽噪声
    noise = 0.05*randn(size(audio));
    stego_audio = modulated + noise;
    
    % 保存为WAV文件
    audiowrite('stego_audio.wav', stego_audio, fs);
end
3. 视频隐写(帧间差分法)
%% 视频隐写(MP4格式)
function stego_video = video_steganography(video, secret_data)
    % 读取视频
    videoReader = VideoReader(video);
    numFrames = videoReader.NumFrames;
    
    % 逐帧处理
    stego_frames = zeros(numFrames, videoReader.Height, videoReader.Width, 3);
    idx = 1;
    for i = 1:numFrames
        frame = readFrame(videoReader);
        gray = rgb2gray(frame);
        
        % 帧间差分嵌入
        if i > 1
            diff = abs(gray - prev_gray);
            mask = diff > 30; % 运动区域掩膜
            bit_pos = find(mask(:)==1, idx);
            if isempty(bit_pos)
                continue;
            end
            bit = dec2bin(secret_data(idx), 1);
            frame(bit_pos) = bit2dec(bit);
            idx = idx + 1;
        end
        
        stego_frames(i,:,:) = frame;
        prev_gray = gray;
    end
    
    % 生成视频
    stego_video = VideoWriter('stego_video.mp4', 'MPEG-4');
    stego_video.FrameRate = videoReader.FrameRate;
    open(stego_video);
    writeVideo(stego_video, stego_frames);
    close(stego_video);
end
4. 文本隐写(Unicode编码)
%% 文本隐写(TXT/PDF)
function stego_text = text_steganography(cover_text, secret_data)
    % Unicode编码嵌入
    secret_utf16 = char(secret_data);
    cover_utf16 = char(cover_text);
    
    % 替换特殊字符
    replacement = [char(8203), char(8204)]; % 零宽空格
    stego_utf16 = replace(cover_utf16, ' ', replacement(idx:idx+1));
    
    stego_text = string(stego_utf16);
end

三、隐写特征分析

载体类型 嵌入容量 鲁棒性 典型应用场景
图片 0.1-1 bpp 数字水印、版权保护
音频 0.05-0.5 bps 隐蔽通信、防篡改
视频 0.5-2 bpp 中高 秘密监控、证据保全
文本 0.01-0.1%字符 极低 隐写术、防审查

四、恢复算法实现

1. 图片信息提取(DCT域)
function secret_data = extract_image_data(stego_img, method)
    [rows, cols, ~] = size(stego_img);
    secret_bin = '';
    
    switch method
        case 'LSB'
            for i = 1:rows
                for j = 1:cols
                    for k = 1:3
                        bit = bitget(stego_img(i,j,k), 1);
                        secret_bin = [secret_bin, num2str(bit)];
                    end
                end
            end
            
        case 'DCT'
            block_size = 8;
            for i = 1:block_size:rows
                for j = 1:block_size:cols
                    block = im2double(stego_img(i:i+block_size-1,j:j+block_size-1));
                    dct_block = dct2(block);
                    
                    % 提取中频系数
                    for k = 1:4
                        coeff = dct_block(k,k);
                        bit = bitget(floor(coeff), 2);
                        secret_bin = [secret_bin, num2str(bit)];
                    end
                end
            end
    end
    
    % 转换为原始数据
    secret_data = bin2dec(reshape(secret_bin, 8, []).');
end
2. 音频信息提取
function secret_data = extract_audio_data(stego_audio, fs)
    t = 0:1/fs:(length(stego_audio)/fs)-1;
    carrier = sin(2*pi*1000*t); % 与嵌入时相同频率
    
    % 解调
    modulated = stego_audio(:,1); % 单声道处理
    envelope = abs(hilbert(modulated));
    secret_signal = envelope .* carrier;
    
    % 解码
    secret_data = downsample(secret_signal, 10);
end

参考代码 在matlab中实现文本、音频、图片、视频的隐写和恢复 www.youwenfan.com/contentcsr/55110.html

五、性能评估指标

%% 评估函数
function [psnr, nc] = evaluate_steganography(original, stego)
    % PSNR计算
    mse = mean((original(:) - stego(:)).^2);
    if mse == 0
        psnr = Inf;
    else
        psnr = 10*log10(255^2/mse);
    end
    
    % 归一化容量(NC)
    secret_size = numel(secret_data);
    cover_size = numel(original);
    nc = secret_size / cover_size;
end

六、完整工程代码结构

Steganography_Toolbox/
├── src/
│   ├── image/          # 图片隐写算法
│   ├── audio/          # 音频隐写算法
│   ├── video/          # 视频隐写算法
│   └── text/           # 文本隐写算法
├── test/               # 测试案例
│   ├── test_image.m    # 图片隐写测试
│   ├── test_audio.m    # 音频隐写测试
│   └── test_video.m    # 视频隐写测试
├── utils/            # 工具函数
│   ├── bit_manip.m     # 位操作工具
│   └── file_io.m       # 文件读写工具
└── README.md           # 使用说明

七、应用场景示例

  1. 数字版权保护

    % 在JPEG图片中嵌入版权信息
    cover_img = imread('photo.jpg');
    secret = 'Copyright © 2026';
    stego_img = image_steganography(cover_img, secret, 'DCT');
    imwrite(stego_img, 'protected_photo.jpg');
    
  2. 隐蔽通信

    % 音频信道传输秘密指令
    fs = 44100;
    t = 0:1/fs:5;
    carrier = sin(2*pi*18000*t);
    secret_msg = 'Turn left';
    audio_signal = audio_steganography(carrier, secret_msg);
    audiowrite('secret_audio.wav', audio_signal, fs);
    
  3. 视频监控取证

    % 在监控视频中嵌入时间戳
    video = VideoReader('surveillance.mp4');
    secret = datetime('now','Format','yyyyMMddHHmmss');
    stego_video = video_steganography(video, secret);
    

八、参考文献

  1. 陈晓明等. 基于DCT域的数字水印鲁棒性研究[J]. 计算机学报, 2023
  2. 李航. 统计学习方法(第2版)[M]. 清华大学出版社, 2021
  3. MathWorks官方文档: audioSteganography
  4. 张伟. 视频隐写算法的对抗性研究[D]. 北京邮电大学, 2024

 

专注于matlab/simulink,电子电路,编程