数字水印图像攻击测试实验MATLAB实现

        上次介绍了三种基本的图像数字水印算法以及代码后,其中大部分实验者都需要进行水印的抗攻击实验来测量算法的性能。上次文中也提到后期会介绍图像攻击算法,今天就介绍几个简单的图像攻击。

一、 展示攻击代码       

为了服务上次文章提到的数字水印攻击实验,先将代码展示如下吧,具体的使用接下来说明。

%% 进行攻击测试 %%
disp('1-->加入白噪声');
disp('2-->高斯低通滤波');
disp('3-->剪切图像');
disp('4-->旋转攻击');
disp('5-->直接检测')
begin=input('请选择攻击(1-5):')
switch begin
        % 加入白噪声 
    case 1
        Aimage1=wimage;
        Wnoise=20*randn(size(Aimage1));
        Aimage1=Aimage1+Wnoise;
        subplot(2,3,4),imshow(Aimage1,[]),title('加入白噪声后的图象');
        att=Aimage1;
        %imwrite(att,'whitenoiseimage.bmp');
        % 高斯低通滤波 
    case 2
        Aimage2=wimage;
        H=fspecial('gaussian',[4,4],0.5);
        Aimage2=imfilter(Aimage2,H);
        subplot(2,3,4),imshow(Aimage2,[]),title('高斯低通滤波后的图象');
        att=Aimage2;
        %imwrite(att,'gaussianimage.bmp')
        % 剪切攻击 
    case 3
        Aimage3=wimage;
        Aimage3(1:128,1:128)=256;
        subplot(2,3,4),imshow(Aimage3,[]),title('剪切后的图象');
        att=Aimage3;
        %imwrite(att,'cutpartimage.bmp');
        % 旋转攻击 
    case 4
        Aimage4=wimage;
        Aimage4=imrotate(Aimage4,0.55,'bilinear','crop');
        Aimage_4=mat2gray(Aimage4);
        subplot(2,3,4),imshow(Aimage_4,[]),title('旋转10 度后的图象');
        att=Aimage_4;
        imwrite(att,'rotatedimage.bmp');
        % 没有受到攻击 
    case 5
        subplot(2,3,4),imshow(wimage,[]),title('直接提取的图像');
        att=wimage;
        %imwrite(att,'directimage.bmp');
end

           代码说明: 从上面代码可以看出,我未将代码封装为函数,目的也是为了让使用者使用方便。那么,在数字水印实验中怎能试用呢? 很简单,将这段代码复制粘贴插入到完成水印嵌入的步骤后面(使用时注意变量名的衔接和更改),通过这段代码进行水印的攻击之后再进行提取,完成水印攻击测试。 如果您习惯将水印的嵌入、攻击、提取分别封装函数,您当然也可将此段代码封装为独立的函数。

二、 代码效果测试

      为了直观的说明代码的运行效果,我将上述代码稍加更改新建了一个脚本进行运行测试,代码如下:

clc
clear all;

I = imread('lena256.bmp');

Aimage1=I;
Wnoise=uint8(20*randn(size(Aimage1)));
%Wnoise=20*randn(size(Aimage1),'like',wimage);
Aimage1=Aimage1+Wnoise;
subplot(2,3,1),imshow(Aimage1,[]),title('加入白噪声后的图象');

% 高斯低通滤波 
Aimage2=I;
H=fspecial('gaussian',[4,4],0.5);
Aimage2=imfilter(Aimage2,H);
subplot(2,3,2),imshow(Aimage2,[]),title('高斯低通滤波后的图象');
    
% 剪切攻击 
Aimage3=I;
image_size=size(I);
dimension = numel(image_size); 
if dimension == 3
    Aimage3_r = Aimage3(:,:,1);
    Aimage3_r(1:128,1:128)=256;
    Aimage3_g = Aimage3(:,:,2);
    Aimage3_g(1:128,1:128)=256;
    Aimage3_b = Aimage3(:,:,3);
    Aimage3_b(1:128,1:128)=256;
    
    Aimage3(:,:,1) = Aimage3_r;
    Aimage3(:,:,2) = Aimage3_g;
    Aimage3(:,:,3) = Aimage3_b;
end
% 如果是灰度图像
if dimension == 2
    Aimage3(1:128,1:128)=256;
end
subplot(2,3,3),imshow(Aimage3,[]),title('剪切后的图象');

% 旋转攻击 
Aimage4=I;
Aimage4=imrotate(Aimage4,10,'bilinear','crop');
Aimage_4=mat2gray(Aimage4);
subplot(2,3,4),imshow(Aimage_4,[]),title('旋转10 度后的图象');

 % 没有受到攻击 
subplot(2,3,5),imshow(I,[]),title('无攻击图像');

其运行结果如下图:

图1 图像攻击结果

 

       这只是几种简单攻击测试,还有很多攻击可以提供我们选择,在噪声中也可以加入椒盐噪声等等,可根据自己需求进行图像的攻击测试。

 

  • 22
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
数字图像水印攻击提取往往需要使用一些图像处理的算法和技术。其中,小波变换是一种非常常用的数字图像处理技术,可以用于数字图像的压缩、滤波、去噪等操作。 在MATLAB中,可以使用以下命令进行小波变换和反变换: ```matlab [c,s] = wavedec2(X,n,wname); X_rec = waverec2(c,s,wname); ``` 其中,`X`是原始图像,`n`是小波变换的阶数,`wname`是小波类型,`c`是小波系数,`s`是小波分解结构。反变换后的图像`X_rec`即为小波变换后的图像。 对于数字图像水印攻击提取,可以使用以下步骤: 1. 对原始图像进行小波变换,得到小波系数和分解结构。 2. 将水印图像进行嵌入,得到嵌入后的水印图像。 3. 将嵌入后的水印图像进行小波变换,得到小波系数和分解结构。 4. 对小波系数进行差值,得到差值系数。 5. 对差值系数进行统计分析,得到水印信息。 具体实现可以参考以下代码: ```matlab % 读取原始图像和水印图像 X = imread('lena.bmp'); W = imread('watermark.bmp'); % 小波变换和嵌入水印 [c,s] = wavedec2(X,2,'haar'); [cw,sw] = wavedec2(W,2,'haar'); alpha = 0.1; cwh = c(1:length(cw)) + alpha*cw; c_rec = zeros(size(c)); c_rec(1:length(cw)) = cwh; % 反小波变换和提取水印 X_rec = waverec2(c_rec,s,'haar'); [c_recw,sw] = wavedec2(X_rec,2,'haar'); c_diff = c_rec(length(cw)+1:end) - c(length(cw)+1:end); diff_mean = mean(c_diff); diff_std = std(c_diff); threshold = diff_mean + 3*diff_std; idx = find(abs(c_diff) > threshold); W_rec = zeros(size(W)); W_rec(idx-length(cw)) = 255; ``` 其中,`alpha`是嵌入系数,`idx`是提取的水印信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值