QIM水印中cv2中DCT和iDCT的不一致

问题描述

这是我在这里的第一篇文章,因此,如果未正确完成操作,请原谅我。

我基本上是在尝试使用Python实现QIM水印脚本。为此,我在转换域中嵌入了水印(图片的索引在数据库中)。

例如:

我将这个水印:Index of watermark in database嵌入到该图像:the image to be watermarked中,并且得到以下结果:enter image description here。现在看来,它可以正常工作,所以我将当前代码留在下面。

def Watermarking(original,watermark,key,alpha,step_size,name_of_file):
watermarked = DCT(original)

# Embed Watermark in DCT
columns = np.shape(watermark)[1]
lines = np.shape(watermark)[0]

for k in range(lines):
    for j in range(columns):
        quant = step_size * round((watermarked[k+100][j+100]-step_size*((watermark[k][j]/2)+key))/step_size)-(watermarked[k+100][j+100]-step_size*((watermark[k][j]/2)+key))
        watermarked[k + 100][j + 100] = watermarked[k+100][j+100]+(alpha*quant)

# Preventing rewriting on original image because of DCT

ImWrite("Watermarked/Watermarked" + str(name_of_file) + ".png",iDCT(watermarked))
print("Watermarked image " + str(name_of_file) + " created")

我尝试检测水印时遇到的问题是,我得到了以下结果:Not the watermark at all...

起初我以为这是编码错误,但后来我尝试了一些方法。我直接在水印脚本的DCT上使用了检测脚本,它可以正常工作。但是,当我使用检测脚本的DCT时,似乎无法获得正确的结果...因此,如果有人有任何想法,我将在下面保留检测代码。预先感谢。

def DetectWatermark(image,nof):

bis_image = DCT(image)
columns = 64
lines = 64
result = np.full((lines,columns),255)

for k in range(lines):
    for j in range(columns):
        decision = step_size*round((bis_image[k+100][j+100]-(key*step_size))/step_size)-(bis_image[k+100][j+100])+(key*step_size)
        if abs(decision) < ((1 - alpha) * (step_size / 2)):
            result[k][j] = 0
        else:
            result[k][j] = 255

ImWrite("Retrieved/Retrieved" + str(nof) + ".png",result)
print("Retrieved Watermark for Image " + str(nof))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)