dct草稿啊

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from scipy.fftpack import dct, idct

# DCT嵌入和提取函数,不改变水印大小
def dct_embed_extract_fixed_size(watermark, host, start_x, start_y, alpha=0.05):
    end_x, end_y = start_x + watermark.shape[0], start_y + watermark.shape[1]
    region_host = host[start_y:end_y, start_x:end_x].astype(float)
    watermark_float = watermark.astype(float)

    # 应用二维DCT
    dct_watermark = dct(dct(watermark_float.T, norm='ortho').T, norm='ortho')
    dct_region_host = dct(dct(region_host.T, norm='ortho').T, norm='ortho')

    # 嵌入水印
    combined_dct = dct_region_host + alpha * dct_watermark

    # 应用二维IDCT
    modified_region = idct(idct(combined_dct.T, norm='ortho').T, norm='ortho')
    host[start_y:end_y, start_x:end_x] = modified_region

    # 提取水印
    extracted_watermark = (modified_region - region_host) / alpha
    return host, extracted_watermark

# 加载图像
logistic_img = Image.open("/path/to/your/Logistic.png").convert('L')
baboo_img = Image.open("/path/to/your/baboo256.BMP").convert('L')

# 转换为numpy数组
logistic_array = np.array(logistic_img)
baboo_array = np.array(baboo_img)

# 选择嵌入的起始位置,确保水印完全在宿主图像内
start_x, start_y = 50, 50  # 调整这些值以适应你的图像尺寸
modified_baboo, extracted_watermark = dct_embed_extract_fixed_size(logistic_array, baboo_array, start_x, start_y)

# 显示和保存图像
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
axs[0].imshow(baboo_array, cmap='gray')
axs[0].set_title('Original Baboo Image')
axs[1].imshow(modified_baboo, cmap='gray')
axs[1].set_title('Modified Baboo Image')
axs[2].imshow(extracted_watermark, cmap='gray')
axs[2].set_title('Extracted Watermark Image')
for ax in axs:
    ax.axis('off')
plt.show()

# 保存修改后的图像和提取的水印图像
modified_baboo_img = Image.fromarray(modified_baboo.astype(np.uint8))
extracted_watermark_img = Image.fromarray(extracted_watermark.astype(np.uint8))
modified_baboo_img.save("/path/to/save/modified_baboo.png")
extracted_watermark_img.save("/path/to/save/extracted_watermark.png")

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值