水印加密
foxkw opened this issue · comments
foxkw commented
为啥看embed的代码中,加密完又接着解密, 那不是白加了吗?
`def block_add_wm_slow(self, arg):
block, shuffler, i = arg
# dct->(flatten->加密->逆flatten)->svd->打水印->逆svd->(flatten->解密->逆flatten)->逆dct
wm_1 = self.wm_bit[i % self.wm_size]
block_dct = dct(block)
# 加密(打乱顺序)
block_dct_shuffled = block_dct.flatten()[shuffler].reshape(self.block_shape)
u, s, v = svd(block_dct_shuffled)
s[0] = (s[0] // self.d1 + 1 / 4 + 1 / 2 * wm_1) * self.d1
if self.d2:
s[1] = (s[1] // self.d2 + 1 / 4 + 1 / 2 * wm_1) * self.d2
block_dct_flatten = np.dot(u, np.dot(np.diag(s), v)).flatten()
block_dct_flatten[shuffler] = block_dct_flatten.copy()
return idct(block_dct_flatten.reshape(self.block_shape)) # 逆dct`