基于DWT-DCT-SVD的图像数字水印算法

这篇具有很好参考价值的文章主要介绍了基于DWT-DCT-SVD的图像数字水印算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、算法原理

二、结果

总结



前言

提示:这里可以添加本文要记录的大概内容:

  1. 数字水印技术作为知识产权保护及认证的重要手段,正得到广泛研宄与应用。数字水印技术是在数字产品中嵌入秘密信息,以便保护产品的版权、证明产品的真实可靠性、跟踪盗版行为或提供产品的附加信息。这个秘密信息被称为数字水印。本文通过基于 DWT-DCT-SVD 数字水印算法,首先对载体图像进行2级小波分解,在HH2分量上进行分块,再结合DCT和SVD技术嵌入水印,该算法具有更好的不可见性和鲁棒性。

提示:以下是本篇文章正文内容,下面案例可供参考

一、算法原理

  1. 离散小波变换算法

图像的离散小波变换一般是通过二维小波变换来实现,小波变换的过程如下图1所示,首先它将图像数据分割成若干个行与列组成的矩阵,对图像的每一行做一维小波变换获得原始图像在水平方向上的低频分量L和高频分量H,然后变换所得数据的每一列做一维的小波变换,经过变换之后图像就被分解成左上角的相似的一部分LL1,左下角垂直方向的细节部分 LH1,右上角水平方向的细节部分HL1,右下角对角线方向的细节部分 HH1,再对其中相似部分LL1再进行一级分解,从而实现图像的二级分解。

dwt-dct-svd,matlab

通对过两次分解后的图像多分辨率特点进行分析可得,图像多分辨率在空间方向具有很好的选择性,与人类的通过视觉来获取事物的特性过程十分吻合。因此,一般把集中原始图像绝大多数能量的相似部分称为逼近子图。子带图像的左上角细节部分、右上角的细节部分和右下角细节部分分别刻画了原始图像的边缘、轮廓和纹理细节等特征,并都将它们称为细节子图。逼近子图由于保留了原始图像的大部分内容,使其更不容易受到外界影响,具有较强的抗干扰性,稳定性也相对较好而边缘细节子图保留原始图像的细节较少,更则容易受外来噪声、图像处理的攻击,稳定性也较差。

2.离散余弦变换算法

离散余弦变换作为数字信号处理领域最常用的算法之一,也可以同傅里叶变换一样实现快速算法。由于避免了傅里叶变换中的复数运算,离散余弦变换通过实数的正交变换使得计算的速度得到了很大的提升,同时也能够实现很好的能量压缩和去相关的能力,因此该算法在图像压缩领域和数字音频信号压缩等领域都有着普遍的应用。增强水印的抗压缩能力可以通过压缩标准模型的水印嵌入算法来实现,因此,研究离散余弦变换对于数字水印处理技术有着显著的意义。特别是实现离散余弦变换后使得能量集中,同时算法并不复杂,因此可以更容易在数字信号处理器中快速实现。

图像离散余弦变换(DCT) 公式如下:

dwt-dct-svd,matlab

 式中: F(u,v)为离散余弦函数,f(x,y)为图像原始数据。

3.奇异值分解算法

奇异值分解( Singular Value Decomposition) 是矩阵分析应用中一种非常重要的分解方法,尤其是正规矩阵酉对角化在信号处理、数字图像处理、统计学等领域占有重要位置,应用非常广泛。奇异值分解具有转置不变性、旋转不变性、位移不变性以及镜像变换不变性等重要性质,使得奇异值特征在描述图像时更具稳定性。当图像被施加小的扰动时,图像的奇异值不会有很大的变化,而且奇异值所表现的是图像的内蕴特性而非视觉特性,反映的是图像矩阵元素之间的关系。SVD通常用来提取图像的特征值,实现降维、图像压缩。在数字水印技术中,也可以用来提高水印的鲁棒性。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、结果

dwt-dct-svd,matlab

                                                 未受攻击时的实验结果

dwt-dct-svd,matlab

                                 高斯滤波攻击时的实验结果

dwt-dct-svd,matlab

                                旋转20度攻击时的实验结果 


总结

本文的DWT-DCT-SVD数字水印算法,基于DCT和DWT的各自优势,采用DWT和DCT相结合的方法进行嵌入数字水印,DWT将水印嵌在图像的低频部分,保证水印的鲁棒性。而DCT以把图像重要的可视信息都集中在变换后的小部分系数中可以提升图像水印的不可见性。

