赞
踩
这是一种很老的水印技术,属于空间域水印,具体出处没有查证。
脏纸编码原理参考::脏纸编码课件
先编写 脏纸编码 的公式:
# Dirty Paper Precoding
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
from PIL import Image
def dirty_paper_code(y, T):
tmp = (y + T/2) /T
tmp = np.floor(tmp)*T
res = y-tmp
return res
然后是主程序,因为嵌入和提取的过程太简单了,所以就一并写到了主程序里:
wm = Image.open('watermark.png') # wm = wm.convert("L").resize((512,512)) im = data.camera() T = 2 s = dirty_paper_code(wm-im, T) im_wm = im + s wm_ex = -dirty_paper_code(im_wm , T) fig, (ax_wm, ax_im, ax_im_wm, ax_wm_ex)=plt.subplots(nrows = 1,ncols = 4, figsize = [20,20]) ax_wm.imshow(wm, cmap = plt.cm.gray) ax_wm.set_xlabel('wm') ax_im.imshow(im, cmap = plt.cm.gray) ax_im.set_xlabel('im') ax_im_wm.imshow(im_wm, cmap = plt.cm.gray) ax_im_wm.set_xlabel('im_wm') ax_wm_ex.imshow(wm_ex, cmap = plt.cm.gray) ax_wm_ex.set_xlabel('wm_ex')
水印大小为512*512,图像大小也是512*512,以下为效果图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。