(一)概述

数字水印(Digital Watermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到,只 有 通 过 专 用 的 检 测 器 或 阅读器才能提取。数字水印是一个崭新的信息隐藏技术,首次提出这个概念至今也不到20年。

(二)分类

1. 空域LSB

LSB方法是最简单的嵌入水印的方法。事实上 ,任何一幅 图片都具备一定的容噪性 ,这表现在像素数据的最低有效位(Least Significant Bit,LSB)对 人 眼的视觉影响很 小,秘密信息就隐藏在图像每一个像素的最低位或次低位 ,实现其不 可见性。

实现代码(jupyter)

  1. 显示原图
import cv2
import numpy as np
from IPython.display import Image, display

def showimg(img=None, filename='temp.jpg'):
"""
img: 需要显示的图像数据
filename: 需要暂存的图像名
"""
if img is not None:
cv2.imwrite(filename, img)
display(Image(filename=filename))

img = cv2.imread('spider.jpg')
showimg(img,'src.jpg')
  1. 将原图的LSB位置0
SET_0_BIT_TO_0 = ~1
for i in range(img.shape[0]):
for j in range(img.shape[1]):
pixel = img[i, j]
pixel[0] &= SET_0_BIT_TO_0
pixel[1] &= SET_0_BIT_TO_0
pixel[2] &= SET_0_BIT_TO_0
showimg(img, 'LSB_to_0.jpg')
  1. 将水印二值化
shuiyin = cv2.imread('shuiyin.png', 0)
src_width = img.shape[1]
src_height = img.shape[0]
scale_percent = src_width/shuiyin.shape[1]
width = int(shuiyin.shape[1] * scale_percent)
height = int(shuiyin.shape[0] * scale_percent)
dim = (width, height)
shuiyin_resized = cv2.resize(shuiyin, dim, interpolation = cv2.INTER_AREA)
showimg(shuiyin_resized)
# 二值化
th1,shuiyin_resized = cv2.threshold(shuiyin_resized,127,1,cv2.THRESH_BINARY)
  1. 添加水印(人眼对绿色更加敏感,可以把水印加在B分量上)
tmp_j = min(img.shape[0],shuiyin_resized.shape[0])
for i in range(tmp_j):
for j in range(img.shape[1]):
pixel = img[i, j]
pixel[0] |= shuiyin_resized[i,j]
showimg(img, 'after_fusion.jpg')
showimg(filename='src.jpg')
  1. 还原水印
ret_img = np.zeros(img.shape, np.uint8)
for i in range(ret_img.shape[0]):
for j in range(ret_img.shape[1]):
if img[i,j,0] % 2 == 1:
ret_img[i,j] = 255
showimg(ret_img, 'huanyuan_shuiyin.jpg')

应用程序

这是我自己写的程序,可以可视化的添加或解析LSB数字水印,详细代码如下:

https://github.com/xiaoqinxing/ImageTools/blob/master/tools/imageeditor/imageeffect.py

2. 频域

将图片的灰度强弱,视为图片的频域。通过某种变换手段(傅里叶变换,离散余弦变换,小波变换等)将图像变换到频域(小波域),在频域对图像添加水印,再通过逆变换,将图像转换为空间域。相对于空域手段,频域手段隐匿性更强,抗攻击性更高。

3. 小波变换

“小波”就是小区域、长度有限、均值为0的波形。小波变换就是选择适当的基本小波或母小波ψ(t),通过对基本小波的平移、伸缩而形成一系列的小波,这簇小波作为基可以构成一系列嵌套的(信号)子空间,然后将欲分析的信号(例如图像)投影到各个大小不同的(信号)子空间之中,以观察相应的特性。这样,就相当于我们用不同的焦距去观察一个物体,可从宏观到微观,从概貌到细节观察得十分详尽。所以小波变换又被称为“数学显微镜”。

4. 空域+频域

该算法通过混沌置乱水印图像,建立水印与载体数据之间的Hash单向映射函数,使用两种不同的嵌入方法,先后嵌入水印到空域和DFT域。水印被多次嵌入,实现了水印的盲提取。

(三)数字水印的应用场景

  • 多媒体作品盗版追溯:利用数字水印的不可见性,在不影响作品的情况下,加入版权信息的数字水印,可抗击拷贝,剪切。
  • 证件的防伪认证:如学历证,合同,票据等,携带数字水印后,可通过制定的方式提取水印,验证证件等数字文件是否被涂改;
  • 阿里事件:阿里追查泄密员工的时间本身,说明,水印可以有效的追溯信息的释放源;
  • 隐蔽信息传递:水印可携带加密信息后,藏在多媒体文件中传播,并通过特定的提取方式获取水印。可以作为一种隐蔽信息的通信方式。