数字水印源码

【Matlab图像隐写】DWT+SVD数字水印【含GUI源码 606期】 一、代码运行视频(哔哩哔哩) 【Matlab图像隐写】DWT+SVD数字水印【含GUI源码 606期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016. [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017. [3]梁欣.基于DWT和SVD的彩色图像数字水印算法研究[J].计算机与数字工程. 2019,47(08) ... 阅读详情

% 由高斯正态分布序列 g1 产生 36×4 的水印信
%号 w0,w0 由(0,1)组成。
clear
randn('state',1106);
g1=randn(36,4);
for i=1:36
     for j=1:4
          if g1(i,j)>=0
                w0(i,j)=1;
         else w0(i,j)=0;
         end;
     end;
end;
figure;
imshow(w0);title('水印');


% 对水印信号 w0 进行(7,4)汉明编码,得到一
%36×7 的分组码 x0。
x0=w0;
for i=1:36
    s=8*x0(i,1)+4*x0(i,2)+2*x0(i,3)+x0(i,4);
     switch s
         case 0
              x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;
         case 1
              x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;
         case 2
              x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;
         case 3
              x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;
         case 4
              x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;
         case 5
              x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;
         case 6
              x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;
         case 7
              x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;
         case 8
              x0(i,5)=1;x0(i,6)=0;x0(i,7)=1;
         case 9
              x0(i,5)=1;x0(i,6)=1;x0(i,7)=0;
         case 10
              x0(i,5)=0;x0(i,6)=1;x0(i,7)=1;
         case 11
              x0(i,5)=0;x0(i,6)=0;x0(i,7)=0;
         case 12
              x0(i,5)=0;x0(i,6)=1;x0(i,7)=0;
         case 13
              x0(i,5)=0;x0(i,6)=0;x0(i,7)=1;
         case 14
              x0(i,5)=1;x0(i,6)=0;x0(i,7)=0;
         case 15
              x0(i,5)=1;x0(i,6)=1;x0(i,7)=1;
     end;
end;
% 对 x0 进行行向位扩展,得到一个由(-1,1)组成
%的扩展序列 y。cr 为扩展因子。
cr=256;
for i=1:252
     if x0(i)==1
         y(i,1:cr)=1;
     else y(i,1:cr)=-1;
     end;
end;
y(253:256,:)=0;
% 以下产生伪随机序列 p。为此先设定密钥(1114)
%并产生高斯正态分布序列g2,再由g2产生由(-1,1)
%组成的伪随机序列 p。
randn('state',1114);
g2=randn(256,256);<

5.17 用MATLAB数字图像水印

一、引言

随着Internet的普及,信息的安全保护问题日益突出。如何有效地防止数据的非法复制和鉴别数字媒体的知识产权,成为亟需解决的问题。1993年Caronni提出了数字水印的概念,并应用于数字图像,此后,研究人员将数字水印的概念扩展到电视图像和声音等领域,数字水印技术作为版权保护的重要手段而得到了广泛的研究和应用。

数字水印技术涉及到大量图像处理算法、数学计算工具等,用普通编程工具实现上述算法将要花费大量的时间。MATLAB语言是MathWorks公司推出的一种简单、高效、功能极强的高级语言,具有高性能数值计算能力和可视化计算环境。许多复杂的计算问题只需短短的几行代码就可在MATLAB中实现。本文基于典型的DCT(离散余弦变换)数字水印算法过程,详细介绍用MATLAB实现数字水印的嵌入、提取和攻击测试的方法。

二、数字水印技术

从信号处理的角度看,在载体图像中嵌入数字水印可以视为在强背景(即原始图像)下叠加一个视觉上看不到的弱信号(水印),由于人的视觉系统(Human Visual System,HVS)分辨率受到一定的限制,只要叠加信号的幅度低于HVS的对比度门限,HVS就无法感觉到信号的存在,因此,通过对载体对象作一定的调整,就有可能在不引起人感知的情况下嵌入一些信息。

1.数字水印的嵌入

水印嵌入就是把水印信号W={ω(κ)} 嵌入到原始图像X0={χ0(κ)}中。水印嵌入过程如图1所示。

​编辑

水印嵌入准则分为:

加法准则:χW(κ) =χ0(κ)+αω(κ)

乘法准则:χW(κ) =χ0(κ)(1+αω(κ))

α为强度因子,为了保证在水印不可见的前提下,尽可能提高嵌入水印的强度。α的选择必须考虑图像的性质和视觉系统的特性。

2.水印的提取与检测

在某些水印系统中,水印可以被精确地提取出来,这一过程被称作水印提取。例如在完整性确认的应用中,必须能够精确地提取出嵌入的水印,并且通过水印的完整性来确认多媒体数据的完整性。如果提取出的水印发生了部分的变化,最好还能够通过变化的水印的位置来确定原始数据被篡改的位置。水印在提取检测时可以需要原始图像的参与,也可以不需要原始图像的参与。但将水印技术用于图像的网络发布和传播时,如果检测时需要使用原始图像则是个缺陷,因此,当前大多数的水印检测算法不需要原始图像的参与。图2、图3分别是水印提取和检测的框图,虚线部分表示在提取或判断水印信号时原始图像不是必需的。

​编辑​编辑

三、DCT 域数字图像水印算法

从技术上讲,目前的数字水印算法可以分成两类:空域水印算法和频域(变换域)水印算法。空域水印算法是指将水印信号直接嵌入在原始数据中。频域水印算法首先将原始的数据进行DCT 或小波变换,在频域上嵌入水印信息,然后经反变换输出。在检测水印时,也要首先对信号作相应的数学变换,然后通过相关运算检测水印。

选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将原始图像进行8 ×8 的分块,将数字水印的灰度值直接植入到原始灰度图像的DCT 变换域中,实现水印的嵌入。具体方法如下:

1.水印嵌入

设X是M*N 大小的原始图像, W是水印图像,大小为P*Q,M 和N 分别是P 和Q 的偶数倍。把水印W 加载到图像X中,算法分以下几步进行:

将X分解为(M/8)*(N/8)个8*8大小的方块BX(m,n),同时,将W也分解为(M/8)*(N/8)个(8·P/M)*(8·Q/N)大小的方块BW(m,n),1≤m≤M/8 ,1≤n≤N/8。

对每一个BX(m,n)进行DCT变换:DBX′(m ,n)= DCT(BX(m ,n))。

对每一个DBX′(m ,n)和BW(m ,n),Si为从DBX′(m ,n)的中频选出的加载的位置,1≤i≤(8·P/M)*(8·Q/N),ti为水印BW(m,n)的位置坐标1≤i≤(8·P/M)*(8·Q/N)。DBX″(m, n)(si)=α*BW(m,n)(ti),其中α是加权系数,用DBX″(m,n)(si)来代替DBX′(m,n)(si)得到加载水印后的图像。

对以上得到的每一个DBCI″(m,n)进行逆DCT 变换:IDBX(m,n) = IDCT(DBX″(m , n))。并将各方块IDBX(m,n)合并为一个整图X′,即加载了水印的新图像。

2.水印提取

设图像X′为已经加载了水印的载体图像。现要将所加载的水印从X′中提取出来。其过程为上述加载水印算法的逆运算:将X′分为(M/8)*(N/8)个8×8大小的方块BX′(m,n),1≤m≤ M/8,1≤n≤N/8。对每一个BX′(m,n)进行二维DCT反变换:BX(m,n)=iDCT(BX′(m,n))。对每一个BX(m,n),按照式BW(m,n)(ti)= 1/α*BX(m,n)(si)得到BW(m, n)。将上面得到的所有BW(m,n)合并成一个整图W 。

四、数字水印的嵌入与提取

MATLAB中对一维和二维信号分别提供了各种变换和逆变换函数。例如dct()、dct2()分别实现一维信号和二维信号的DCT(离散余弦变换),idct()、idct2()分别实现一维信号和二维信号的IDCT(逆向离散余弦变换),它们是实现频域水印算法必不可少的工具。

下面以一个在频域嵌入和提取黑白图像水印程序为例,给出使用MATLAB实现数字水印的过程。嵌入水印的算法描述:读取原始图像和黑白水印图像到二维数组I与J;将原始图像I分割为互不覆盖的图像块blockL(x,y),1≤ x, y ≤8,L =1,2...M *M /64,对blockL(x,y) 进行DCT变换,得到dct _ blockL(u,v);取黑白水印图像中的一个元素J(p,q),嵌入原始图像块的DCT的低频系数中;对嵌入水印信息后的图像块dct_blockL(u',v') 进行反DCT变换;得到blockL( x',y');合并图像块,得到嵌入黑白水印后的图像。

下面是嵌入与提取水印的程序实例,运行结果如图4所示。

%嵌入水印的程序代码

M=256; %原图像长度

N=32; %水印图像长度

K=8;

I=zeros(M,M);J=zeros(N,N);BLOCK = zeros(K,K);

%显示原图像

subplot(3,2,1);I=imread('mona.bmp','bmp');imshow(I);

title('原始公开图像');

%显示水印图像

subplot(3,2,2);J=imread('flag.bmp','bmp');imshow(J);title('水印图像');

%水印嵌入

for p=1:N

 for q=1:N

  x=(p-1)*K+1; y=(q-1)*K+1;

  BLOCK=I(x:x+K-1,y:y+K-1);  BLOCK=dct2(BLOCK);

  if J(p,q)==0

    a=-1;

  else

    a=1;

  end

  BLOCK=BLOCK*(1+a*0.03);  BLOCK=idct2(BLOCK);

  I(x:x+K-1,y:y+K-1)=BLOCK;

 end

end

%显示嵌入水印后的图像

subplot(3,2,3);imshow(I);title('嵌入水印后的图像');

imwrite(I,'watermarked.bmp','bmp');

%从嵌入水印的图像中提取水印

I=imread('mona','bmp');

J=imread('watermarked.bmp','bmp');

for p=1:N

for q=1:N

x=(p-1)*K+1;

y=(q-1)*K+1;

BLOCK1=I(x:x+K-1,y:y+K-1);

BLOCK2=J(x:x+K-1,y:y+K-1);

BLOCK1=idct2(BLOCK1);

BLOCK2=idct2(BLOCK2);

a=BLOCK2(1,1)/BLOCK1(1,1)-1;

if a<0

W(p,q)=0;

else

W(p,q)=1;

end

end

end

%显示提取的水印

subplot(3,2,4);

imshow(W);

title('从含水印图像中提取的水印');

​编辑

图4 基于DCT变换的水印嵌入与提取

五、水印攻击测试

由于数字水印在实际应用中可能会遭到各种各样的攻击,因此对算法进行攻击测试是衡量一个水印算法优劣的重要手段。下面是一个水印攻击与水印提取的程序实例,首先对嵌入水印后的图像进行JPEG压缩(一种水印攻击),而后从压缩的图像中提取出水印,如图5所示。从图5中可以看到DCT域的水印算法抵抗JPEG压缩攻击的效果是比较好的。

​编辑

图5 图像压缩后提取的水印

%水印攻击测试

M=256; N=32; K=8;

I=zeros(M,M); J=zeros(M,M); w=zeros(N,N);

BLOCK1=zeros(K,K); BLOCK2=zeros(K,K);

%对嵌入水印后的图像进行JPEG压缩

L=imread('watermarked.bmp','bmp');

imwrite(L,'attack.jpg','jpeg','Quality',45);

J=imread('attack.jpg','jpeg');

subplot(3,2,5);imshow(J);title('压缩后的图像');

I=imread('mona','bmp');

%从压缩的图像中提取水印

for p=1:N

for q=1:N

x=(p-1)*K+1; y=(q-1)*K+1;

BLOCK1=I(x:x+K-1,y:y+K-1);

BLOCK2=J(x:x+K-1,y:y+K-1);

BLOCK1=idct2(BLOCK1);

BLOCK2=idct2(BLOCK2);

a=BLOCK2(1,1)/BLOCK1(1,1)-1;

if a<0

W(p,q)=0;

else

W(p,q)=1;

end

end

end

%显示提取的水印

subplot(3,2,6); imshow(W); title('从经过压缩的图像中提取的水印');

六、结语

从图4中可明显看出:嵌入水印信息后,原图与嵌入水印信息后的图像在视觉效果上没有明显分别,用肉眼几乎分辨不出,这说明这种算法充分利用了人眼的视觉HVS 特性,利用DCT域嵌入水印后,水印的不可见性相当好,图像在嵌入水印前后视觉效果改变不大,不影响图像的正常使用。从图5可明显看出:嵌入水印后的图像经过参数“Quality”为“45”的JPEG压缩后,还能从中提取出较清晰的水印信息,可见,这种嵌入算法的抗攻击性较好,而且检测和提取易于实现。

【数字水印】DFT数字水印嵌入提取攻击(含PSNR)【含Matlab源码 2320期】 DFT数字水印嵌入提取攻击(含PSNR) 完整的代码,方可运行;可提供运行操作视频!适合小白! 阅读详情

相关推荐

基于FFT的数字水印嵌入实现(附带Matlab源码)

在本篇文章中,我们将详细介绍基于FFT的数字水印嵌入算法,并提供相应的Matlab源码。现在,我们将水印图像嵌入到原始图像的频谱中。具体来说,我们可以将水印图像的频谱加到原始图像的频谱中。接下来,我们对原始图像和水印图像进行傅里叶变换。傅里叶变换可以将图像从空域转换到频域,以便我们能够在频域进行水印嵌入。通过将水印图像的频谱加到原始图像的频谱中,我们成功地将水印嵌入到了原始图像中。完成水印嵌入后,我们需要将水印嵌入后的频谱进行逆傅里叶变换,以恢复水印图像。首先,我们需要读取原始图像和水印图像。

2301_79326891的博客 177

【图像隐藏】DCT算法彩色数字水印嵌入提取Matlab源码

【图像隐藏】DCT算法彩色数字水印嵌入提取Matlab源码 【下载地址】图像隐藏DCT算法彩色数字水印嵌入提取Matlab源码 这是一个基于DCT(离散余弦变换)算法的彩色数字水印嵌入与提取的Matlab开源项目。通过该项目,用户可以轻松学习并实践如何在彩色图像中嵌入数字水印,并在不影响图像质量的前提下准确提取水印。项目...

gitblog_06784的博客 318

【图像隐写】LSB数字水印嵌入提取【含Matlab源码 2412期】

LSB数字水印嵌入提取 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 307

在Java源码中添加隐形签名和数字水印的实现方法

在软件开发和分发的过程中,代码的版权保护和溯源成为一个重要的需求。无论是为了防止代码被盗用,还是为了跟踪代码的修改历史,确保代码的合法来源都是至关重要的。这就引出了如何在源码文件中添加签名和水印,以实现代码的溯源和验证。传统的数字签名方法可以生成文件的唯一签名,但这些方法往往在文件的外部生成和验证,容易被忽略或篡改。而在源码文件中嵌入不可删除的隐形签名或数字水印,则可以在不影响代码运行的情况下,确保签名的难以被发现或删除。本文将探讨如何在Java源码文件中添加隐形签名和数字水印,以实现对源码的有效保护。

weixin_41894177的博客 1029

音频数字水印嵌入与提取的Matlab源码及详细解析

音频数字水印是一种保护音频内容的技术,它通过在音频信号中嵌入特定的数字水印信息,以实现版权保护、身份认证等功能。在本篇文章中,我们将介绍使用离散余弦变换(DCT)和奇异值分解(SVD)的方法来实现音频数字水印的嵌入和提取,并提供相应的Matlab源码。音频数字水印嵌入的目标是将水印信息嵌入到音频信号中,使得水印在不影响音频质量的前提下难以被察觉。音频数字水印提取的目标是从嵌入了水印的音频信号中提取出水印信息。在音频数字水印中,我们使用DCT来将音频信号转换为频域表示,以便在频域中嵌入水印信息。

2301_79330511的博客 209

【图像隐写】DCT数字水印嵌入+提取含GUI matlab源码

1 简介 0 引言 近年来, 数字水印技术的作用越来越重要。数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值。通过隐藏在载体中的这些信息, 可以判断信息是否被篡改, 具有防伪溯源、保护信息安全、版权保护等作用。对于广播转播台站而言, 是广播音频的中转站, 在广播信号发送至千家万户之前务必保证信号的安全可靠, 但现在的大部分台站只是利用人耳的判断, 以及不同信源之间的比较, 具有较大的局限性。若利用数字水印的特性, 应用于广播节目中可以有效地防止信号插

qq_59747472的博客 1427

图像隐藏DCT算法彩色数字水印嵌入提取Matlab源码

图像隐藏DCT算法彩色数字水印嵌入提取Matlab源码 【下载地址】图像隐藏DCT算法彩色数字水印嵌入提取Matlab源码 这是一个基于DCT(离散余弦变换)算法的彩色数字水印嵌入与提取的Matlab开源项目。通过该项目,用户可以轻松学习并实践如何在彩色图像中嵌入数字水印,并在不影响图像质量的前提下准确提取水印。项目提供...

gitblog_06747的博客 311

【图像隐写】DWT数字水印多种攻击效果对比【含Matlab源码 1134期】

DWT数字水印多种攻击效果对比 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 195

【图像隐藏】DWT算法实现数字水印技术Matlab源码及攻击效果对比

【图像隐藏】DWT算法实现数字水印技术Matlab源码及攻击效果对比 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了基于离散小波变换(DWT)算法的数字水印嵌入与提取的Matlab源码,同时包含了对多种攻击效果下的水印对比分析。资源适用于对数字图像处理、信号处理、信息安全等领域感兴趣的用户,以及进行相关研究和学习的学者和工程师。 功能特点 基于DWT算法的水...

gitblog_06743的博客 797

【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

一、代码运行视频(哔哩哔哩) 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016. [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017. [3]刘海燕,乐新,熊曾刚,张武义.基于音频内容的DWT域脆弱音频水印算法[J].内蒙古师范大学学报(自然科学汉文版). 2016,45(05

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 377

数字水印嵌入、提取、检测及攻击的实现——基于LSB和DCT算法(附Matlab源码)

本文介绍了数字水印嵌入、提取、检测及攻击的实现,以及LSB和DCT两种算法的具体应用。数字水印技术在保护数字版权和信息安全等领域有着广泛的应用,希望本文能为读者提供一定的参考和帮助。本文介绍了数字水印嵌入、提取、检测及攻击的实现,采用了LSB和DCT两种算法,并提供了相应的Matlab源码。b. 通过比较两幅图像的像素值,计算PSNR(峰值信噪比)和MSE(均方误差)等指标。c. 将水印信息嵌入到原始图像的最低有效位中。a. 读取含水印的图像和嵌入水印前的图像。a. 读取含水印的图像和嵌入水印前的图像。

2301_79326588的博客 903

【源码+文档】基于C++的二值图像数字水印技术的实现

对数字水印技术建立一定的认识,能建立位矩阵、位向量等 ADT,并能用这些 ADT 完成给定二值图像数字水印的嵌入和抽取。(2)给定测试图片,按照指定的 bmp 格式,保存于外存中。题目要求对给定的一种简单的二值图像的数字水印算法编程实现。(1)图像的读取与保存,及相应的矩阵和向量的运算;(3)软件的界面和接口设计,信号发送和槽位的设计;(4)软件鲁棒性分析、算法鲁棒性分析和相关总结。(1)设计合理的数据结构,编程实现算法;(2)二值图像水印算法的实现;

yuxibdd的博客 186

【语音隐写】小波变换量化音频数字水印【含Matlab源码 351期】

小波变换量化音频数字水印 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 222

图像隐藏DWT算法实现数字水印技术Matlab源码及攻击效果对比

图像隐藏DWT算法实现数字水印技术Matlab源码及攻击效果对比 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在信息安全领域,数字水印技术是一种重要的信息隐藏手段。本文推荐的“图像隐藏DWT算法实现数字水印技术Matlab源码及攻击效果对比”项目,正是利用离散小波变换(DWT)算法,在数字图像中嵌入和提取水印的完整解决方案。该项目提供了丰富的功能特性,包括水印的嵌入...

gitblog_06778的博客 298

【图像隐写】LSB算法数字水印嵌入攻击提取【含Matlab源码 3163期】

LSB算法数字水印嵌入攻击提取 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 105

【Matlab图像隐写】DCT数字水印添加+提取+干扰【含源码 803期】

一、代码运行视频(哔哩哔哩) 【图像隐写】基于matlab DCT数字水印添加+提取+干扰【含Matlab源码 803期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016. [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017. [3]万谊丹.基于Arnold和DCT的抗剪切攻击图像水印研究[J].网络安全技术与应用. 2021,(08) ..

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1113

基于Matlab实现多个数字水印案例(附上源码+数据集)

基于Matlab实现多个数字水印案例(附上源码+数据集)

m0_62143653的博客 926

数字水印算法VC++源码剖析与应用

Cox算法将水印信息嵌入到载体图像的最不显著部分。它主要基于人类视觉系统的特性,即人们对于图像中亮度较低或变化较小的区域的感知不如亮度高或变化大的区域敏感。在数学上,Cox算法利用傅里叶变换的幅度谱特性,通过调整幅度谱中某些系数来嵌入水印,同时保证视觉上不易察觉。

weixin_32242475的博客 1070
上一篇: (完整word版)数字水印源码
下一篇: DCT域图像水印技术
GPT_code
博客等级 码龄3年 3543粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值