基于量化的图像水印算法
- 格式:docx
- 大小:318.09 KB
- 文档页数:8
总第325期计算机与数字工程Vol. 44 No. 11 2〇16 年第 11 期Computer & Digital Engineering 2263一种基于矢量量化的数字图像水印技术孙少军1王玉珏2(1.91404部队秦皇岛066000) (2.海军航空兵学院葫芦岛125000)摘要基于矢量量化的数字水印技术,在矢量压缩编码过程中,在被保护的图像中嵌人了一种典型的数字水印,水印 可以从图像中恢复出来,从而可以在版权争议中有效地为版权方举证。
矢量量化密语本中的密语根据不同的特征被定义成 不同的组,进而将每个二进制水印比特都嵌人到选定的矢量量化编码块中,特点是水印同时存在于矢量量化压缩图像和矢 量量化解码后的重建图像中。
因为水印隐藏于压缩图像之中,加人水印的压缩图像具有尺寸小、传递速度快并且存储空间 在压缩时可保存的特点,因而代替了原件在因特网上传输。
此外,重建的图像具有鲁棒性来防范破坏或消除水印的企图。
关键词数字水印;矢量量化;裁剪攻击;鲁棒性中图分类号TP391 DOI:10. 3969/j. issa 1672-9722. 2016. 11. 034A Digital Image Watermarking Technology Based on Vector QuantizationSUN Shaojun1WANG Yujue2(1. No. 91404 Troops of PLA, Qinhuangdao 066000) (2. Institute of Naval Aviation, Huludao 125000)Abstract Based on digital watermarking technique of vector quantization, in vector coding process, in the protected image in a typical digital watermark is embedded, the watermark can be recovered from the image, which can effectively in a copyright dispute for copyright proof. Whisper of vector quantization in the according to the different characteristics are defined into different groups? then each binary watermark bits are embedded into the selected vector quantization coding block, which is characterized in that the watermark also exist in the vector quantization compression image and vector quantization decoding of reconstruction image. Because the watermark is hidden in the compressed image, the compression image with the watermark has the characteristics of small size, fast transmission speed and the storage space can be saved in the compression, thus replacing the original transmission on the internet. In addition, the reconstructed image is robust to prevent damage or remove the watermark.Key Words digital watermarking, vector quantization, cropping attack, robustnessClass Number TP391i引言互联网的便利接入使每个人都很容易下载到 图像,复制、编辑或者散播图像非常容易,这自然对 版权拥有者(很多时候是图像制作者)产生了直接 而又严重的影响[1]。
基于DCT系数量化的自适应数字水印算法王玲玲;胡社教【摘要】文章提出了一种基于DCT系数量化的自适应数字图像水印算法.该算法选取彩色图像作为载体图像,首先将彩色图像从RGB颜色空间转换到YIQ颜色空间,并提取其Y分量作为水印嵌入的载体,对Y分量用自组织映射(SOM)的方法进行块分类和离散余弦变换,然后将Arnold置乱后的二值水印图像量化嵌入到载体图像的DCT系数中,量化因子随块类别不同而不同,水印检测过程不需要原始图像的参与.实验证明,该算法对于常见的图像处理、JPEG压缩等具有较高的鲁棒性.【期刊名称】《合肥工业大学学报(自然科学版)》【年(卷),期】2010(033)008【总页数】4页(P1198-1201)【关键词】数字水印;自组织映射;离散余弦变换【作者】王玲玲;胡社教【作者单位】合肥工业大学,计算机与信息学院,安徽,合肥,230009;合肥工业大学,计算机与信息学院,安徽,合肥,230009【正文语种】中文【中图分类】TP391.410 引言数字水印一般应该具有透明性、鲁棒性和安全性等特点。
图像的水印技术大致可以分为3类:空域技术、变换域技术和压缩域技术,其中变换域的自适应嵌入方法在数字水印中占有重要地位。
就DCT(Discrete Cosine Transform)域来说,自适应嵌入方法可以分为基于系数的和基于块的2类[1]。
系数自适应嵌入算法中嵌入因子随系数的不同而改变,主要是基于JND(Just Noticeable Difference)模型的;块自适应嵌入算法中,不同特性块的系数对应的嵌入因子不同。
块特性一般根据均值、方差及纹理等来划分。
本文研究的是基于块分类的自适应水印算法。
文献[2]研究了基于系数的自适应算法,它主要利用JND模型来确定系数是否适合嵌入;而文献[3]研究了基于块的自适应算法,通过计算每块的熵值和方差对图像块进行分类。
这些算法都需要设定阈值,虽然它们在一定程度上较好地解决了水印透明性和鲁棒性的矛盾,但还存在图像分类阈值难以确定、效果不够理想等问题。
一种变换域的均匀量化盲图像水印算法杨帆;范九伦【期刊名称】《微型机与应用》【年(卷),期】2013(000)023【摘要】提出了一种基于均匀量化的盲提取图像水印算法。
载体图像经过小波变换之后提取出其低频系数,再对其进行分块 DCT 变换,采用双极性量化的方法进行水印的嵌入。
水印的提取不需要原图像,且嵌入同一个水印可通过不同密钥分别提取出鲁棒水印和脆弱水印。
仿真实验表明,该算法可以有效地抵抗 JPEG 压缩、低通滤波、噪声和剪切等攻击,具有较好的脆弱性和对攻击的鲁棒性。
%An algorithm for blind image watermarking based on uniform quantization is proposed in this paper. Firstly, the paper performs wavelet transform to the carrier image and extracts the low-frequency coefficients , then the 2D watermarks was embedded into the block-DCT of the image with the method of bipolar quantization. In watermarking extracting process , it don′t need original image when extracting watermark and can respectively extract the robust watermark and the fragile watermark by different keys in the condition of embedding the same watermark. Experimental results show that the algorithm can effectively resist the attack of JPEG compression, low-pass filtering, Gaussian noise, shear and so on, therefore, it has better fragility and robustness.【总页数】5页(P41-44,47)【作者】杨帆;范九伦【作者单位】西安邮电大学通信与信息工程学院,陕西西安 710061;西安邮电大学通信与信息工程学院,陕西西安 710061【正文语种】中文【中图分类】TP309【相关文献】1.一种新的非均匀离散傅立叶变换域数字音频水印算法 [J], 孙锋申2.一种DCT变换域盲图像水印算法 [J], 彭玉忠;陈勤;张旻3.一种DCT域的最优均值量化盲图像水印算法 [J], 邱丽红;张丽艳4.基于奇偶量化的Contourlet变换域指纹图像水印算法 [J], 谢静;吴一全5.一种均匀量化小波能量的盲提取音频水印算法 [J], 马德洋;卢忱;范九伦因版权原因,仅展示原文概要,查看原文内容请购买。
张道德 UCAS第2题 基于量化的图像水印算法抖动调制是一种特殊的QIM 方法,但结构简单,其特点是给定量化器的任何量化单元和重建点都是其他量化器量化单元和重建点的平移。
在无水印的情况下 ,平移量是随机的,成为抖动量。
为了嵌入信息,抖动量可以待嵌入的水印信息进行调制。
将各个可能的带嵌入的的水印信息映射成不同的抖动量()d W 。
载体信号在进行抖动后,通过量化产生合成信号。
在采用基本量化器()q ⋅的情况下,嵌入函数可以表示为(;) (())()E X W q round X d W d W =+-这类水印嵌入技术就称为抖动调制。
2.1 算法介绍下面介绍采取均匀标量量化器的二进制抖动调制算法:假设要嵌入的水印信息是一个二维序列,即{0,1}W =,其长度为L 。
根据DM 的嵌入函数,可以得到二值水印嵌入公式为()(()[,])[,]k k S k q X k d k b d k b =+-其中,()X k 是载体用来嵌入信息的的k 个数据,{0,1}k b ∈与水印W 相对应,[,]k d k b 是抖动量,()q ⋅是基本量化器,即()(/)q x round x ∆=∆⨯∆这里,∆是量化步长,x 是待量化数据,()round ⋅表示四舍五入操作,()q ∆⋅表示量化步长为∆的量化器。
• 确定要修改的载体数据()X k ,即从载体数据中根据一定原则选择合适的载体数据来嵌入水印信息;• 确定用于对各个载体数据()X k 进行量化的步长k ∆。
如果各个载体数据的量化步长不同,则是一种自适应量化;一般情况下,可以采用等步长的非适应量化,此时k ∆相等,均为∆;• 确定抖动量[,]k d k b ,一般[,0]d k 可任意选择,但是[,1]d k 要按下式进行选取:[,1][,0]/2, [,1]0[,1][,0]/2, [,1]0k k d k d k if d k d k d k if d k =+∆<⎧⎨=-∆>⎩在量化步长时,可以为每个载体数据选择相同的抖动量;• 根据公式()(()[,])[,]k k S k q X k d k b d k b =+-,先用量化器函数()q ⋅对载体数据进行量化,然后合成输出值()S k 。
基于正负量化的DCT域数字图像盲水印算法研究李昊;吕建平;杨芳芳【摘要】提出一种基于离散余弦变换(DCT)的灰度图像盲水印算法.首先对水印图像进行置乱加密.然后将载体图像进行8×8大小的分块,针对各分块进行DCT变换,采用正负量化规则进行水印的嵌入.水印的检测是根据正负量化规则进行的,不需要原始图像,是一种盲检测.最后通过水印相关系数(NC)和峰值信噪比(PSNR)来评价水印算法的性能.实验结果表明,该算法可以有效地抵抗JPEG压缩、噪声、剪切、滤波等攻击,鲁棒性较好.【期刊名称】《计算机工程与应用》【年(卷),期】2011(047)005【总页数】3页(P186-187,245)【关键词】数字水印;离散余弦变换(DCT);正负量化;盲检测【作者】李昊;吕建平;杨芳芳【作者单位】西安邮电学院,西安,710061;西安邮电学院,西安,710061;西安邮电学院,西安,710061【正文语种】中文【中图分类】TP391随着计算机技术与网络通信技术以及信息产业的高速发展,数字作品与传统作品相比有了很大的优越性。
然而,数字作品极易被非法拷贝和复制,使得很多版权所有者不愿轻易公开自己的作品,这在相当程度上阻碍了其自身的发展。
与此同时,多媒体技术已被广泛应用,因此需要进行加密、认证和版权保护的声像数据也越来越多。
数字水印技术[1-2]的研究就是在这种应用下迅速发展起来的。
数字水印是实现数字作品版权的有效方法,它通过在原始数据中嵌入秘密信息(水印)来证实该作品的所有权。
目前,数字水印算法大致分为两类:空间域和变换域。
空间域算法直接将水印信息嵌入到图像的像素值中;变换域算法是先将原始图像做相应的变换(包括DFT、DCT、DWT等),然后再嵌入水印信息。
变换域方法的稳健性比较好,因此目前的研究主要集中于变换域方法。
基于离散余弦变换(DCT)的水印方法便是其中研究较多的一类变换域方法。
但目前大多数基于DCT的水印方法在检测水印时需要原始图像,即非盲检测,这就使得这些方法在实际应用中受到很大限制。
基于图像处理技术的水印算法研究随着数字信息的快速发展,信息安全也变得越来越重要。
为了保护数字内容不被盗用,被篡改或者被冒充,一种广泛应用的技术就是数字水印。
数字水印是指将一些特殊的信息嵌入到数字内容中,使得这些信息可以随着内容传递,也可以用于内容的认证和追踪。
而基于图像处理技术的水印算法就是其中一种非常重要的应用。
1、数字水印数字水印可以分成两类,一类是可视水印,一类是不可视水印。
可视水印是直接在图像、视频、音频等媒体上添加的,大多用于版权保护。
其中,文字、logo等可以直接添加在内容上,而数字水印则是在保留内容的基础上,将一些特殊的信息隐藏在其中。
不可视水印则是一些不能直接观察到的水印,如隐藏在数字音频、视频、图像文件等中。
其主要用于数字版权管理、追踪、电子商务、数字防伪等方面。
2、基于图像处理技术的水印算法图像水印的目的是用一种不影响图像质量的方式,在原有图像的基础上,嵌入并保护一些隐秘信息。
过去基于图像处理技术的水印算法是包括非盲目的和盲目的两种方法,非盲目的方法需要原始图像,而盲目的方法只需要水印图像。
目前的水印算法主要采用了盲目的算法。
一个好的水印算法应该在水印不被发现的前提下,有较强的鲁棒性。
鲁棒性是指在一定的威胁下,水印将继续存在或只受到可接受的影响。
对于图像水印算法来说,嵌入水印应该在破坏和传输中保持稳定。
嵌入水印的位置和方式也需要保证水印不容易被发现和修改。
在实际中,图像水印算法通常是通过对原始图像进行一定的处理然后嵌入水印字节来实现,因此水印检测需要对处理后的图像进行解码,然后才能检测出水印。
而在处理图像时,通常采用的是一些常用的变换方法,例如离散余弦变换(DCT)、离散小波变换(DWT)、离散傅里叶变换(DFT)、奇异值分解(SVD)等方法。
这些方法通常被用于提取图像的特征以及嵌入和提取水印信息。
3、实例分析我们来简单分析一下一个基于 DWT 和 SVD 的盲水印算法。
该算法是将嵌入的秘密水印信息嵌入到图像中,但同时不影响原图像的显示效果。
张道德 UCAS第2题 基于量化的图像水印算法抖动调制是一种特殊的QIM 方法,但结构简单,其特点是给定量化器的任何量化单元和重建点都是其他量化器量化单元和重建点的平移。
在无水印的情况下 ,平移量是随机的,成为抖动量。
为了嵌入信息,抖动量可以待嵌入的水印信息进行调制。
将各个可能的带嵌入的的水印信息映射成不同的抖动量()d W 。
载体信号在进行抖动后,通过量化产生合成信号。
在采用基本量化器()q ⋅的情况下,嵌入函数可以表示为(;) (())()E X W q round X d W d W =+-这类水印嵌入技术就称为抖动调制。
2.1 算法介绍下面介绍采取均匀标量量化器的二进制抖动调制算法:假设要嵌入的水印信息是一个二维序列,即{0,1}W =,其长度为L 。
根据DM 的嵌入函数,可以得到二值水印嵌入公式为()(()[,])[,]k k S k q X k d k b d k b =+-其中,()X k 是载体用来嵌入信息的的k 个数据,{0,1}k b ∈与水印W 相对应,[,]k d k b 是抖动量,()q ⋅是基本量化器,即()(/)q x round x ∆=∆⨯∆这里,∆是量化步长,x 是待量化数据,()round ⋅表示四舍五入操作,()q ∆⋅表示量化步长为∆的量化器。
• 确定要修改的载体数据()X k ,即从载体数据中根据一定原则选择合适的载体数据来嵌入水印信息;• 确定用于对各个载体数据()X k 进行量化的步长k ∆。
如果各个载体数据的量化步长不同,则是一种自适应量化;一般情况下,可以采用等步长的非适应量化,此时k ∆相等,均为∆;• 确定抖动量[,]k d k b ,一般[,0]d k 可任意选择,但是[,1]d k 要按下式进行选取:[,1][,0]/2, [,1]0[,1][,0]/2, [,1]0k k d k d k if d k d k d k if d k =+∆<⎧⎨=-∆>⎩在量化步长时,可以为每个载体数据选择相同的抖动量;• 根据公式()(()[,])[,]k k S k q X k d k b d k b =+-,先用量化器函数()q ⋅对载体数据进行量化,然后合成输出值()S k 。
在提取水印,一般采取最小距离检测,即{0,1}()arg min |[]|k k Y l b k Y S l ∧∈=- 其中,k Y 是检测器接收到的信号数据,[0]k Y S 和[1]k Y S 分别为假设k Y 是以[,0]d k 和[,1]d k为抖动量的情况下应该得到的抖动调制结果。
2.2编程实现与分析我们在本实验嵌入的水印信息为一张大小为3232⨯的二值黑白图像。
原始图像(载体图像)为“elain1.bmp ”,其大小为512512⨯。
我们将图像分块,分成88⨯的图像小块,每块图像中嵌入1比特水印数据信息,易知可以讲水印信息完整嵌入。
2.2.1抖动调制的实验结果与分析水印嵌入步骤如下:• 确定要修改的载体数据。
我们在本实验中选取两块图像小块的像素差值作为要修改的载体数据,位置为[5][5]和[4][4],并将得到的信息保存在[4][4],即[4][4][5][5](([5][5][4][4]))q d d ∆=--+-其中d 为抖动量。
• 我们取量化步长∆是固定的,即20∆=,是一种非适应量化。
• 确定抖动量[,]k d k b 。
我们在本实验中随机选择[,0][30,30]d k ∈-的整数, [,1]d k 按下式进行选取:[,1][,0]/2, [,1]0[,1][,0]/2, [,1]0k k d k d k if d k d k d k if d k =+∆<⎧⎨=-∆>⎩并将[,0]d k 保存在一个一位数组中,传给水印提取者。
按照上述方法,将水印信息(二值黑白图像)嵌入到载体图像当中,如下图所示:图2.1 原始图像与嵌入水印后的图像两张图像用肉眼观察没有区别,可以得出水印信息的嵌入没有对原始图像在视觉上造成水印提取采取最小距离检测从而提取水印。
计算如下数值:0011([5][5][4][4])(([5][5][4][4]))([5][5][4][4])(([5][5][4][4]))x q d dy q d d ∆∆=---+-⎧⎨=---+-⎩ 其中,0d 和1d 分别为当前嵌入信息为0和1的抖动量。
从而得到当前嵌入的水印信息0, 1, if x y b if x y∧<⎧=⎨<⎩ 提取水印结果很理想,与原始水印图像是一致的,结果如下图:图2.2 原始水印图像与提取的水印图像 将水印图像中值滤波后,再次提取水印图像。
对水印图像进行中值滤波后,与原始图像有些区别,中值滤波后的图像更加清晰,如下图:图2.3 原始图像与中值滤波后的水印图像 从中值滤波后的水印图像提取水印图像是很差的,几乎看不出原始水印图像的样子,如下图:图2.4 原始水印图像与中值滤波后提取的水印图像2.2.2 程序代码%************************************************************************************ ①求解水印图像的峰值信噪比和均方误差函数function[MseValue,PsnrValue]=MsePsnr(OrigImg,Watermark)%计算均方误差%OrigImg为原始图像%Watermark为嵌入水印信息后的图像MseValue=0;OrigImgMatrix=double(imread(OrigImg)); %读入更改后bmp位图,存入矩阵ImgMatrix中WatermarkMatrix=double(imread(Watermark));%读入更改后bmp位图,存入矩阵ImgMatrix中[r c]=size(OrigImgMatrix);for i=1:rfor j=1:cMseValue=MseValue+(OrigImgMatrix(i,j)-WatermarkMatrix(i,j))^2;endendMseValue=MseValue/(r*c);PsnrValue=10*log10(255^2/MseValue);%************************************************************************************* ②水印嵌入函数,抖动嵌入函数function[ArrayB,WMsize,ChangedMatrix]=QIM2(OrigImg,Watermark,step)WaterMatrix=double(imread(Watermark)); %读入水印图像,存入矩阵WaterMatrix中BiMtrix=im2bw(WaterMatrix); % 将水印图像转化为二值图像[Br,Bc]=size(BiMtrix);ImgMatrix=double(imread(OrigImg)); %读入bmp位图,存入矩阵ImgMatrix中[r,c]=size(ImgMatrix);ChangedMatrix=ImgMatrix; %更改后的图像数据r8=floor(r/8);c8=floor(c/8);BlockCell=cell(r8,c8);ArrayB=[]; %存储抖动量的数组WMsize=[Br,Bc]; %存储水印图像的大小% ********************************************************************************%将图像进行分块,每块为8*8的子块for i=1:r8for j=1:c8BlockCell{i,j}=ImgMatrix(((i-1)*8+1):(8*(i-1)+8),(8*(j-1)+1):(8*(j-1)+8));endend%对分块后的图像进行DCT变换for i=1:r8for j=1:c8BlockCell{i,j}=dct2(BlockCell{i,j});endend% ********************************************************************************%将水印图像嵌入到原始图像中for i=1:Brfor j=1:Bcd0=randi([-30 30],1); %抖动量d0ArrayB=[ArrayB d0];if d0<0d1=d0+step/2;elsed1=d0-step/2;endif BiMtrix(i,j)==0BlockCell{i,j}(4,4)=BlockCell{i,j}(5,5)-(step*round((BlockCell{i,j}(5,5)-BlockCell{i,j}(4,4)+d0)/ step)-d0);elseBlockCell{i,j}(4,4)=BlockCell{i,j}(5,5)-(step*round((BlockCell{i,j}(5,5)-BlockCell{i,j}(4,4)+d1)/ step)-d1);endendend% ********************************************************************************%执行逆DCT逆变换,并将更改后的图像数据存储到矩阵ChangedMatrix中for i=1:r8for j=1:c8BlockCell{i,j}=idct2(BlockCell{i,j});ChangedMatrix(((i-1)*8+1):(8*(i-1)+8),(8*(j-1)+1):(8*(j-1)+8))=BlockCell{i,j};endend% ********************************************************************************③水印提取函数function [WaterMatrix]=ExtractWater(WMsize,ArrayB,ChangedImg,step)% 抖动调制算法,QIM的提取水印算法ImgMatrix=double(imread(ChangedImg)); %读入更改后bmp位图,存入矩阵ImgMatrix中[r,c]=size(ImgMatrix);r8=floor(r/8);c8=floor(c/8);BlockCell=cell(r8,c8);Br=WMsize(1); % 水印图像的行数Bc=WMsize(2);% 水印图像的列数WaterMatrix=zeros(WMsize);% ********************************************************************************%将图像进行分块,每块为8*8的子块for i=1:r8for j=1:c8BlockCell{i,j}=ImgMatrix(((i-1)*8+1):(8*(i-1)+8),(8*(j-1)+1):(8*(j-1)+8));endend%对分块后的图像进行DCT变换for i=1:r8for j=1:c8BlockCell{i,j}=dct2(BlockCell{i,j});endend% ********************************************************************************%将水印图像从更改后的图像中提取出来for i=1:Brfor j=1:Bcd0=ArrayB((i-1)*Bc+j); %抖动量if d0<0d1=d0+step/2;elsed1=d0-step/2;endx=(BlockCell{i,j}(5,5)-BlockCell{i,j}(4,4))-(step*round((BlockCell{i,j}(5,5)-BlockCell{i,j}(4,4)+d 0)/step)-d0);y=(BlockCell{i,j}(5,5)-BlockCell{i,j}(4,4))-(step*round((BlockCell{i,j}(5,5)-BlockCell{i,j}(4,4)+d 1)/step)-d1);if abs(x)<abs(y)WaterMatrix(i,j)=0;elseWaterMatrix(i,j)=1;endendend% ******************************************************************************** ④主函数clcclearstep=20; %量化步长%*********************************************************************** [ArrayB,WMsize,ChangedMatrix]=QIM2('elain1.bmp','watermark.pgm',step);imwrite(uint8(ChangedMatrix),'elain1_mark.bmp');[WaterMatrix]=ExtractWater(WMsize,ArrayB,'elain1_mark.bmp',step);imwrite(WaterMatrix,'watermark_Changed.pgm');figure(1)subplot(121),imshow('elain1.bmp'),title('原始图像');subplot(122),imshow('elain1_mark.bmp'),title('用QIM嵌入水印后的图像');figure(2)subplot(121),imshow('watermark.pgm'),title('原始水印图像');subplot(122),imshow('watermark_changed.pgm'),title('提取的水印图像');%***********************************************************************%对水印图像采取中值滤波imwrite(uint8(medfilt2(ChangedMatrix)),'elain1_mark2.bmp');[WaterMatrix2]=ExtractWater(WMsize,ArrayB,'elain1_mark2.bmp',step);imwrite(WaterMatrix2,'watermark_Changed2.pgm');figure(3)subplot(121),imshow('elain1.bmp'),title('原始图像');subplot(122),imshow('elain1_mark2.bmp'),title('中值滤波后的水印图像');figure(4)subplot(121),imshow('watermark.pgm'),title('原始水印图像');subplot(122),imshow('watermark_changed2.pgm'),title('中值滤波后提取的水印图像'); %***********************************************************************%计算水印图像的峰值信噪比与均方误差[MseValue,PsnrValue]=MsePsnr('elain1.bmp','elain1_mark.bmp');disp('水印图像的峰值信噪比与均方误差分别为')PsnrValueMseValue% ********************************************************************************。