基于LSB匹配的隐写术MATLAB实现

一、核心算法原理

LSB匹配隐写术通过动态调整像素的最低有效位(LSB),使修改后的LSB与秘密信息比特匹配,而非强制替换。其核心步骤包括:

  1. 像素匹配:若载体像素LSB与秘密信息比特不一致,通过±1调整像素值,使LSB匹配。
  2. 动态选择方向:优先选择调整方向使像素值不超出0-255范围,减少图像失真。
  3. 统计隐蔽性:相比传统LSB替换,显著降低像素值奇偶分布的统计异常。

二、MATLAB实现代码
1. 预处理函数
matlab 复制代码
function [carrier, watermark] = preprocess(carrier_img, watermark_img)
    % 转换为灰度图像
    if size(carrier_img, 3) == 3
        carrier = rgb2gray(carrier_img);
    else
        carrier = carrier_img;
    end
    
    if size(watermark_img, 3) == 3
        watermark = rgb2gray(watermark_img);
    else
        watermark = watermark_img;
    end
    
    % 调整水印大小与载体一致
    [M, N] = size(carrier);
    watermark = imresize(watermark, [M, N]);
    
    % 二值化水印(阈值自适应)
    threshold = graythresh(watermark); % Otsu's方法
    watermark = imbinarize(watermark, threshold);
end
2. LSB匹配嵌入函数
matlab 复制代码
function stego_img = lsb_match_embed(carrier, watermark)
    [M, N] = size(carrier);
    stego_img = double(carrier);
    
    for i = 1:M
        for j = 1:N
            % 提取载体像素LSB
            carrier_bit = mod(carrier(i,j), 2);
            % 提取水印比特
            watermark_bit = watermark(i,j);
            
            % 匹配调整
            if carrier_bit ~= watermark_bit
                if stego_img(i,j) < 255
                    stego_img(i,j) = stego_img(i,j) + 1; % +1调整
                else
                    stego_img(i,j) = stego_img(i,j) - 1; % -1调整
                end
            end
        end
    end
    
    stego_img = uint8(stego_img);
end
3. 秘密信息提取函数
matlab 复制代码
function extracted_watermark = lsb_match_extract(stego_img, rows, cols)
    [M, N] = size(stego_img);
    extracted_watermark = zeros(rows, cols);
    
    for i = 1:rows
        for j = 1:cols
            % 提取LSB
            bit = mod(stego_img(i,j), 2);
            extracted_watermark(i,j) = bit;
        end
    end
end
4. 主程序测试
matlab 复制代码
% 读取载体与水印图像
carrier_img = imread('lena.jpg');
watermark_img = imread('watermark.png');

% 预处理
[carrier, watermark] = preprocess(carrier_img, watermark_img);

% 嵌入水印
stego_img = lsb_match_embed(carrier, watermark);

% 保存隐写图像
imwrite(stego_img, 'stego_image.png');

% 提取水印
extracted_watermark = lsb_match_extract(stego_img, size(watermark,1), size(watermark,2));

% 显示结果
figure;
subplot(1,3,1); imshow(carrier); title('原始载体');
subplot(1,3,2); imshow(watermark); title('原始水印');
subplot(1,3,3); imshow(extracted_watermark); title('提取水印');

三、关键技术改进
  1. 动态范围调整

    在调整像素值时,优先选择不越界的调整方向(如接近255时选择减1),避免溢出:

    matlab 复制代码
    if stego_img(i,j) < 255
        stego_img(i,j) = stego_img(i,j) + 1;
    else
        stego_img(i,j) = stego_img(i,j) - 1;
    end
  2. 自适应二值化

    使用Otsu's方法自动选择二值化阈值,提升水印对比度:

    matlab 复制代码
    threshold = graythresh(watermark);
    watermark = imbinarize(watermark, threshold);
  3. 多通道扩展

    支持RGB图像的独立通道嵌入(以红色通道为例):

    matlab 复制代码
    % 选择嵌入通道(1:R, 2:G, 3:B)
    color_channel = 1;
    carrier(:,:,color_channel) = lsb_match_embed(carrier(:,:,color_channel), watermark);

四、应用场景
  1. 数字版权保护 在社交媒体图片中嵌入作者水印,防止盗用。
  2. 隐蔽通信 通过公共图像传递加密信息(需配合加密算法)。
  3. 医疗影像标记 在CT/MRI图像中嵌入患者ID等元数据。

五、优化
  1. 抗检测增强 结合矩阵编码(如汉明码)减少修改像素数量,提升抗卡方攻击能力。

  2. 多模态扩展 支持视频隐写(逐帧处理)与音频隐写(PCM采样点LSB匹配)。

  3. 硬件加速

使用GPU并行计算加速大规模图像处理:

matlab 复制代码
stego_img_gpu = gpuArray(stego_img);
% ... GPU并行处理代码 ...
stego_img = gather(stego_img_gpu);

六、参考
  1. 何伟, 王海涛. 基于LSB匹配的数字水印算法研究[J]. 计算机工程, 2020.
  2. 代码 基于LSB匹配的隐写术 www.youwenfan.com/contentcsp/97471.html
  3. MathWorks官方网页: imbinarize函数说明与图像处理工具箱.
  4. 陈晓明. 空域隐写术的改进与实现[D]. 北京邮电大学, 2021.
相关推荐
zylyehuo10 小时前
Hilbert 矩阵的求解
matlab
CoovallyAIHub11 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub11 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub11 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
CoovallyAIHub4 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
CoovallyAIHub5 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub5 天前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub6 天前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