LSB算法的分析与实现

实验目的

LSB算法分析与实现

实验任务
  1. 对比隐写算法实现前后图像变化以及均方误差MSE
  2. 对比a0比特平面和隐藏信息的区别
  3. 对信息隐藏后的图片进行信息提取,比较隐藏信息是否一致
  4. 对比满复合嵌入和欠复合嵌入的区别

实验内容

LSB密写的基本方法是用欲嵌入的秘密信息取代载体图像的最低比特位,原来的图像的高位平面与代表秘密信息的最低平面组成含隐蔽信息的新图像

LSB属于空域算法中的一种,是将信息嵌入到图像点中像素位的最低位,以保证嵌入的信息是不可见的,但是由于使用了图像不重要的像素位,算法的鲁棒性差,水印信息很容易为滤波、图像量化、几何变形的操作破坏。在灰度图像中,图像的灰度由八位二进制来表示即十进制中0-255,共256级别,255则为白色,反之0为黑色。自然,二进制位越靠前则对像素点灰度的影响越大,从这点出发,则考虑更改像素点灰度值最低位来隐藏信息,这样对原图像的改变比较小。

位平面特性:

位平面越高,对灰度值的贡献越大

位平面越高,相邻比特的相关也越强

最低位平面类似随机噪声

最低有效位(Least Significant Bit,   LSB)

算法设计
1. 满复合嵌入算法

满复合嵌入的LSB算法是一种数字水印算法,它通过在载体图像的最低有效位(LSB)嵌入水印信息。相对于普通LSB算法,满复合嵌入的LSB算法可以提高水印的容量和抗干扰性。具体实现时,首先将要嵌入的水印信息转化为二进制数列,然后将该数列按照一定规则分成若干组,每组的长度为k。接着,在载体图像中选择k个像素点,将每组二进制数列中的一位分别嵌入到这k个像素点的LSB中,得到k个新的像素点。最后,将这k个新像素点合并成一个新的像素块,替换原来的像素块。

Matlab实现该算法的具体步骤如下:

①读取原始图片。

②将要隐藏的秘密信息并进行二值转化。

③将秘密信息按照LSB算法嵌入到原始图片中,即将原始图片的最低有效位替换成秘密信息的比特位。

④比较原始图像和隐藏信息后a0比特平面

⑤提取出秘密信息。

⑥计算嵌入后图片的均方差MSE,用于评估嵌入秘密信息对图片造成的影响。

2. 欠复合嵌入算法

①读取原始图片。

②将要隐藏的秘密信息并进行二值转化。

③在载体图片上随机选择一个位置,将秘密信息按照LSB算法嵌入到所选择的位置中,即将原始图片的最低有效位替换成秘密信息的比特位。

④比较原始图像和隐藏信息后a0比特平面

⑤提取出秘密信息。

⑥计算嵌入后图片的均方差MSE,用于评估嵌入秘密信息对图片造成的影响。

原始图像:       



秘密图像:

实验代码
1.  满复合嵌入的LSB算法

% 读取原始图片

I = imread('test.jpg');

I = rgb2gray(I);

[M, N] = size(I);

% 获取需隐藏的秘密信息(秘密信息图像维度需与载体图像维度一致)

S = rgb2gray(imread('test_S.jpg'));

[m, n] = size(S);

% 对秘密信息进行二值化处理

S = im2double(S)

S = imbinarize(S, 0.50)  %以阈值为0.50为例

% 嵌入秘密信息

I1 = double(I);

I1 = 2*floor(I1 / 2) + S;

I1 = uint8(I1)

subplot(3,4,1);imshow(I);title("原始图像");

subplot(3,4,2);imhist(I);title("原始图像的灰度直方图");

subplot(3,4,3);imshow(I1);title("隐藏信息后的图像");

subplot(3,4,4);imhist(I1);title("隐藏信息后的图像灰度直方图");

A0 = double(I) - 2 * floor( double(I) / 2)

A01 = double(I1) - 2 * floor( double(I1) / 2)

subplot(3,4,5);imshow(A0, []);title("原始图像的a0比特平面");

subplot(3,4,6);imhist(I);title("原始图像的a0比特平面灰度直方图");

subplot(3,4,7);imshow(A01, []);title("隐藏信息后的a0比特平面");

subplot(3,4,8);imhist(I);title("隐藏信息后的a0比特平面灰度直方图");

subplot(3,4,9);imshow(S,[]);title("二值化后的秘密信息S");

subplot(3,4,10);imhist(S,[]);title("二值化后的S灰度直方图");

% 提取秘密信息

S1 = double(I1) - 2 * floor(double(I1) / 2);

subplot(3,4,11);imshow(S1);title("提取信息");

