初学差值扩展算法(2023.9.19)


前言

差值扩展(difference expance )可逆水印,将水印信息嵌入至图像,再做完好提取以及完好恢复图像。


一、原理

(1)嵌入过程
图像中取一对像素相邻对(x,y),可以水平相邻,也可以垂直相邻。
计算均值 l = [ (x+y )/2 ] , 差值 h = x-y , 中括号为取整运算。
假设要隐藏的二进制信息为 b , b为0 或 1。
则计算 h’ = 2*h+b, 其中h’表示嵌入的信息和差值h之间的关系(h’为二进制数h后加上最低有效位b,即h左移一位数值翻倍,再加上最低有效位b得到h’)。
接着需要判断 h’ 和 l 还原出来的值有没溢出超过0 或 255, 只需判断 h’属不属于[ 0 , min(2(255-l) , 2l+1)] , 如果属于的话,则为可扩展,再计算出嵌入好信息的 x’,y’,公式(1)为

x’ = l+[(h’+1)/2],y’=l-[h’/2 ] | h’>=0
x’ = l+[h’/2],y’=l-[(h’-1)/2] | h’<0

如果上面不属于,则是不可扩展,再使用直接改变lsb的形式,需要先记下原先的lsb位,例如 11%2 =1 , lsb(11) = 1
令 d = lsb(h) , 再计算 h’ = 2*[ h/2]+b , 这个实际直接改变了 h的 lsb位

然后再判读h’ 是否属于[ 0 , min(2(255-l) , 2l+1)] ,属于的话,则为可改变,同样计算公式(1)可得到嵌入好信息的 x’,y’

(2)提取过程:

假设嵌入好信息的像素对为x’和y’。
计算均值l = [(x’ + y’) / 2]和差值h’= x’ - y’。
隐藏的二进制信息为:b = h’% 2。
如果是可扩展嵌入方式,则恢复真实差值h = (h’ - b) / 2。
如果是可改变嵌入方式,则恢复真实差值h = h’ - b + d。
根据l和h计算恢复的x和y:

如果h >= 0,则x = l + [(h + l) / 2],y = l - [h / 2]。
如果h < 0,则x = l + [h / 2],y = l - [(h - 1) / 2]。
这样就可以得到提取的隐藏的二进制信息b和恢复出来的x、y

二、举例

假设我们有一对相邻像素(x,y),其中x = 100,y = 90。我们想要隐藏一个二进制信息b = 1。首先,我们计算均值l = [(x + y) / 2] = [(100 + 90) / 2] = 95和差值h = x - y = 100 - 90 = 10。

接下来,我们计算h’= 2 * h + b = 2 * 10 + 1 = 21。由于21在[0,min(2(255 - l),2l + 1)]范围内(0 <= 21 <= min(2(255 - 95),2 * 95 + 1)),我们可以计算嵌入好信息的x’和y’:

如果h’ >= 0,则x’ = l + [(h’ + 1) / 2] = 95 + [(21 + 1) / 2] = 95 + 11 = 106,y’ = l - [h’ / 2] = 95 - [21 / 2] = 95 - [10.5] ≈ 85。
因此,我们嵌入了二进制信息b = 1,并得到了新的像素对(106,85)。

在提取过程中,我们使用相同的像素对(106,85)。我们计算均值l = [(106 + 85) / 2] ≈95和差值h’= x’ - y’ = 106 - 85 = 21。提取水印信息:b = h’ % 2 =21 % 2=1。因为这是可扩展嵌入方式,我们恢复真实差值h=(h’-b)/2=(21-0)/2=10。根据l和h计算恢复的x和y:

如果h >=0,则x=l+[(h+1)/2]=95+[(10+1)/2]]=95+5=100,y=l-[h/2]=95-[10/2]=95-5=90。
因此,我们提取了二进制信息b=1,并恢复了原始像素对(100,90)。

总结

以上就是我粗略学习差值扩展算法的内容,具体参考链接: link与链接: link

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值