Bootstrap

水印 截屏攻击 matlab,数字水印常见攻击类型汇总,噪声,缩放,旋转,剪切(附matlab代码)...

数字水印技术作为信息隐藏技术的一种,不可见性和鲁棒性是它的两个主要特点,通常在水印嵌入时需要确定水印的嵌入量,来平衡不可见性和鲁棒性之间的关系,若嵌入量过小,不可见性好而鲁棒性差,若嵌入量过大,则不可见性差而鲁棒性强,嵌入量最佳的取值可以通过遗传算法来确定,现在常用的有蚁群算法,果蝇算法,粒子群算法等等。对于不可见性,我们可以直观地用视觉来判断,而对于鲁棒性,我们无法直接的判断一个水印算法的鲁棒性强弱,需要进行一系列的攻击测试,来判断其鲁棒性。下面,我将介绍数字水印常见的几种攻击类型,分别从理论,代码和实例来展开。

1. 常见的攻击类型

按照攻击原理可以将攻击类型分为四大类:简单攻击,同步攻击,削去攻击,混淆攻击。

(1) 简单攻击

简单攻击是试图对整个水印化数据(嵌入水印后的载体数据)进行操作来削弱嵌入的水印的幅度(而不是试图识别水印或分离水印),导致数字水印提取发生错误,甚至根本提不出水印信号。

常见的有:压缩(JPEG,MPEG)、噪声

(2)同步攻击

同步攻击是试图破坏载体数据和水印的同步性,被攻击的数字作品中水印仍然存在,而且幅度没有变化,但是水印信号已经错位,不能维持正常水印提取过程所需要的同步性。同步攻击通常采用几何变换方法。同步攻击比简单攻击更加难以防御。因为同步攻击破坏水印化数据中的同步性,使得水印嵌入和水印提取这两个过程不对称。

常见的有:缩放,剪切,旋转

(3)削去攻击

削去攻击试图通过分析水印化数据,估计图像中的水印,将水印化数据分离成为载体数据和水印信号,然后抛弃水印,得到没有水印的载体数据,达到非法盗用的目的。

常见的有:合谋攻击

(4)混淆攻击

混淆攻击是试图生成一个伪源数据、伪水印化数据来混淆含有真正水印的数字作品的版权

常见的有:IBM攻击

(这里主要介绍前两种,简单攻击和同步攻击。)

2. 理论知识及代码

2.1 压缩

图像的JPEG压缩内容比较多,后面有机会了单独开一个帖子写吧。在处理数字水印的压缩攻击时,我用的最多的是Stirmark工具,一个专门做水印攻击的工具,操作方便简单,可以直接得到压缩后的图,具体的操作步骤可以参考我之前的帖子,链接在这里:数字水印攻击测试工具——Stirmark的使用介绍

2.2 噪声

常见的几种噪声:

(1)高斯噪声

(2)椒盐噪声

(3)泊松噪声

(4)乘性噪声

在matlab中,可以通过imnoise()函数给图像添加这四种噪声,imnoise()函数的调用格式为:

J=imnoise(I,type,parameters)

I:要添加噪声的图像

type:添加的噪声类型,‘gaussian’为高斯噪声,‘localvar’为0均值白噪声,‘poisson’为泊松噪声,‘salt & pepper’为椒盐噪声,‘speckle’为乘性噪声

parameters:噪声的参数,不设置采用默认值。不同的噪声类型,需要设定的参数也不同,下面会针对每一种噪声具体介绍

①高斯噪声

J=imnoise(I,‘gaussian’,m,v)

m:高斯噪声的均值,默认为0

v:高斯噪声的方差,默认为0.01

附上高斯噪声代码:

clear all; close all;

I=imread('coins.png');

J=imnoise(I, 'gaussian', 0, 0.01);%方差为0.01的高斯噪声

K=imnoise(I, 'gaussian', 0, 0.03);%方差为0.03的高斯噪声

figure;

subplot(121); imshow(J);title('方差为0.01的高斯噪声')

subplot(122); imshow(K);title('方差为0.03的高斯噪声')1

2

3

4

5

6

7

58708578e3ac9194cc875f818fa50e93.png

②椒盐噪声

J=imnoise(I,‘salt & pepper’,d)

d:噪声的密度,默认为0.05

附上椒盐噪声的代码:

clear all; close all;

I=imread('cameraman.tif');

I=im2double(I);

J=imnoise(I, 'salt & pepper', 0.01);%添加密度为0.01的椒盐噪声

K=imnoise(I, 'salt & pepper', 0.03);%添加密度为0.03的椒盐噪声

figure;

subplot(121); imshow(J);title('%添加密度为0.01的椒盐噪声');

subplot(122); imshow(K);title('%添加密度为0.03的椒盐噪声');1

2

3

4

5

6

7

8

6cd0606835462cfda1d0a0693d94ec2f.png

