matlab实现LSB图像水印的嵌入与提取

这篇是我在网上参考的原文,当时我要完成这个任务,搜集资料,也是从别人那找到的。
这篇文章的目的就是将这些整理出来,方便大家参考。

LSB图像水印嵌入与提取原创:https://blog.csdn.net/csdn_moming/article/details/50936687

(1)嵌入水印

message='cameraman.tif';
lsb = 3; name = 'D:\ffinal\2.bmp';
image = imread(name);image2=imread(message);
msg_origin = unicode2native(message, 'UTF-8');  
msg_bin = dec2bin(msg_origin, 8);
msg = blanks(9);
for i = 1 : size(msg_bin, 1)
    msg(i, :) = strcat(msg_bin(i, :), char(mod(i, 2) + '0'));
end
msg = strjoin(cellstr(msg)','');
msg(end) = char(mod(size(msg_bin, 1) + 1, 2) + '0');  

len = length(msg) / lsb;
tmp = blanks(len);
for i = 1 : len
    tmp(i) = char(bin2dec(msg((i - 1) * lsb + 1 : i * lsb)) + '0');  
end

% use RGB
result = image;
rgb = 1;
[len_R, len_G, len_B] = size(result);

for R = 1 : len_R
    for G = 1 : len_G
        for B = 1 : len_B
            if rgb <= len
          result(R, G, B) = result(R, G, B) - mod(result(R, G, B), 2^lsb) + double(tmp(rgb) - '0');
                rgb = rgb + 1;
            end
        end
    end
end
imshow(result);
imwrite(result, 'D:\ffinal\result.bmp');  




(2)提取水印


name='D:\ffinal\result.bmp';
image = imread(name);
lsb = 3;
index = 1;
rgb = zeros(0);
[len_R, len_G, len_B] = size(image);
flag = char('0');   
for R = 1 : len_R
    for G = 1 : len_G
        tmp = blanks(0);
        for B = 1 : len_B
            tmp = strcat(tmp, mod(image(R, G, B), 2^lsb) + '0');  
        end
        tmp_bin = dec2bin(tmp - '0', 3)';
        rgb(index) = bin2dec(tmp_bin(1 : 8));
        if flag + tmp_bin(9) ~= 97  
            msg_origin = native2unicode(rgb, 'UTF-8');
           j=imread(msg_origin);
             imshow(j);title('水印图像');
            imwrite(j,'D:\ffinal\recover.bmp');
            return;
        end
        index = index + 1;
        flag = tmp_bin(9);
    end
end



  • 12
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值