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

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

一、系统架构设计

1.png


二、核心算法实现

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/contentalh/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

相关文章
|
9天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11142 101
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
9天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
5494 134
|
7天前
|
人工智能 并行计算 Linux
本地私有化AI助手搭建指南:Ollama+Qwen3.5-27B+OpenClaw阿里云/本地部署流程
本文提供的全流程方案,从Ollama安装、Qwen3.5-27B部署,到OpenClaw全平台安装与模型对接,再到RTX 4090专属优化,覆盖了搭建过程的每一个关键环节,所有代码命令可直接复制执行。使用过程中,建议优先使用本地模型保障隐私,按需切换云端模型补充功能,同时注重显卡温度与显存占用监控,确保系统稳定运行。
1900 5
|
6天前
|
人工智能 自然语言处理 供应链
【最新】阿里云ClawHub Skill扫描:3万个AI Agent技能中的安全度量
阿里云扫描3万+AI Skill,发现AI检测引擎可识别80%+威胁,远高于传统引擎。
1388 3
|
6天前
|
人工智能 Linux API
离线AI部署终极手册:OpenClaw+Ollama本地模型匹配、全环境搭建与问题一站式解决
在本地私有化部署AI智能体,已成为隐私敏感、低成本、稳定运行的主流方案。OpenClaw作为轻量化可扩展Agent框架,搭配Ollama本地大模型运行工具,可实现完全离线、无API依赖、无流量费用的个人数字助理。但很多用户在实践中面临三大难题:**不知道自己硬件能跑什么模型、显存/内存频繁爆仓、Skills功能因模型不支持工具调用而失效**。
3061 7