信息隐藏——DCT隐写

DCT隐写

【实验目的】:

了解DCT的系数隐写

【实验内容】:

■Jepg 压缩算法的回顾
■用MATLAB实现图像DCT相关操作
■完成基于图像DCT的信息隐藏实验
两点法的嵌入和提取
三点法的嵌入和提取

1.Jpeg压缩算法。
一 、色彩空间转换 (RGB空间到YUV空间)
二、缩减取样(减少U,V的成分)
三、离散余弦变换(DCT变换)
        分别在Y,U,V上取8*8的块做DCT变换
四、量化(量化表)
五、编码
2.基于图像DCT的信息隐藏实验。

1)两点法
将载体图像分为8×8的块,做二维DCT变换
在这里插入图片描述在这里插入图片描述来表示选中的两个系数的坐标
对于第i bit秘密信息

      if(要隐藏信息‘1’)
            make
      else
            make

逆DCT变换,还原图像
算法分析:
1、如果选定位置的两个系数相差太大,修改后则对图像影响较大。
所以要保证选择的系数必须量化系数一致(?),并且位于DCT的中频部分。通常选择(5,2)和(4,3)或者(2,3)和(4,1)
2、DCT系数相差很小,很难保证隐秘图像在保存、信道上传输不发生变化。
算法需要引入一个控制量α对系数差值进行放大,即使得 分析α与隐藏鲁棒性的关系。

2)三点法
在这里插入图片描述

算法原理:
利用DCT中频系数中的三个系数之间的相对关系来对秘密信息进行编码。
嵌入1:令
在这里插入图片描述

嵌入0:令
在这里插入图片描述

三点法对应提取则为逆过程,判定代码如下:

if DCTcheck(k1(i)+4,k2(i)+1)<DCTcheck(k1(i)+3,k2(i)+2)-lumda && DCTcheck(k1(i)+5,k2(i)+6)<DCTcheck(k1(i)+3,k2(i)+2)-lumda
      fwrite(frr,0,'ubit1');
      result(i,1)=0;
   elseif DCTcheck(k1(i)+4,k2(i)+1)>DCTcheck(k1(i)+3,k2(i)+2)+lumda && DCTcheck(k1(i)+5,k2(i)+6)>DCTcheck(k1(i)+3,k2(i)+2)+lumda
     fwrite(frr,1,'ubit1'); 
     result(i,1)=1;

【实验分析】:

在这里插入图片描述
上图是隐藏信息的图片,没有明显的问题。

在这里插入图片描述
输入参数如上。

2.实验过程分析
从实验步骤上,看上去和LSB隐写没什么很大区别,但实际操作过程却非常痛苦。首先,在三点法隐藏时,对图片的选择性非常高。对应不同的图片,在使用完全一样的参数时,可嵌入的信息量有不小差距。与此同时,对相同图片,输入的参数alpha和lumda的差距也会极大程度的影响最终结果。举例说明:
在这里插入图片描述

当我们更换隐藏的图片时,其他参数保持不变会发现,提取的时候会出现大量噪声;
在这里插入图片描述
当我们更换lumda的值时,程序直接就跑不通了。

3.实验结果分析
为什么会出现上述情况呢?
首先我们理解一下lumda,也就是下面图片中的D的含义。
在这里插入图片描述
其中参数D的选择要考虑隐藏的健壮性和不可察觉性之间的平衡,D越大,隐藏算法对于图像处理就越健壮,但是对图像的改动就越大,越容易引起察觉。
根据我们的实验结果可以看出,D并不是一个随意的参数,D越大虽然对图像处理的鲁棒性越强,但也会有副作用,所以是一个平衡问题。
另外,图片本身的性质也决定了他的信息容量,在本实验中体现的尤为明显,因为我们仅使用了RGB图片的一层进行隐写的。

实验代码

information_hidding

猜你喜欢

转载自blog.csdn.net/HizT_1999/article/details/106951325
DCT