基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真

目录

一、理论基础

二、核心程序

三、仿真测试结果


作者ID  :fpga和matlab
CSDN主页:https://blog.csdn.net/ccsss22?type=blog
擅长技术:
1.无线基带,无线图传,编解码 
2.机器视觉,图像处理,三维重建 
3.人工智能,深度学习 
4.智能控制,智能优化
5.其他

一、理论基础

        数字水印技术,,是信息隐藏技术中一个重要的应用。与其他信息隐藏技术相比,数字水印技术的功能更有针对性,它主要的作用就是为了对数字产品进行版权保护。数字水印的基本原理和思想与钞票水印相类似,就是将特制的不可见的数字标识隐藏在数字产品中,用以证明原创作者对作品的所有权,并作为起诉非法侵权者的证据,从而保护作者的合法权益。
       数字水印技术作为一种崭新的信息安全技术,为数字产品的版权侵犯、非法复制和分发、泄密和完整性等诸多问题提供了一种可行的解决途径。它可以标识作者、所有者、发行者或使用者的身份,并携带有版权保护信息和认证信息,目的是鉴别非法复制或盗用的数字产品,保证数字产品的合法拷贝和传播。尽管数字产品的版权保护是提出并发展数字水印技术的原动力。但是,除此之外人们还发现数字水印还具有其它的一些应用功能,如广播监视、拷贝控制、秘密通信、安全控制等。数字水印技术与古老的信息隐藏和数据加密技术关系非常密切,这些技术的发展以及相互之间的融合可以为今后信息安全技术的发展提供更多并更为有效的安全手段。

       对数字水印的研究必须将它的攻击与反攻击策略结合起来。数字水印的各种攻击类型大致可分为以下四大类:
       简单攻击这是一种从概念上讲比较简单的攻击形式的总称。它们一般通过对整个含数字水印的载体数据进行处理来破坏被嵌入的数字水印。这种攻击并不试图从载体数据中鉴别出数字水印并单独地加以区别对待。这种类型的攻击一般包括线性或非线性过滤、或压缩处理、添噪、剪切、量化处理和伽马矫正等。
       同步攻击它试图破坏原始载体数据和含数字水印的载体数据之间的相关性,从而使得数字水印检测器无法对数字水印进行检测或使数字水印的抽取难以实现。这一类攻击方法大多是几何变形。例如,缩放、旋转、裁剪、像素置换、再抽样、像素或像素群的去除或插入等。
       模糊攻击它主要是通过产生伪原始载体数据或伪含数字水印载体数据的方法进行混淆攻击。一个典型的例子是重置攻击,它通过嵌入一个或多个额外的数字水印使得难以辨认出哪个是真正的授权数字水印,这一攻击方法就是试图对数字水印的存在唯一性进行置疑的策略来达到使数字水印作用失效的目的。去除攻击它试图对含数字水印的载体数据进行分析,对数字水印或载体数据进行估算,然后将数字水印和载体数据分离开来,最后去除数字水印的攻击方法。它的典型例子有共谋攻击、降噪、确定非线性过滤和使用图像的合成建模进行压缩等。
       本算法的实现效果如下所示:

第1重:

基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第1张图片

就是一种自适应盲水印嵌入方法。具体不做介绍了。

第2重:

基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第2张图片

是一种虚拟水印方法。

二、核心程序

首先,PSNR和NC值要大,那么插入的水印的能量就必须要小,这里我们以插入较小的水印能量,然后获得较为清晰的水印解析效果。

改进1:

对于输入的图像,在分块的时候,将每一个块中的像素小于一定阈值的像素全部设置为阈值。如此操作的目的,就是消除一些小的像素值得干扰。同时也不影响肉眼的观察。

改进2:

序列的随机扰乱:

将已经产生的随机序列,进行二次打乱,从而防止序列的自相关性干扰。

改进3:

基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第3张图片

这个就是在原来的算法基础之上,加入一个系数,这个系数设置为3

由于直接放大水印的能量,会影响最后的PSNR和NC值,这里将没有插入水印部分区域,同时也放大,通过这处理,不久可以提高PSNR和NC,也可以提升水印还原效果。

在第2重水印中,做如下的修正:

改进1和上面的相同,

然后做一部其他的改进。

然后改进点2做如下的改进:

直接通过对DCT变换系数的符号位做相关计算,而不是直接和dct做相关。

 

clc;
clear;
close all;
warning off;
addpath 'func\'

 

I0 = imread('pic_灰色\0.bmp');
I1 = imread('pic_灰色\1.bmp');
I2 = imread('pic_灰色\2.bmp');

[I0,Marks1,Marks2] = func_read_images(I0,I1,I2);

 


%%
%基于论文的双重水印算法嵌入
%第1重
%设置嵌入强度
Power     = 25;  
%设置块的大小
Blksize   = 8;   
%改变水印大小,如果太大,则没法全部插入
RR        = 45;
CC        = 45;
%%---------------------------------------------------------------------------------------
%第1重 
Mwk_1st   = func_wk_insert_first(I0,Marks1,Power,Blksize,RR,CC);
%第2重
Mwk_2st   = func_wk_insert_second(Mwk_1st,Marks2,Power,Blksize,RR,CC);

%%---------------------------------------------------------------------------------------
%增加攻击
noise0    = 1.5*randn(size(Mwk_2st));
Mwk_2st2  = double(Mwk_2st) + noise0;
Mwk_2st2  = imrotate(Mwk_2st2,0.15,'bilinear','crop');

%%--------------------------------------------------------------------------------------- 
%第1重
Msg1      = func_wk_desert_first(Mwk_2st2,Blksize,RR,CC,6);
%第2重
Msg2      = func_wk_desert_second(Mwk_2st2,Blksize,RR,CC,4);

figure(1)
subplot(321);
imshow(I0,[]);
title('original Image');
subplot(322);
imshow(Mwk_2st2,[]);
title('Watermarked Image & 加入旋转攻击和噪声攻击');
subplot(323);
imshow(Marks1,[]);
title('watermark 1(第一重)');
subplot(324)
imshow(Msg1,[])
title('Recovered Message 1(第一重)')
subplot(325);
imshow(Marks2,[]);
title('watermark 2(第二重)');
subplot(326)
imshow(Msg2,[])
title('Recovered Message 2(第二重)')

%%
%水印提取,计算NC和PSNR
NC   = func_nc(uint8(I0),uint8(Mwk_2st)) 
PSNR = func_psnr(uint8(I0),uint8(Mwk_2st))

save R1.mat Marks1 Marks2 Msg1 Msg2

三、仿真测试结果

基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第4张图片

基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第5张图片

本文的仿真结果,这里同时增加了噪声攻击和选择攻击。

增加干扰强度,分别进行对比:对比结果如下所示:

基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第6张图片   基于DCT变换和PN序列的数字水印嵌入和提取matlab仿真_第7张图片

A11-02

你可能感兴趣的:(MATLAB,板块2:图像-特征提取处理,matlab,数字水印,DCT变换,水印编码)