第七章_数字水印技术-变换域算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NEC算法的原理 • 原始图像的频域看作通信信道,水印看作通过信道传 输的信号,利用扩频通信原理,将1bit水印分布在图 像的多个感知重要频域系数(DCT变换域的AC低频系 数)中,加在每个频域系数上的信号能量很小且不可 随意检测;水印检测时,需要知道水印的位置和内容, 将许多虚弱的信号集中起来得到水印。
2 :
:
256
修改DC系数对视觉的影响 • DC′= DC(1+5%)
修改DC系数对视觉的影响 • DC′= DC(1+25%)
修改DC系数对视觉的影响 • DC′= DC(1+50%)
修改低频AC系数对视觉的影响 • ACL′= ACL(1+5%)
修改低频AC系数对视觉的影响 • ACL′= ACL(1+25%)
59 61 F 62 59 60 59 59 61 58 59 60 60 57 57 58 56
236.25 1.0592 D 1.25 IDCT变换 0.7093
DCT变换
4.5169 0.1768 0.4387 0.2803
• Wi ' =[(Yi-Xi) /Xi]α,其中Y是可能含有水印信息的n个 DCT系数
NEC算法描述 • 水印的检测 – 通过下式计算原始水印W与提取水印W'之间的相似 程度sim(W,W')
W 'W sim(W ,W ' ) W W
– 然后将sim(W,W')与预先设定的阈值进行比较,判断 水印的存在与否。阈值可以通过实验的方法获得, 也可以通过一些统计和假设的方法获得
NEC算法实现 %文件名:COX_Detect.m %函数功能:提取水印信号 %格式:Wd = COX_Detect (I, J, alpha, N) %参数说明: %I:原始图像矩阵 %J:待测图像矩阵 % alpha:水印强度 %N:嵌入水印长度 % Wd:提取水印
38
NEC算法:提取算法
function Wd = Cox_Detect (I, J, alpha, N) [m, n] = size(I); [x, y] = size(J); if ( (m~=x)|(n~=y)) error ('图像大小不一致'); end DCTI = dct2 (I); DCTJ = dct2 (J); index = FindNLargest (abs(DCTI), N); for i = 1:N Wd(i) = (DCTJ(index(1,i),index(2,i))/DCTI(index(1,i),index(2,i))1)/alpha; end
1.3762 0.7803 1.4419 0.1768
扩频通信 • 扩展频谱通信(spread spectrum communication) – 起源于通信系统,其理论基础来源于信息论和抗干 扰理论 – 是一种信息传输方式,其信号所占有的频带带宽远 大于信息必需的最小带宽,以此来改善通信质量, 保持可靠通信
• 将水印嵌入DCT变换域的AC高频系数
– 从水印鲁棒性考虑
• 将水印嵌入DCT变换域的DC系数或AC低频系数
NEC算法的原理 • 为了解决水印不可见性和鲁棒性的矛盾,COX等人通 过类比通信中的扩频技术,将水印信息嵌入到图像的 AC低频系数,产生了第一个基于扩频思想的数字水印 算法。
如何添加水印?
1.75 1.1713 2.25 0.8678
1.1056 0.7803 1.7125 0.1768
60 ~ 61 F 62 59
60 59 59 61
58 59 60 60
57 57 58 55
236.25 5.5169 0.0592 0.1768 D 1.25 0.4387 IDCT变换 0.7093 0.2803
mi
'
x ' ' (i , j ) x (i , j )
• x ' ' (i , j ) :待测图像的对应中频系数 • m ' :提取出的隐藏信息
i
方式二(嵌入、提取) • 在选出的中频系数中叠加秘密信息
x' (i, j ) x(i, j )(1 mi )
• 在约定的中频系数中提取信息
NEC算法描述 • 水印的产生 – 将1bit水印扩展成能量小的水印序列 – 产生一个长度为N的随机序列W作为水印信息
NEC算法描述 • 水印的嵌入 – 对图像数据进行二维DCT变换 – 寻找最大的N个DCT系数X用来携带水印信息 – 根据下式得到含水印的DCT系数S
• Si=Xi (1+αWi),其中W是水印, α是尺度因子,用于控制 水印的嵌入强度 • 嵌入强度越大,水印鲁棒性越强,但不可见性越差
– 进行二维逆DCT变换,并将像素灰度值进行截断使 其值位于[0,255]之间,从而得到含水印图像
复习
• NEC算法流程
水印嵌入DCT低频系 数 水印嵌入强度固定
Si=Xi (1+α Wi)
NEC算法描述 • 水印的提取 – 对接收到的可能含有水印的图像和原始图像做DCT 变换 – 找到可能含有水印信息的N个DCT系数,根据下式 提取水印信息W'
修改低频AC系数对视觉的影响 • ACL′= ACL(1+50%)
修改中频AC系数对视觉的影响 • ACM′= ACM(1+5%)
修改中频AC系数对视觉的影响 • ACM′= ACM(1+25%)
修改中频AC系数对视觉的影响 • ACM′= ACM(1+50%)
修改高频AC系数对视觉的影响 • ACH′= ACH(1+5%)
16 19 24 29
15 0 D 0 0
0 0 0 0
0 0 0 0
0 0 0 0
压缩攻击对AC系数的影响 • 将水印嵌入“经量化后被保存的DCT变换域系数”可 以抵抗压缩攻击
NEC算法的原理 • 考查DCT变换域中什么位置适合嵌入水印? – 从水印不可见性考虑
第七章
数字水印技术 —变换域算法
1
水印技术
• 从加载方式上分类 – 空间域水印:直接在载体数据上加载水印信息
• LSB算法 • 拼凑算法
– 变换域水印:载体数据经过变换后添加水印信息
• NEC算法
2
内容
• 变换域算法: NEC算法 – 设计原理 – 算法描述 – 程序代码 – 性能分析
背景介绍 • NEC算法( COX算法/ 基于扩频技术的算法)
NEC算法:检测算法
W 'W sim(W ,W ' ) W W
function sim=Similar(x,y) [m,n]=size(x); %m=1,行向量;n=1,列向量 if(m~=1&n~=1) error('错误:x应为矢量'); end [a,b]=size(y); if(a~=1&b~=1) error('错误:y应为矢量'); end sim=sum(x(1:n).*y(1:b))/sum(y(1:b).*y(1:b));
NEC算法的原理 • 在DCT变换域嵌入水印 • 考查DCT变换域中什么位置适合嵌入水印?
DCT变换
• I=imread('lena.bmp'); • J=dct2(I);
256*256 灰度图像lena
变换域: DCT变换系数 • DC系数 • AC系数:低频系数、中频系数、高频系数
1 2 1 „ 256
1.75 1.1056 1.1713 0.7803 2.25 1.7125 0.8678 0.1768
236.25 0.4059 D 1.25 0.9799
5.1702 0.1768 0.2146 0.2803
1.75 1.8245 2.25 1.1384
NEC算法的性能分析 • 水印容量? – 嵌入1bit水印 • 水印不可见性? – 好 • 水印鲁棒性? – 好
水印性能评价
水印不可见性分析
水印鲁棒性分析 • 相似度高,可以正确检测
思考 • 可以从哪些方面改进NEC算法,增强算法性能? – 平衡水印不可见性和鲁棒性 – 扩大水印嵌入容量 – 实现水印盲提取
4.5169 0.1768 0.4387 0.2803
1.75 1.1713 2.25 0.8678
1.1056 0.7803 1.7125 0.1768
除以量化系数,取整
16 12 C 14 14
11 12 13 17
11 14 16 22
NEC算法实现 • %文件名:COX_Embed.m • %函数功能:将均匀分布的随机序列(水印信号)按照 cox扩频方法嵌入到载体图像的DCT系数中 • %格式:J = COX_Embed (I, W, alpha, N) • %参数说明: • %I: 原始图像矩阵 • %W:水印信息 • %alpha: 水印强度 • %N :嵌入水印长度 • %J:嵌入水印图像矩阵
思考 • 水印算法如何设计才能平衡不可见性和鲁棒性?
改进思路 – 在中频部分嵌入水印 – 以一定的方式挑选一些中频系数,在这些中频系数中 叠加秘密信息
• 固定位置的中频系数 • 随机挑选中频系数
方式一(嵌入) • 在选出的中频系数中叠加秘密信息
x' (i, j) x(i, j) mi
mi
'来自百度文库
x ''( i , j ) x(i , j )
1
特点: 强度值选定后,按系数的大小,呈比例嵌入信息。
方式三(嵌入、提取) • 在选出的中频系数中叠加秘密信息
x' (i, j) x(i, j)emi
• 在约定的中频系数中提取信息
m 'i
x ' ' (i , j ) ln x (i , j )
压缩攻击对AC系数的影响 • 压缩的哪一步会造成图像数据的损失?
压缩攻击对AC系数的影响
60 59 59 61 58 59 60 60 57 57 58 56
59 61 F 含水印图像: 62 59
236.25 1.0592 DCT变换 D 1.25 0.7093
修改高频AC系数对视觉的影响 • ACH′= ACH(1+25%)
修改高频AC系数对视觉的影响 • ACH′= ACH(1+50%)
NEC算法的原理 • 考查DCT变换域中什么位置适合嵌入水印? – 从水印不可见性考虑
• 将水印嵌入DCT变换域的AC高频系数
– 从水印鲁棒性考虑
• 将水印嵌入什么位置?
思考 • 水印算法如何设计才能提高嵌入容量?
改进思路 • 扩大水印嵌入容量 – 图像分块,DCT变换,每块嵌入至少一位水印
思考 • 水印算法如何设计才能在提取水印时不需要原始图像?
• x(i, j ) :DCT系数 • x' (i, j ) :隐藏后的DCT系数 • m :第 i 个秘密信息比特 i • :可调参数,控制嵌入强度
特点: 强度值选定后,不管所选定的DCT系数的大小,加上 的都是固定值。对较大系数的影响小,对较小系数的影响 大。
方式一(提取) • 在约定的中频系数中提取信息
提示 index = FindNLargest (A, N); %index寻找到的A中最大N个值的坐标, index(1,:),行坐标;index(2,:),列坐标
NEC算法:嵌入算法
function J = Cox_Embed (I, W, alpha, N) [m, n] = size(I); If (m*n<N) error ('载体图像太小'); end DCTI = dct2(I); index = FindNLargest (abs(DCTI), N); %index寻找到的DCT系数坐标,index(1,:),行坐标;index(2,:),列坐标 for i = 1:N DCTI(index(1,i),index(2,i))=DCTI(index(1,i),index(2,i))*(1+alpha* W(i)); end J = idct2(DCTI); J = abs(J); J = uint8(J);