该算法效果还可以,但存在一些不足。在实际应用场景中,为保证水印图像的安全性,还需要在嵌入数字水印的过程中加入密钥,防止无关人员恶意提取水印。同时,在选择嵌入块时,可以采用计算小波系数块信息熵与周围系数块信熵值波动最小的方法选择最优嵌入块,以提高数字水印的鲁棒性。 文章来源地址https://www.toymoban.com/news/detail-807671.html

M = 512; % 原图像长度
N = 64; % 水印图像长度
K = 32; % 子块大小

alpha=0.1;% 嵌入强度系数

% 打开原图、水印图
I = imread('lena.jpg');
G = imread('a.jpg');
%W = zeros(M);

% 缩放、灰度化原图、改变精度
I = imresize(I,[M M]);
%I = im2double(I); % double精度转换
I = rgb2gray(I); % 灰度化处理

G = imresize(G,[N N]);
%G = im2double(G); % double精度转换
G = rgb2gray(G); % 灰度化处理

subplot(2,2,1);
imshow(I);
title('原始载体图片');
subplot(2,2,2);
imshow(G);
title('原始水印图像');

%Step 1
[LL,LH,HL,HH] = dwt2(G,'haar'); % 进行2维哈尔离散小波变换
[U,S,V] = svd(HH);% 对HH进行SVD分解,得到U、S、V矩阵

%Step 2
%进行2级离散小波变换
[LL1, LH1, HL1, HH1] = dwt2(I, 'haar');
[LL2, LH2, HL2, HH2] = dwt2(LL1, 'haar');%128*128
H0 = entropy(HH2)% 计算HH3系数的信息熵

%Step 3

%选出最优嵌入块 默认为4*4:(1,1)
optimal_block_index = 0;

%Step 4
%对最优嵌入块进行 DCT 变换,得到DCT系数矩阵 B
m = floor(optimal_block_index/4)+1;
n = mod(optimal_block_index, 4)+1
x = (m - 1) * K + 1;
y = (n - 1) * K + 1;
H_I = HH2(x:x+K-1, y:y+K-1);
B = dct2(H_I);

%Step 5
%对B进行奇异值分解,嵌入水印
[U1,S1,V1] = svd(B);
S2 = S1 + alpha * S;
B1 = U1 * S2 * V1;
H_I = idct2(B1);
HH2(x:x+K-1, y:y+K-1) = H_I;
LL1 = idwt2(LL2,LH2,HL2,HH2,'haar');
W = idwt2(LL1,LH1,HL1,HH1,'haar');
W = uint8(W);

%攻击
%高斯滤波攻击
%H = fspecial('gaussian',3,0.4);
%W = imfilter(W,H);

%G 压缩攻击
%quality = 50;
%W = imresize(W, 0.5); % 缩小图像
%imwrite(W, 'temp.jpg', 'Quality', quality); % 保存为JPEG格式
%W = imread('temp.jpg'); % 重新读取JPEG图像
%W = imresize(W, 2); % 放大图像

% 剪切攻击
%r = 0.3; % 剪切比例为30%
%sz = size(W);
%h1 = round(sz(1)*r); % 剪切高度
%w1 = round(sz(2)*r); % 剪切宽度
%x1 = round(rand(sz(1)-h1)); % 随机选择一行
%y1 = round(rand(sz(2)-w1)); % 随机选择一列
%W(x1+1:x1+h1, y1+1:y1+w1) = 0; % 将指定区域置为0

% 旋转攻击
%angle = 20; % 旋转角度为20度
%W = imrotate(W, angle, 'bilinear', 'crop');

%提取水印
[LL3, LH3, HL3, HH3] = dwt2(W, 'haar');
[LL4, LH4, HL4, HH4] = dwt2(LL3, 'haar');%128*128
H_I2 = HH4(x:x+K-1, y:y+K-1);
B2 = dct2(H_I2);
[Uw,Sw,Vw] = svd(B2);
Sx = (Sw - S1)/alpha;
B2 = U * Sx * V;
H_I2 = idct2(B2);
A = idwt2(LL,LH,HL,H_I2,'haar');
A = uint8(A);
subplot(2,2,3);
imshow(W);
title('嵌入水印后的载体图像');
subplot(2,2,4);
imshow(A);
title('提取出来的水印图像');

