内容发布更新时间 : 2024/12/23 13:50:49星期一 下面是文章的全部内容请认真阅读。
龙源期刊网 http://www.qikan.com.cn
《数字图像处理》教学中水印技术MATLAB仿真探讨
作者:尹强 郭丽霞
来源:《科技视界》2012年第29期
【摘 要】论文中针对在《数字图像处理》教学中,关于数字水印技术章节时,会遇到较多需要MATLAB仿真才能够让学生更加深刻的理解水印技术的深刻含义的情况,因此,论文就目前水印的嵌入与提取使用的较多的量化调制水印算法原理做了详细介绍,并且对该算法做出了MATLAB仿真的参考程序,为老师和学生在学习本章节中可以更好的理解,提供了一个良好的参考。
【关键词】数字图像处理;数字水印;量化调制;MATLAB仿真 0 引言
在《数字图像处理》这门课程中,关于MATLAB的仿真使用频繁,特别是在图像水印章节中,水印的嵌入和提取,通过MATLAB仿真实现,才能够更好的让学生理解水印算法的特性。就目前较多的水印算法都是采用基于量化调制原理的嵌入和提取方式,论文中针对量化调制原理的详细步骤做了一个完整的描述,并且针对量化调制原理嵌入和提取做出了MATLAB仿真参考程序,为了能更好的去研究水印的嵌入和提取做出了一些实际的算法仿真的探讨。 1 量化调制原理
量化调制原理是目前针对认证水印使用较多的一种嵌入水印的方法,其基本原理是对一幅图像做压缩,加噪、过滤等非法操作后,仅仅使载体数据的值发生改变,从统计的角度讲,像素值增加与减少的概率是均等的,只要这个改变是在一定的允许范围内,对水印数据就不会产生影响。例如,一个正数x,用步长Δ来量化它,采用取整操作: x=n×Δ+rem(x,Δ)(1-1)
rem(x,Δ)为x整除Δ后的余数,且与x同号,x量化后的值为n,若n的奇偶性和水印数据吻合,例如n为奇数对应水印信息1,n为偶数对应水印信息0。则做如下调整,令调整后的值x′为: x′=n×Δ+(1-2)
那么,只要载体数据x在的变化范围内(称之为鲁棒区域),都可以保持其量化数据的奇偶性不变,即确保水印数据可以被正确检测出,水印嵌入完成。此时,载体数据检测出水印的鲁棒性最强,并且对数据x的修改不超过。
龙源期刊网 http://www.qikan.com.cn
同理,若n和水印数据的奇偶性不吻合,则必须调整量化后值的奇偶性,即令调整后的值x′为:
x′=(n-1)×Δ+,如果rem(x,Δ)
x′=(n+1)×Δ+,如果rem(x,Δ)≥(1-4)
那么,载体数据x′在±的变化范围内,都可以保持其量化数据的奇偶性不变,而且,对数据x的修改不超过Δ。整个调整过程中从x到x′的变化位置如图所示。 图1 量化调制过程中数据调整原理图
同理,在x小于 0 时,也可以采用同样的策略调整。 2 量化调制原理步骤描述
Step1:计算嵌入水印区域系数块系数和,为进行水印信息位对比准备:选取大小为256*256被嵌入数字图像,做一层小波变换,采用低频子带LL1作为嵌入区域,对LL1子带系数进行2×2不重复分块,每一块对应一个量化步长Δ。计算被选取图像子块系数之和: B(i,j)=LL1(ni,mj)(1-5) B(i,j)Δ=S(i,j)+R(i,j);(1-6)
S(i,j)为商,R(i,j)为余数,(i=1,2,3…64;j=1,2,3…64;)
Step2:对比水印信息位,修改图像系数块系数值,嵌入水印信息:通过根据量化调制原理公式(1-1),(1-2),(1-3),(1-4)修改LL1子带内2×2子块系数值以完成水印信息的嵌入,子块中每个系数的修改如下:
LL1′(ni,mj)=LL1(ni,mj)+·|q(i,j)4(1-7)
(m=1,2;n=1,2;);其中,LL1′表示修改后的低频子带系数,q(i,j)为图像系数块B(i,j)的修改量,定义如下:
q(i,j)=Δ2-R(i,j)..如果mod(S(i,j),2)=w1(i,j)(1-8) q(i,j)=-Δ2-R(i,j)..mod(S(i,j),2)≠w1(i,j)(1-9)
w1(i,j)为二值水印信息位,嵌入完成;对图像反变换得到含水印图像,WC为嵌入水印后图像。嵌入过程matlab仿真主要参考程序如下:
龙源期刊网 http://www.qikan.com.cn
[xxx,yyy]=wavedec2(suzhutuxiang,1,'db1'); bb1=reshape(xxx(1:16384),128,128); yin1=imread('yin64.bmp');
yin=double(reshape(yin1,1,4096))%水印排序 x=1;y=1; for kk=1:4096
bb(kk)=sum(sum(abs(bb1(x:x+2-1,y:y+2-1))));%计算图像系数块之和 if (y+2>=128) x=x+2; y=1; else y=y+2; end
end %一层小波变换后2*2分块求和 %水印嵌入主程序% x=1;y=1; for kk=1:4096
if mod(floor(bb(kk)/delta),2)==yin(kk)%对比水印信息位,嵌入水印 q=bb(kk)-(floor(bb(kk)/ delta))* delta; q1=0.5* delta -q;
bb1(x:x+2-1,y:y+2-1)=bb1(x:x+2-1,y:y+2-1)+(q1/4); elseif mod(floor(bb(kk)/ delta),2)~=yin(kk);