【LSB】实现图片数字水印隐写功能(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

LSB(最低有效位)算法实现图片数字水印隐写功能,就是如何将我们的水印图片嵌入到主体图像中。我们日常生活中的图像大致分为三类:黑白图像、灰度图像、彩色图像。二进制图像顾名思义就是图像像素只存在0,1两个值。一个二进制图像显然是纯黑白的。每一个像素值将取两个离散值(0或1)中的一个,0表示黑,1表示白。 灰度图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度。一般使用使用无符号8位整型表示。灰度图像的二维矩阵表示 ,一张灰度图片,我们要将其转换为二进制代码表示的矩阵形式,可以使用MatLab或者Python进行处理,灰度图像的二值化方法 所谓灰度图像的二值化方法实际上解决的就是将灰度图像转换为二值图像(黑白图像)。RGB图像仅是一类图像的总称,每一个像素的颜色由存储在相应位置的红、 绿、蓝颜色分量共同决定。RGB图像是 24位图像,红、绿、蓝分量分别占用8位,理论上可以包含16M种不同颜色,由于这种颜色精度能够再现图像的真实色彩, 所以又称RGB图像为真彩图像。 空域图像水印技术是指在图像的空间域中嵌入水印的技术。 最简单和有代表性的方案就是用秘密信息代替图像的最低有效位(LSB)或者多个位平面的所有比特的算法。 LSB(Least Significant Bits)算法:将秘密信息嵌入到载体图像像素值的最低有效位。我们可以将其每八位的最后一位替换成我们的秘密信息,也就完成了信息隐写的过程。LSB原理 ①:LSB隐写原理源于图片中的像素一般是由三种颜色组成,即三原色(红绿蓝),由这三种原色可以组成其他各种颜色,在PNG图片的存储中,每个颜色占有8bit,即有256种颜色,一共包含256的三次方颜色,即16777216中颜色,人类的眼睛可以区分约1000万种不同的颜色,剩下无法区分的颜色就有6777216,当我们把其中一些信息改变,图片只发生位变化(取最低位,权值最小),而人是觉察不到这种变化的,当时里面的信息却发生了变化,这样就实现了我们的数字隐写功能。PNG图片格式和BMP图片格式都是一种无损压缩,LSB隐写就是修改了像素中的最低位缩的图片上实现LSB隐写,如果是JPG图片,就没办法使用LSB隐写了,因为其是有损压缩。 ②:例如,10进制的235表示的是绿色,我们修改二进制中的最低位,颜色依旧看不出有什么变化,还能保存我们的秘密水印,从而达到隐藏信息的目的。

📚2 运行结果

 部分代码:

clc;%清除命令行窗口
close all;%关闭所有打开的窗口
clear all;%清除工作空间

%获取载体图像并将其转化为灰度图
CarrierImg = rgb2gray(imread('lena.bmp')); 
% 获取载体图像的行M和列N
[M, N] = size(CarrierImg);
% 显示载体图像
figure, imshow(CarrierImg);
title('载体图像');

%获取要隐藏的水印图像并将其转化为灰度图
BinImg = rgb2gray(imread('SmallPig.bmp'));
% 获取水印图像的行m和列m
[m, n] = size(BinImg);
% 比较载体图像和水印图像,若水印图像的行和列均小于载体图像,不做处理
% 反之,若有水印图像的行或列大于载体图像,则将水印图像调整和载体图像一样大来嵌入
if m>M || n>N
    BinImg = imresize(BinImg,[M,N]);
end
% 将水印图像进行二值化处理,先转化为double,阈值根据水印图片自行调节
% imbinarize(BinImg,0.90)以0.90为阈值将BinImg转化为二值图像
% 大于0.90的变成逻辑1(白色),小于0.90的变成逻辑0(黑色)
BinImg = im2double(BinImg);
BinImg = imbinarize(BinImg,0.90);
% 显示处理后的水印图像
figure, imshow(BinImg);
title('需要被隐藏二值化图像');

%% 嵌入水印
WatermarketImg = LSB_Encode(CarrierImg,BinImg,M,N,m,n);
figure,imshow(WatermarketImg);
imwrite(WatermarketImg,'WatermarketImg.bmp');

%% 提取水印
% Image = imread('WatermarketImg.bmp');
% BinImage = LSB_Decode(Image,m,n);
% imshow(BinImage);
 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]张迎梁,杨任尔,丁石磊等. 结合DES加密的数字图像隐写术[C]//浙江省信号处理学会.浙江省信号处理学会2013学术年会论文集——信号处理在海洋.[出版者不详],2013:206-209.

[2]张涛,张彦,李文祥等. 基于像素差分相关性的LSB匹配隐写分析[C]//中国电子学会通信学分会,北京电子技术应用研究所.第八届全国信息隐藏与多媒体安全学术大会湖南省计算机学会第十一届学术年会论文集.科学出版社(Science Press),2009:154-157.

🌈4 Matlab代码实现

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值