% 计算PSNR值
psnr_val = psnr(G, A);

% 显示PSNR值
fprintf('The PSNR value between the original image and reconstructed image is %f.\n', psnr_val);

% 计算直方图
h1 = imhist(G);
h2 = imhist(A);

% 根据直方图计算 NC 值
nc_val = sum(sqrt(h1 .* h2)) / sqrt(sum(h1) * sum(h2));

% 显示 NC 值
fprintf('The NC value between the two images is %f.\n', nc_val);

到了这里,关于基于DWT-DCT-SVD的图像数字水印算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Matlab系列】基于DCT和置乱算法的视频水印Matlab实现

    Date: 2022.4.5     数字水印技术一般用于版权认证。在实际使用中,嵌入水印的鲁棒性就显得非常重要。通常会采用各种方式进行攻击测试,比如加噪滤波,缩放、旋转、剪切、JPEG压缩等。本文讲述了采用置乱技术进行嵌入水印和提取水印,并加入滤波、剪切、椒盐噪声、

    2024年02月01日
    浏览(38)
  • 【毕业设计系列】001:基于DCT和置乱算法的视频水印Matlab实现

    Date: 2022.4.5     数字水印技术一般用于版权认证。在实际使用中,嵌入水印的鲁棒性就显得非常重要。通常会采用各种方式进行攻击测试,比如加噪滤波,缩放、旋转、剪切、JPEG压缩等。本文讲述了采用置乱技术进行嵌入水印和提取水印,并加入滤波、剪切、椒盐噪声、

    2023年04月09日
    浏览(29)
  • 【MATLAB图像处理实用案例详解(8)】—— 图像数字水印算法

    数字水印技术作为信息隐藏技术的一个重要分支,是将信息(水印)隐藏于数字图像、视频、音频及文本文档等数字媒体中,从而实现隐秘传输、存储、标注、身份识别、版权保护和防篡改等目的。 随着 1996 年第一届信息隐藏国际学术研讨会的召开,数字水印技术的研究得到了迅

    2024年02月10日
    浏览(43)
  • 【语音隐写】基于DCT实现音频水印嵌入提取附Matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进, 代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信    

    2024年02月03日
    浏览(33)
  • 基于DCT的图像量化-Python简单实现

            与本科期间导师给的课题相关,暑假期间学了一些关于DCT量化的内容。上网查阅了之后发现已经有博主使用MATLAB实现了这个功能。但是少有人用Python实现,于是我就动手写了一下。         实现起来并不复杂,主要的难点就是如何对图像进行均分快。由于二维

    2024年02月04日
    浏览(24)
  • 图像处理之DCT图像压缩(基于c++ opencv实现)

    是老师布置的作业,拖到ddl才开始,opencv也才刚接触,有自己结合百度的一点理解,如有误,请谅解! 先贴一段在matlab上实现的代码,这个在网上都可以查到,就不赘述了 思路如下:      先划分处理块大小,对每个块分别进行DCT变换,再舍弃每个块中的高频系数,再进行

    2024年02月09日
    浏览(35)
  • 压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

    变换的选择是一个关键的考量因素,它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则: 数据去关联性 :变换的目的之一是减少数据中的相关性。例如,在图像压缩中,像素间往往高度相关。通过适当的变换,如离散余弦变换(DCT),可以将这些相关性转化

    2024年02月02日
    浏览(29)
  • 数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

    1了解图像变换的原理; 2理解图像变换系数的特点; 3掌握图像变换的方法及应用; 4掌握图像的频谱分析方法; 5了解图像变换在图像数据压缩、图像滤波等方面的应用。 安装了MATLAB软件的台式或笔记本电脑 1.离散傅里叶变换 对于二维离散信号,Fourier正变换定义为: 二维离

    2024年02月06日
    浏览(37)
  • 基于DCT+huffman变换的图像压缩解压缩FPGA实现

    目录 一、理论基础 二、verilog程序 三、仿真结果        图像压缩和解压缩是数字图像处理中的重要技术。基于DCT(离散余弦变换)和Huffman变换的图像压缩解压缩方法是一种常见的图像压缩标准,它可以将图像数据压缩成更小的体积,同时保持图像的质量和还原性。 一、

    2023年04月16日
    浏览(35)
  • 【语音识别】基于matlab小波变换DWT 0-9数字语音识别【含Matlab源码 3715期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包