③泊松噪声

J=imnoise(I,‘poisson’)

d:噪声的密度,默认为0.05

附上泊松噪声代码:

clear all; close all;

I=imread('cameraman.tif');

J=imnoise(I, 'poisson');%添加泊松噪声

figure;

subplot(121); imshow(I);title('原图');

subplot(122); imshow(J);title('添加泊松噪声后的图像');1

2

3

4

5

6

9931cc7ba3eca18c516249f3ba17652c.png

④乘性噪声

J=imnoise(I,‘speckle’,v)

v:方差,默认为0.04

附上乘性噪声代码:

clear all; close all;

I=imread('cameraman.tif');

J=imnoise(I, 'speckle');%添加方差为0.04的乘性噪声

K=imnoise(I, 'speckle', 0.5);%添加方差为0.5的乘性噪声

figure;

subplot(121); imshow(J);title('添加方差为0.04的乘性噪声');

subplot(122); imshow(K);title('添加方差为0.5的乘性噪声');1

2

3

4

5

6

7

02cd967677cee327ec7b6262099647db.png

2.3 缩放

针对数字水印的缩放攻击问题讨论,这里的缩放是对原图进行先缩后放或先放后缩,考虑到提取水印过程,在缩放后还要保证图像的大小尺寸不变

这里用imresize()函数,调用格式可以用最基础的:

B=imresize(A,m)

m大于1,图像放大;m小于1,图像缩小

clear all; close all;

I=imread('lena.png');

J=imresize(I,2);

K=imresize(J,0.5);

figure;

subplot(131); imshow(I);title('原图');

subplot(132); imshow(J);title('原图放大');

subplot(133); imshow(K);title('放大后缩小');1

2

3

4

5

6

7

8

851215f7f9ff7387c423f7adf6ed63b2.png

2.4 剪切

这里要注意的是,matlab中有自带的剪切函数,imcrop()函数是我们对一幅图中的某个区域感兴趣需要将这部分剪切下来时使用的,保留的是剪切下来的那部分。而对于数字水印的剪切攻击而言,我们并不是直接调用imcrop()函数,因为我们要保留的是原图“剪切”后剩下的那部分,用图表示就是下面的阴影部分。这里的剪切我用了引号,是因为这里并不是真正的剪切,只是将选中的部分调为白色,也就是像素调为255,(0表示黑色,255表示白色),若原图为灰度图像,直接调为255即可,若原图为RGB彩色图像,需要三色通道都调为255。

8190f077b0fde2b8cd08f5b3551b3760.png

下面附上RGB图“剪切”的代码,对于灰度图只用剪切一次即可:

clear all; close all;

I=imread('lena.png');

%原图进行分色并剪切

I_r= I(:,:,1);

I_r(1:128,1:128)=255;

I_g =I(:,:,2);

I_g(1:128,1:128)=255;

I_b =I(:,:,3);

I_b(1:128,1:128)=255;

figure(1)

subplot(221),imshow(I_r,[]),title('R通道剪切后图像');

subplot(222),imshow(I_g,[]),title('G通道剪切后图像');

subplot(223),imshow(I_b,[]),title('B通道剪切后图像');

%三色通道合并

I(:,:,1) = I_r;

I(:,:,2) = I_g;

I(:,:,3) = I_b;

subplot(224),imshow(I,[]),title('RGB图像剪切后');1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

421cd8fce7f2bef0810a35cddb3ff697.png

2845a56b05746ea233cc8166754277d7.png

2.5 旋转

针对图像旋转,我之前有过一个帖子专门讲图像的旋转,需要的朋友可以去翻翻看看,链接在这里:

图像的旋转,imrotate函数的应用

在旋转时,尽量保持尺寸不变,因为在数字水印提取过程,需要保持原图像的尺寸大小,和缩放攻击保持图像大小的原因一样

也就是说,尽量使用B=imrotate(A,angle,method,‘crop’)

这里举个例子:

原图大小为512×512,经过逆时针30度旋转,还要保持512×512的大小

clear all; close all;

I=imread('lena.png');

J=imrotate(I,30,'nearest','crop');

figure;

subplot(121); imshow(I);title('原图');

subplot(122); imshow(J);title('逆时针旋转30度');1

2

3

4

5

6

e8c2e375818d64393ea06c885f525a31.png

以上就是数字水印常见的一些简单攻击和几何攻击,具体在数字水印当中的应用,就是用这些攻击方法对嵌入水印后的图像进行攻击,保存受攻击后的图,再进行水印的提取,若能提取出水印,则说明水印算法能够抵抗这种攻击,若提取不出来,说明鲁棒性有待提高。具体的应用下次再开帖子介绍吧~

本人还在学习阶段,若有错误和问题,欢迎给我留言呀~

文章来源: blog.csdn.net,作者:LLLLnannan,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LLLLnannan/article/details/110237118

;