subplot(3,4,12);imhist(S1);title("提取信息的灰度直方图");

运行结果截图:

分析:

        对比原始图像和隐藏信息后的图像,发现隐藏后秘密信息后人眼看不出来图片的改变,但是图像的灰度直方图会发生明显变化。在灰度图像中,图像的灰度由八位二进制来表示即十进制中0-255,共256级别,255则为白色,反之0为黑色。自然,二进制位越靠前则对像素点灰度的影响越大,从这点出发,则考虑更改像素点灰度值最低位来隐藏信息,这样对原图像的改变比较小,如下图所示。当我们把其中一些信息改变,图片只发生位变化(取最低位,权值最小),而人是觉察不到这种变化的,当时里面的信息却发生了变化,就实现了数字隐写功能。LSB隐写就是修改了像素中的最低位缩的图片上实现LSB隐写。

        对比原始图像与隐藏信息后的a0比特平面,发现满复合嵌入的LSB算法会将载体图片的a0比特平面改为了秘密信息的二值图像,在满复合嵌入过程中,每个像素值的最低有效位都被修改,以便容纳需要隐藏的信息。而灰度直方图都无变化这是由于a0比特平面和秘密信息二值图像,二值图像顾名思义就是图像像素只存在0,1两个值。一个二进制图像显然是纯黑白的。每一个像素值将取两个离散值(0或1)中的一个,0表示黑,1表示白。所以并不存在灰度变换相应的灰度直方图是无变化的。

        对比秘密信息的二值化图像和提取信息后的图像,肉眼看上去并无差异,综上所述,LSB算法可以有效隐藏信息,将载体图像的最低有效位层替换为当前需要隐的二值图像,从而实现将二值图像隐藏的目的由于二值图像处于载体图像的最低有效位上,所以对于载体图像的影响非常不明显,其具有较高的隐酸性,并且在必要时直接将载体图像的最低有效位层提取出来,即可得到嵌入在该位上的二值图像,达到提取秘密信息的目的。

%计算MSE

MES = 0;

I1_MES = double(I1);

I_MES = double(I);

MES=sum(sum((I1_MES - I_MES).^2))/(M*N);

fprintf("MES:%f",MES);

本次实验的计算嵌入后图片的均方差MSE,均方差越小说明隐藏效果越好。

2.  欠复合嵌入的LSB算法

% 读取原始图片

I = imread('test.jpg');

I = rgb2gray(I);

[M, N] = size(I);

I1 = double(I);

I_shape = reshape(I1, [1, M * N]); %将载体图片转化为一维数组

(载体图像的大小为1573*1009)

% 获取需隐藏的秘密信息

S = rgb2gray(imread('test_S.jpg'));

[m, n] = size(S);

% 压缩图片

x = randi([floor(M / 4), floor(M / 2)], 1);

y = randi([floor(N / 4), floor(N / 2)], 1);

%比较选取位置与秘密图片大小,若秘密图片过大则调整大小

if m>x || n>y

    S = imresize(S, [x, y]);

end

% 对秘密信息进行二值化处理

S = im2double(S);

S = imbinarize(S, 0.40);  %以阈值为0.40为例

S_shape = reshape(S, [1, x * y]);

(压缩秘密信息图片后的大小为535*496)

%在载体图片上随机选择一个位置嵌入秘密信息

t = x * y

a = randi(M * N, [1, t]);

%进行信息隐藏

for i = 1:t

    I_shape(a(i)) = 2 * floor(I_shape(a(i)) / 2) + S_shape(i);

end

I_shape = reshape(I_shape, [M, N]);

I_shape = uint8(I_shape);

subplot(3,4,1);imshow(I);title("原始图像");

subplot(3,4,2);imhist(I);title("原始图像的灰度直方图");

subplot(3,4,3);imshow(I_shape);title("隐藏信息后的图像");

subplot(3,4,4);imhist(I_shape);title("隐藏信息后的图像灰度直方图");

%对比显示a0比特平面和秘密信息

A0 = double(I) - 2 * floor( double(I) / 2)

A01 = double(I_shape) - 2 * floor( double(I_shape) / 2)

subplot(2,4,5);imshow(A0, []);title("原始图像的a0比特平面");

subplot(2,4,6);imshow(A01, []);title("隐藏信息后的a0比特平面");

subplot(2,4,7);imshow(S,[]);title("二值化后的秘密信息S");

%提取信息

I_shape = double(I_shape)

I_shape = reshape(I_shape, [1, M * N]);

for i = 1:t

    S_shape(i) = I_shape(a(i)) - 2 * floor(I_shape(a(i)) / 2);

end

S_shape = reshape(S_shape, [x, y]);

