基于DWT(离散小波变换)的图像加密水印算法,Matlab实现

        博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188

        个人主页:Matlab_ImagePro-CSDN博客

        原则:代码均由本人编写完成,非中介,提供有偿Matlab算法代码编程服务,不从事不违反涉及学术原则的事。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        本次分享的是基于DWT(离散小波变换)的图像加密水印算法,用matlab实现。

        一、案例背景介绍

        前期的博文中,我们介绍了DWT、DCT、LSB等经典的数字水印算法,并对数字水印的背景、算法分类情况等做了比较详细的介绍,前期链接如下:

        基于DWT(离散小波变换)的图像水印算法(基于DWT(离散小波变换)的图像水印算法,Matlab实现-CSDN博客

        基于DCT(离散余弦变换)的图像水印算法(基于DCT(离散余弦变换)的图像水印算法,Matlab实现-CSDN博客

        基于LSB(最低有效位)的图像水印算法(基于LSB(最低有效位)的图像水印算法,Matlab实现-CSDN博客

        前期介绍过的组合混度加密相关算法,链接如下:

基于组合混沌映射的图像加密算法(基于组合混沌映射的图像加密算法,Matlab实现_图像加密中spm是什么-CSDN博客

        这次我们分享的图像水印与图像加密相结合的算法,基于DWT(离散小波变换)的图像加密水印算法。

        二、算法原理概述

        在前面的数字水印相关博文中,采用的是直接嵌入图像水印的方法,不同算法的差异是嵌入方式的不同。这次介绍的加密水印,先通过一定的加密算法,将水印图像进行加密,然后再通过传统经典的算法进行加密后水印的嵌入,增强了水印信息的保密性。算法原理上,本次水印图加密算我们采用的是logistic算法混沌加密,嵌入算法采用DWT(离散小波变换)算法。当然,各位同学也可以采用DCT等嵌入方式,原理大同小异了。

        三、原理流程

        嵌入过程:

        1、读取待嵌入的原图和水印图像

        2、对水印进行加密,使用logistic混沌算法置乱加密

        3、嵌入水印部分,使用DWT水印算法(前期博文有细说DWT算法,这里不再粘贴嵌入细节步骤)

        提取过程就是嵌入的逆过程,具体如下:

        1、读入嵌入水印后的的图像

        2、通过DWT算法,提取水印,得到待解密的水印图像

        3、将提取的水印解密,采用logistic混沌算法置乱解密,提取完成

        四、Matlab实现效果

        嵌入:

        提取过程:

        

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

专注、专一于Matlab图像处理学习、交流、代做

QQ:3249726188

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于DWT的邻近值水印算法Matlab实现代码: ```matlab % 加载原始图像 I = imread('lena.png'); % 将原始图像转换为灰度图像 I = rgb2gray(I); % 显示原始图像 subplot(2,2,1); imshow(I); title('原始图像'); % 加载水印图像 W = imread('watermark.png'); % 将水印图像转换为二值图像 W = im2bw(W, 0.5); % 显示水印图像 subplot(2,2,2); imshow(W); title('水印图像'); % 对原始图像进行DWT变换 [C, S] = wavedec2(I, 2, 'haar'); % 获取第二层DWT系数 [H, V, D] = detcoef2('all', C, S, 2); A = appcoef2(C, S, 'haar', 2); % 对水印图像进行重复扩展 W = repmat(W, [1, 1, size(H, 3)]); % 将水印图像嵌入到DWT系数中 H = embed_watermark(H, W); V = embed_watermark(V, W); D = embed_watermark(D, W); % 重建DWT系数 C = [A(:); H(:); V(:); D(:)]; I_watermark = waverec2(C, S, 'haar'); % 显示加水印后的图像 subplot(2,2,3); imshow(I_watermark, []); title('加水印后的图像'); % 提取水印图像 W_extract = extract_watermark(H); % 显示提取出的水印图像 subplot(2,2,4); imshow(W_extract); title('提取出的水印图像'); % 嵌入水印函数 function X_watermark = embed_watermark(X, W) % 获取邻近值 X_near = round(X/2)*2; % 将水印图像转换为-1和1 W(W == 0) = -1; % 嵌入水印 X_watermark = X_near + W; end % 提取水印函数 function W = extract_watermark(X) % 获取邻近值 X_near = round(X/2)*2; % 提取水印 W = (X - X_near) / 2; % 将水印转换为0和1 W(W < 0) = 0; W(W >= 0) = 1; end ``` 注意:在使用该代码时,需要将lena.png和watermark.png替换为自己的图像,并且需要将水印图像转换为二值图像

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值