MATLAB 图像嵌入水印图像程序

MATLAB 图像嵌入水印图像程序

原理:

水印的嵌入

  1. 对64x64像素的水印图像(可为rgb或灰度图像)进行猫脸变换,得到置乱后的水印图像 W ′ W' W
  2. 对512x512像素的载体图像分割成互不重叠的8x8的小方块,后对每个小块进行DCT离散余弦变换,取变换矩阵中的中频系数构成4x4的矩阵 B i j ( i = 1 , 2 , . . . , m ; j = 1 , 2 , . . . , n ) B_{ij}(i=1,2,...,m; j=1,2,...,n) Bij(i=1,2,...,m;j=1,2,...,n)
  3. B i j B_{ij} Bij矩阵进行奇异值分解SVD,取最大的奇异值构成矩阵 A A A,再对 A A A进行奇异值分解: A = U S V T A=USV^T A=USVT
  4. 将置乱后的水印图像矩阵 W ′ W' W叠加到矩阵 S S S上,
    • D = S + α W ′ D=S+\alpha W' D=S+αW (常数 α \alpha α为嵌入因子)
    • 奇异值分解 D = U 1 S 1 V 1 T D = U_1S_1V_1^T D=U1S1V1T
    • 反变换得 A ′ = U S 1 V T A'=US_1V^T A=US1VT
  5. A ′ A' A中相应的元素替换 B i j B_{ij} Bij中的最大奇异值,将变换后的中频系数矩阵 B i j B_{ij} Bij还原回相应的块中;
  6. 对每一块嵌入了水印信息的矩阵进行逆DCT变换,最后得到嵌入了水印图像信息的图像 I ′ I' I

水印的提取

  1. 对图像I*分成8x8的小块,并对每一个小块进行DCT离散余弦变换;
  2. 取每一块中的16个中频系数,构成矩阵Bij*; 后对其进行奇异值分解SVD,取最大奇异值构成矩阵A*;
  3. 设需要提取的水印图像为W*,提取步骤为:
    • A = U ∗ S ∗ V ∗ T A=U*S*V*T A=USVT
    • D = U 1 ∗ S ∗ V 1 T D = U_{1}*S*V_1^T D=U1SV1T
    • W ∗ = ( D − S ) / α W^* = (D-S)/\alpha W=(DS)/α
  4. 将提取出的灰度水印图像经过猫脸逆变换,得到水印图像。

程序

此程序将水印图像添​​加到载体图像中以进行加密。此程序包含 3 个文件,分别是:

  1. watermark_main.m : 添加水印的主函数,
  2. ArnoldTransform.m : 猫脸变换函数(arnold transform),
  3. InverseArnoldTransform.m : 猫脸逆变换函数(inverse arnold transform).

watermark_main函数的输入参数为:

  1. base_img_path: 载体图像路径,
  2. watermark_img_path: 水印图像路径,
  3. save_img1_path: 保存加过水印的图像路径,
  4. save_img2_path: 保存提取的水印图像路径.

该程序需要一个载体图像,即想要使用水印加密的图像和想要嵌入到载体图像中的水印图像。在水印嵌入过程中,载体图像和水印图像会从rgb转换为灰度,水印图像也会被转换成64*64像素。

这个博客中的程序可从github中下载使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值