subplot(2,4,8);imshow(S_shape,[]);title("提取信息");

分析:

        对比原始图像和隐藏信息后的图像,发现隐藏后秘密信息后人眼看不出来图片的改变,图像的灰度直方图会发生变化但是改变的值很小,肉眼几乎观察不出来。这是由于欠复合嵌入是指在一张图像中部分嵌入需要隐藏的信息,即信息的长度小于可以容纳信息的最大长度。在欠复合嵌入过程中,只有一部分像素值的最低有效位被修改。由于修改像素值对图像质量的影响较小,因此欠复合嵌入相对于满复合嵌入更加隐蔽,更难被检测到。但是欠复合嵌入所能隐藏的信息量也较小。

        对比原始图像与隐藏信息后的a0比特平面,发现经过欠复合嵌入LSB算法编码的载体图片的a0比特平面与原来的a0比特平面相比,看上去多了许多噪点,大体轮廓并没有改变这是由于在欠复合嵌入过程中,只有一部分像素值的最低有效位被修改。而这些像素值是由randperm函数随机产生的,所以会原始图像的a0比特平面随机生成噪点。

        对比秘密信息的二值化图像和提取信息后的图像,肉眼看上去并无差异,综上所述,欠复合嵌入算法

%计算MSE

MES = 0;

I1_MES = reshape(I_shape, [M, N]);

I_MES = double(I);

MES=sum(sum((I1_MES - I_MES).^2))/(M*N);

fprintf("MES:%f",MES);

        计算欠复合嵌入的均方差,比较满复合嵌入和欠复合嵌入的均方差,发现欠复合嵌入的均方差比欠复合嵌入的均方差更小,说明欠复合嵌入算法隐藏秘密信息的效果更好,但隐藏的信息量更少。

结论
1. LSB算法

        基于数字图像最低有效位(LSB)的数字图像水印算法是一种常见的数字水印嵌入和提取技术。该算法将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图像的最低有效位层替换为当前需要隐的二值图像,从而实现将二值图像隐藏的目的由于二值图像处于载体图像的最低有效位上,所以对于载体图像的影响非常不明显,其具有较高的隐酸性,并且在必要时直接将载体图像的最低有效位层提取出来,即可得到嵌入在该位上的二值图像,达到提取秘密信息的目的。

2. LSB算法中满复合嵌入和欠复合嵌入的区别

        满复合嵌入是指在一张图像中完全嵌入了需要隐藏的信息,即信息的长度等于可以容纳信息的最大长度。在满复合嵌入过程中,每个像素值的最低有效位都被修改,以便容纳需要隐藏的信息。这种方法隐藏的信息量最大,但是可能会对图像质量产生较大影响。

        欠复合嵌入是指在一张图像中部分嵌入需要隐藏的信息,即信息的长度小于可以容纳信息的最大长度。在欠复合嵌入过程中,只有一部分像素值的最低有效位被修改。由于修改像素值对图像质量的影响较小,因此欠复合嵌入相对于满复合嵌入更加隐蔽,更难被检测到。但是欠复合嵌入所能隐藏的信息量也较小。

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
LSB算法的不可感知性可以通过主观和客观两个角度来分析: 1. 主观评价:即通过肉眼观察载体图像和嵌入后的图像是否存在明显的差异来评价算法的不可感知性。可以通过视觉感受、主观评分等方式进行评价。 2. 客观评价:即通过计算载体图像和嵌入后的图像之间的PSNR、SSIM等指标来评价算法的不可感知性。这些指标可以通过图像处理软件或者MATLAB等工具进行计算。 LSB算法的安全性可以从以下几个方面进行分析: 1. 抗隐写分析能力:即嵌入的秘密数据是否能够抵抗针对隐写分析的攻击。可以通过统计分析、差分攻击等方式进行分析。 2. 抗攻击能力:即嵌入的秘密数据是否能够抵抗图像处理攻击、压缩攻击等攻击。可以通过图像处理软件或者MATLAB等工具进行模拟攻击。 3. 隐写容量:即可以嵌入到载体图像中的秘密信息的最大容量。可以通过改变嵌入位置、改变嵌入方式等方式来分析隐写容量。 LSB算法的容量可以通过以下几个方面进行分析: 1. 载体图像的大小:载体图像越大,则可以嵌入的秘密信息的容量也越大。 2. 嵌入算法的复杂度:嵌入算法越复杂,则可以嵌入的秘密信息的容量也越大。 3. 嵌入的数据类型:不同类型的数据在嵌入时所占用的比特位数不同,因此不同类型的数据可以嵌入的容量也不同。 总之,LSB算法的不可感知性、安全性和容量的评价需要结合主观和客观分析的方法,同时考虑多个因素的影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值