一种基于HVS和DWT的图像半脆弱水印算法

需积分: 9 5 下载量 131 浏览量 更新于2024-09-06 收藏 352KB PDF 举报
"基于HVS和DWT的半脆弱水印算法" 本文主要探讨了一种结合人类视觉系统(Human Visual System, HVS)特性和离散小波变换(Discrete Wavelet Transform, DWT)的半脆弱数字水印算法,旨在确保数字图像的完整性和真实性。半脆弱水印算法在水印的嵌入和检测过程中具有一定的鲁棒性,同时能够精确检测和定位图像的恶意篡改。 在深入理解HVS特性后,该算法首先考虑了人眼对图像细节的感知差异,利用HVS掩蔽图像来降低水印对原始图像质量的影响。HVS掩蔽图像能够模拟人类视觉对不同频率和位置的敏感度,从而选择性地在图像的不敏感区域嵌入水印,减少视觉察觉。 水印的生成过程中,使用了Arnold变换对原始二值水印图像进行预处理,增强其安全性。Arnold变换是一种常见的混沌变换,可以有效地打乱水印图像的结构,使得未经授权的攻击者难以恢复原始水印。 接着,算法对宿主图像和经过HVS处理的图像进行DWT变换,将图像分解为多个频域分量。通过对分解得到的小波系数进行调整,将水印信息嵌入到适当的频域中。这种基于小波的嵌入方式允许水印在不同的频域层次上分布,增强了水印的鲁棒性。 在水印检测阶段,通过对比嵌入水印前后的图像小波系数差异,可以判断图像是否遭受篡改。如果检测到的水印序列与嵌入时的序列一致,说明图像未被恶意修改;反之,则表明图像可能已被篡改,且能进一步定位到篡改发生的位置。 实验结果证明,该算法对于常见的图像处理操作(如压缩、剪切、滤波等)具有良好的鲁棒性,同时在恶意攻击检测和定位方面表现出色。这使其成为数字图像验证的有效工具,特别是在多媒体版权保护和内容真实性验证等领域具有广泛应用价值。 关键词:半脆弱数字水印;人类视觉系统;离散小波变换;图像认证;恶意篡改检测 中图分类号:TP3121(计算机软件及计算机应用) 总结,该算法通过结合HVS的特性与DWT的强大变换能力,实现了一种既能保证图像质量,又能有效检测和定位篡改的半脆弱水印方案。其在应对各种图像处理和恶意攻击时展现出的鲁棒性和准确性,为数字媒体的安全性和真实性提供了可靠保障。

from PIL import Image import numpy as np import io # 读取原始图像和压缩后图像 original_img = Image.open('test.jpg') compressed_img = Image.open('test_compressed.jpg') # 将图像转换为 NumPy 数组 original_img_arr = np.array(original_img) compressed_img_arr = np.array(compressed_img) # 计算原始图像大小 original_size = original_img_arr.nbytes # 计算压缩后图像大小 compressed_size = compressed_img_arr.nbytes # 计算压缩率 compression_ratio = compressed_size / original_size # 计算峰值信噪比(PSNR) mse = np.mean((original_img_arr - compressed_img_arr) ** 2) psnr = 10 * np.log10(255**2 / mse) # 计算结构相似性指数(SSIM) from skimage.metrics import structural_similarity as ssim ssim_score = ssim(original_img_arr, compressed_img_arr, multichannel=True) # 计算峰值信噪比改进比(PSNR-HVS) from skimage.metrics import peak_signal_noise_ratio as psnr_hvs psnr_hvs_score = psnr_hvs(original_img_arr, compressed_img_arr, data_range=original_img_arr.max()) # 计算多样性信噪比(MS-SSIM) from skimage.metrics import multi_scale_ssim as ms_ssim ms_ssim_score = ms_ssim(original_img_arr, compressed_img_arr, data_range=original_img_arr.max(), win_size=11) # 计算复杂度压缩比(CPC) cpc = psnr / compression_ratio # 输出七种压缩率 print(f"Compression ratio: {compression_ratio:.4f}") print(f"Peak Signal-to-Noise Ratio (PSNR): {psnr:.2f}") print(f"Structural Similarity Index (SSIM): {ssim_score:.4f}") print(f"Peak Signal-to-Noise Ratio - HVS (PSNR-HVS): {psnr_hvs_score:.2f}") print(f"Multi-Scale Structural Similarity (MS-SSIM): {ms_ssim_score:.4f}") print(f"Complexity-Compression Ratio (CPC): {cpc:.2f}") print(f"Original size: {original_size:,}") print(f"Compressed size: {compressed_size:,}")ValueError: operands could not be broadcast together with shapes (417,556,3) (418,558,3)

2023-05-30 上传