一个最简单的SVD 嵌入数字水印的代码,
这种水印方法是2002年被提出的,单纯的使用这种方法会导致假阳性问题,因此,一般和别的方法结合使用。
为了更好的表现水印嵌入效果,我将一个bit水印信息嵌入到一块内,这样做最简单,但是效果肯定比较差,主要用来理解这个方法。
代码如下:
首先定义 块SVD 变换:
def block_SVD(M, blk_size):
row_block = M.shape[0]//blk_size[0]
col_block = M.shape[1]//blk_size[1]
U = np.empty((row_block, col_block), dtype = object)
S = np.empty((row_block, col_block), dtype = object)
V = np.empty((row_block, col_block), dtype = object)
M = M[:M.shape[0]-M.shape[0]%blk_size[0],
:M.shape[1]-M.shape[1]%blk_size[1]]
rows = []
for i in range(0, M.shape[0], blk_size[0]):
cols = []
for j in range(0, M.shape[1

最低0.47元/天 解锁文章
353





