复现论文:Liu R, Tan T. "An SVD-based watermarking scheme for protecting rightful ownership." IEEE Transactions on Multimedia, 2002.
watermark/
├── src/
│ ├── __init__.py # 包初始化
│ ├── utils.py # 工具函数(PSNR、相关系数等)
│ ├── svd_watermark.py # SVD水印核心(嵌入、提取、检测)
│ ├── cox_watermark.py # Cox扩频水印(对比baseline)
│ └── attacks.py # 6种攻击模拟
├── data/ # 测试图像(Lena)和水印logo
├── results/ # 实验输出(图表、数据)
├── main.py # 主实验脚本
├── requirements.txt # Python依赖
└── README.md
- Python 3.8+
- 依赖安装:
pip install -r requirements.txt
python main.py所有实验结果将保存在 results/ 目录下。
| 实验编号 | 实验内容 | 对应论文图表 |
|---|---|---|
| 1 | 不可感知性测试(PSNR+误差图) | Fig.1 |
| 2 | 高斯噪声鲁棒性 (μ=0, σ²=0.05) | Fig.2, Fig.3 |
| 3 | 低通滤波鲁棒性 (5×5, σ=4) | Fig.4, Fig.5 |
| 4 | JPEG压缩鲁棒性 (Q=5) | Fig.6, Fig.7 |
| 5 | 旋转鲁棒性 (30°) | Fig.8, Fig.9 |
| 6 | 裁剪鲁棒性 (左半/右半) | Fig.10, Fig.11 |
| 7 | 缩放重采样鲁棒性 (×2) | Fig.12 |
| 8 | 可视化水印测试 | Fig.13, Fig.14 |
- 对原始图像A做SVD:A = U·S·V^T
- 在奇异值矩阵S上叠加水印:S + αW → SVD → U_w·S_w·V_w^T
- 生成水印图像:A_w = U·S_w·V^T
- 从失真图像恢复:S_w* ≈ U^T·A_w*·V
- 提取水印:W* = (U_w·S_w*·V_w^T - S) / α
- 计算相关系数判断水印是否存在