发明名称 基于差值图像直方图循环平移的无损数据隐藏方法
摘要 本发明公开了一种基于差值图像直方图循环平移的无损数据隐藏方法,包括:加密步骤:在发送端,将原图像分块为多个子图像块,利用子图像块差值直方图进行循环平移操作实现隐秘数据的逐级嵌入,形成隐秘图像C′并发送给接收端;密钥发送步骤:图像分块大小、嵌入数据长度和嵌入级别L作为密钥分发给接收端;数据恢复步骤:接收端通过嵌入过程的逆方法从隐秘图像C′中逐级提取出隐秘数据,并恢复块差值和原始图像数据,实现了基于图像载体的隐秘数据传输和无损恢复。本方法改进了原始直方图平移算法的容量依赖于单一峰值点的特点,利用循环嵌入方法增大了嵌入容量。实验结果表明本发明的方法很好满足无损数据隐藏方法的高容量、低失真和高效率的需求。
申请公布号 CN103123720B 申请公布日期 2015.09.23
申请号 CN201310079170.9 申请日期 2013.03.13
申请人 中南大学 发明人 陈志刚;邓小鸿;翦鹏;梁涤青
分类号 G06T1/00(2006.01)I 主分类号 G06T1/00(2006.01)I
代理机构 长沙市融智专利事务所 43114 代理人 黄美成
主权项 一种基于差值图像直方图循环平移的无损数据隐藏方法,其特征在于,包括以下步骤:加密步骤:在发送端,将原图像分块为多个子图像块,利用子图像块差值直方图进行循环平移操作实现隐秘数据的逐级嵌入,形成隐秘图像C'并发送给接收端;密钥发送步骤:图像分块大小、嵌入数据长度和嵌入阈值L作为密钥分发给接收端;数据恢复步骤:接收端通过嵌入过程的逆方法从隐秘图像C'中逐级提取出隐秘数据,并恢复块差值和原始图像数据,实现了基于图像载体的隐秘数据传输和无损恢复;在所述的加密步骤包括:步骤1:读取原始载体图像C={C(i,j)|1≤i≤M,1≤j≤N},M,N为载体图像的维数,即载体图像的长和宽;步骤2:将原始载体图像C分块,块尺寸为A*B,块扫描顺序为Zig‑zag方式,分块后图像块集合表示为C<sub>B</sub>={C<sub>b</sub>(i,j)|1≤i≤A,1≤j≤B,1≤b≤floor(M/A)*floor(N/B)},这里floor(*)为向下取整函数;步骤3、如果原始载体图像不能全部划分在图像块中,条件表示为if mod(M,A)ormod(N,B)≠0,这里mod(*)为取余函数,则得到剩余部分的图像块的集合C<sub>NB</sub>=C‑C<sub>B</sub>,否则C<sub>NB</sub>置为空,并且后续执行过程跳过步骤12;步骤4:对C<sub>B</sub>块中的元素计算图像块差值,即块中相邻的元素像素值差的绝对值:D<sub>b</sub>(i,j)=abs(C<sub>b</sub>(i,j)‑C<sub>b</sub>(i,j+1));公式1步骤5:读取指定嵌入阈值L,L为正整数;步骤6:形成图像块差值直方图,并在每块子图像的差值直方图中形成间隙,按照下式计算;D<sub>b</sub>'(i,j)为调整后得到的新的差值;<img file="FDA0000703185210000011.GIF" wi="914" he="161" />公式2步骤7:读取待传输的隐秘数据WM={wm<sub>k</sub>|1≤k≤WM_Length},wm<sub>k</sub>∈{0,1},WM_Length为隐秘数据长度;步骤8:在每块差值直方图中嵌入数据,按照下式计算:<img file="FDA0000703185210000026.GIF" wi="1432" he="165" />公式3;D<sub>b</sub>”(i,j)代表嵌入隐秘数据后的差值,wm代表隐秘数据的1bit,em_count记录差值直方图中可嵌入的隐秘数据位数,其初值为0,该公式表明如果满足差值等于P,根据要隐藏的信息是1或是0,差值相应会增加P+1或者P,并且可嵌入的隐秘数据位数增1,即em_count++;P初值为L,向下递减直到为0,利用上式逐级嵌入;步骤9:产生每个图像块对应的隐秘图像块,首先按照公式4和5生成每个图像块中每行的前两个像素,然后按照公式6得到其他像素:<img file="FDA0000703185210000027.GIF" wi="994" he="154" />公式4;<img file="FDA0000703185210000028.GIF" wi="998" he="160" />公式5;这里1≤i≤A,1≤b≤floor(M*N/A*B)<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>=</mo><mtable><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mtd><mtd><mi>if</mi></mtd><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>&le;</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mtd></mtr><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>-</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow></mtd><mtd><mi>otherwise</mi></mtd></mtr></mtable></mfenced></mtd></mtr></mtable></mfenced></mrow></mtable></mrow>]]></math><img file="FDA0000703185210000024.GIF" wi="1156" he="163" /></maths>公式6;其中,1≤i≤A,3≤j≤B,1≤b≤floor(M/A)*floor(N/B);步骤10、防止溢出处理,在公式4‑6执行的过程中会产生溢出现象,公式7和8分别给出了上溢和下溢发生条件,其中Eq(4)代表公式4;<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>overflow</mi><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>></mo><mn>255</mn></mtd><mtd><mi>in</mi></mtd><mtd><mi>Eq</mi><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>></mo><mn>255</mn></mtd><mtd><mi>in</mi></mtd><mtd><mi>Eq</mi><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>></mo><mn>255</mn></mtd><mtd><mi>in</mi></mtd><mtd><mi>Eq</mi><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000703185210000025.GIF" wi="1071" he="233" /></maths>公式7;underflow=S<sub>b</sub>(i,j‑1)‑D<sub>b</sub>”(i,j‑1)&lt;0in Eq(6)公式8;在发生溢出现象后,将公式4‑6分别用公式9‑11替换:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>=</mo><mtable><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow></mtd><mtd><mi>if</mi></mtd><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>&le;</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mtd></mtr><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><mi>C</mi><mo>*</mo><mi>florr</mi><mrow><mo>(</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow><mo>/</mo><mi>C</mi><mo>)</mo></mrow><mo>+</mo><mi>mod</mi><mrow><mo>(</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><mi>C</mi><mo>)</mo></mrow></mtd><mtd><mi>otherwise</mi></mtd></mtr></mtable></mfenced></mtd></mtr></mtable></mfenced></mrow></mtable></mrow>]]></math><img file="FDA0000703185210000031.GIF" wi="1418" he="156" /></maths>公式9;<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><mi>C</mi><mo>*</mo><mi>floor</mi><mrow><mo>(</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>/</mo><mi>C</mi><mo>)</mo></mrow><mo>+</mo><mi>mod</mi><mrow><mo>(</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><mi>C</mi><mo>)</mo></mrow></mtd><mtd><mi>if</mi></mtd><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>&le;</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mtd></mtr><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mn>2</mn><mo>)</mo></mrow></mtd><mtd><mi>otherwise</mi></mtd></mtr></mtable></mfenced></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000703185210000035.GIF" wi="1602" he="160" /></maths>公式10;<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><mi>C</mi><mo>*</mo><mi>floor</mi><mrow><mo>(</mo><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>/</mo><mi>C</mi><mo>)</mo></mrow><mo>+</mo><mi>mod</mi><mrow><mo>(</mo><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>+</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><mi>C</mi><mo>)</mo></mrow></mtd><mtd><mi>if</mi></mtd><mtd><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>&le;</mo><msub><mi>C</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mtd></mtr><mtr><mtd><mfenced open='' close=''><mtable><mtr><mtd><mi>C</mi><mo>*</mo><mi>floor</mi><mrow><mo>(</mo><mo>-</mo><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>/</mo><mi>C</mi><mo>)</mo></mrow><mo>+</mo><mi>mod</mi><mrow><mo>(</mo><msub><mi>S</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>-</mo><msup><msub><mi>D</mi><mi>b</mi></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><mi>C</mi><mo>)</mo></mrow></mtd><mtd><mi>otherwise</mi></mtd></mtr></mtable></mfenced></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000703185210000036.GIF" wi="1857" he="157" /></maths>公式11;其中C取为具体载体图像的最大差值D<sub>max</sub>+L;步骤11:合并所有的隐秘图像块S<sub>b</sub>(i,j)形成隐秘图像C<sub>B</sub>'={S<sub>b</sub>(i,j)|1≤i≤A,1≤j≤B,1≤b≤floor(M/A)*floor(N/B)};步骤12:对C<sub>NB</sub>中的像素值,依次提取所有C<sub>NB</sub>中像素的最低有效位C<sub>NB_LSB</sub>,采用无损压缩方法,产生嵌入空间,其长度为LS,将LS bit隐秘信息和C<sub>NB_LSB</sub>采用最低有效位LSB替换算法嵌入到C<sub>NB</sub>中,形成隐秘图像C<sub>NB</sub>';步骤13、组合C<sub>B</sub>'和C<sub>NB</sub>'形成整幅隐秘图像C'=C<sub>B</sub>'∪C<sub>NB</sub>'。
地址 410083 湖南省长沙市岳麓区麓山南路932号