• 图像鲁棒性--常见14种图像攻击matlab实现


    一、14种图像攻击

    ( a )JPEG压缩。质量因子Q分别为10%、30%、50%、70%、90%。

    ( b )高斯噪声。平均μ为0,方差σ分别为0.001、0.005和0.1。

    ( c )椒盐噪音。平均μ为0,方差σ分别为0.001、0.005、0.1。

    ( d )散斑噪声。平均μ为0,方差σ分别为0.01、0.05、0.1。

    ( e )平均滤波。窗口大小分别为3 × 3、5 × 5和7 × 7。

    ( f )中值滤波。窗口大小分别为3 × 3、5 × 5和7 × 7。

    ( g )高斯低通滤波。窗口大小分别为3 × 3、5 × 5和7 × 7。

    ( h )中心修剪,比例为20%和50%。

    ( i )边缘修剪,比例为10%和20%。

    ( j )旋转。旋转角度分别为10°、30°、50°。

    ( k )平移。由于数据库的图像大小不同,在Holidays数据库中的平移距离分别为是(80,50)、(160,100)和(320,200)。ImageNet数据库中的平移距离为分别为(16,10),(32,20)、(40,25)。

    ( l )缩放。缩放比例分别为0.3、0.5、0.75、1.5和3。

    ( m )颜色直方图均衡化。

    ( n )伽马校正系数为0.8。

    二、matlab实现

    1、JPEG压缩攻击

    % jpegattack.m
    
    function jpegattack_img=jpegattack(img,qualityfactor)
    imwrite(img,'jpegattackimage.jpg','jpg','quality',qualityfactor);
    jpegattack_img = imread('jpegattackimage.jpg');
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、高斯噪声攻击

    % gaussianattack.m
    
    function gaussianattack_img=gaussianattack(img,var1)
    gaussianattack_img=imnoise(img,'gaussian',0,var1);
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、椒盐噪声攻击

    % saltpepperattack.m
    
    function saltpepperattack_img=saltpepperattack(img,var2)
    saltpepperattack_img=imnoise(img,'salt & pepper',var2);
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、散斑噪声攻击

    % speckleattack.m
    
    function speckleattack_img=speckleattack(img,var3)
    speckleattack_img=imnoise(img,'speckle',var3);
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、高斯低通滤波攻击

    % gaussianlowpassattack.m
    
    function gaussianlowpassattack_img=gaussianlowpassattack(img,k)
    h = fspecial('gaussian',[k,k]);
    % B=imfilter(A,h,options,...)其中options可以是:
    % 'symmetric'边界之外的输入数组值是通过沿数组边界对数组进行镜面反射得到
    % 'replicate'边界之外的输入数组值假定为等于最近的数组边界值
    % 'circular'边界之外的输入数组值是通过隐式假设输入数组具有周期性来计算(以上为填充选项)
    
    % 'same'默认选项.输出数组与输入数组大小相同
    % 'full'输出数组是完全滤波后的结果(以上为输出大小选项)
    
    % 'corr'默认选项.使用相关性执行多维滤波,这与filter2执行滤波的方式相同
    % 'conv'使用卷积执行多维滤波(以上为相关性和卷积选项)
    gaussianlowpassattack_img=imfilter(img,h,'replicate');
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6、均值滤波攻击

    % meanattack.m
    
    function meanattack_img=meanattack(img,n)
    % 第一种方法
    % h=fspecial('average',[n,n]);
    % meanattack_img=imfilter(img,h);
    
    % 第二种方法
    % imfilter函数为多维图像的 N 维滤波
    h=fspecial('average',[n,n]);
    img_m(:,:,1)=imfilter(img(:,:,1),h);
    img_m(:,:,2)=imfilter(img(:,:,2),h);
    img_m(:,:,3)=imfilter(img(:,:,3),h);
    meanattack_img=img_m;
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    7、中值滤波攻击

    % medianattack.m
    
    function medianattack_img=medianattack(img,m)
    % medfilt2函数为二维中位数滤波,第一个参数必须是二维的.
    % 当需要对彩图像进行中值滤波时,需要分别对三个R,G,B通道进行中值滤波即可
    medianattack_img(:,:,1)=medfilt2(img(:,:,1),[m,m]);
    medianattack_img(:,:,2)=medfilt2(img(:,:,2),[m,m]);
    medianattack_img(:,:,3)=medfilt2(img(:,:,3),[m,m]);
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    8、中心裁剪攻击

    % centeredattack.m
    
    function centeredattack_img=centeredattack(img,percentage)
    img_cc=img;
    row=size(img_cc,1);% row为图像的长
    col=size(img_cc,2);% col为图像的宽
    row_begin=round((row-round(row*percentage))/2);
    row_end=round((col-round(col*percentage))/2)+round(row*percentage);
    col_begin = round((col-round(col*percentage))/2);
    col_end = round((col-round(col*percentage))/2) + round(col*percentage);
    img_cc(row_begin:row_end,col_begin:col_end,:) = 0;% 将选中的区域的值置为0,即显示为白色
    centeredattack_img=img_cc;
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    9、边缘裁剪攻击

    % edgeattack.m
    
    function edgeattack_img=edgeattack(img,percentage)
    img_ec=img;
    row=size(img_ec,1);
    col=size(img_ec,2);
    row_half=round(round(row*percentage)/2);
    col_half=round(round(col*percentage)/2);
    % 将图像四条边缘条值置为0,即显示为黑色
    img_ec(1:row_half,:,:) = 0;
    img_ec(:,1:col_half,:) = 0;
    img_ec((row-row_half):row,:,:) = 0;
    img_ec(:,(col-col_half):col,:) = 0;
    edgeattack_img=img_ec;
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    10、旋转攻击

    % rotationattack.m
    
    function rotationattack_img=rotationattack(img,angle)
     % J=imrotate(I,angle,method,bbox)中method是文本字符串,需要引号引出,method包括:'nearest'-最临近插值(默认值)、'bilinear'-双线性插值、'bicubic’-双三次插值
     % bbox是文本字符串,需要引号引出,bbox包括:'crop’输出的图像B和输入的图像A保持一致的尺寸,裁剪旋转的图像至合适的大小;'loose’输出足够容纳整个旋转图像的图像B,图像B通常比图像A-默认值
     rotationattack_img=imrotate(img,angle,'bicubic','crop');% 此函数将图像I围绕其中心点逆时针方向旋转angle度。要顺时针旋转图像,请为angle指定负值。
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    11、平移攻击

    % translationattack.m
    
    function translationattack_img=translationattack(img,location)
    row=size(img,1);
    col=size(img,2);
    image_t=zeros(row,col,3,'uint8');% 注意一定需要加上'uint8',否则只能显示白色图像
    image_t((location(1,1)+1):row,(location(1,2)+1):col,:,:)=img(1:(row-location(1,1)),1:(col-location(1,2)),:,:);
    translationattack_img=image_t;
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    12、缩放攻击

    % rescalingattack.m
    
    function rescalingattack_img=rescalingattack(img,scale)
    row=size(img,1);
    col=size(img,2);
    row_scaling=round(row*scale);% 考虑小数的情况,取四舍五入
    col_scaling=round(col*scale);
    image_s=imresize(img,[row_scaling,col_scaling]);
    rescalingattack_img=image_s;
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    13、颜色直方图均衡化攻击

    % histogramattack.m
    
    function histogramattack_img=histogramattack(img)
    % histeq函数使用直方图均衡增强对比度(主要针对灰度图像使用,若对RGB图像处理,则分别需要对三个r,g,b通道处理)
    % J=histeq(I,n) 指定直方图均衡后的灰度级数n,默认值为64
    % histogramattack_img=histeq(img)使用该语句只能处理一个通道
    r=img(:,:,1);
    g=img(:,:,2);
    b=img(:,:,3);
    image_h(:,:,1)=histeq(r,256);
    image_h(:,:,2)=histeq(g,256);
    image_h(:,:,3)=histeq(b,256);
    histogramattack_img=image_h;
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    14、伽马校正攻击

    % gammaattack.m
    
    function gammaattack_img=gammaattack(img,gamma)
    % 第一种写法
    % img=im2double(img);% 若不使用im2double,会报错:错误使用 .^, 整数只能提升为正整数幂
    % gammaattack_img=img.^gamma;
    
    % 第二种写法
    % J=imadjust(I,[low_in high_in],[low_out high_out],gamma),imadjust函数调整图像强度值或颜色图
    % 将灰度图像 I 中的强度值映射到 J 中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值,其中 gamma指定描述值I和值J关系的曲线形状
    gammaattack_img=imadjust(img,[],[],gamma);
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    15、主函数

    % main.m
    
    clc;clear;close all;
    N=512;
    img=imread('football.jpg');
    img=imresize(img,[N N],'bicubic');% 采用双三次插值(bicubic)将图像大小归一化为512*512大小,B = imresize(A,[mrows ncols],method)将图片A由参数method指定的插值运算方法来改变图像的大小到长宽为[mrows ncols]
    
    % 1、JPEG压缩攻击(qualityfactor可取参数10,30,50,70,90)
    qualityfactor=10;
    jpegattack_img=jpegattack(img,qualityfactor);
    figure(1),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(jpegattack_img);
    title('JPEG压缩攻击后的图像');
    
    % 2、高斯噪声攻击(var1可取参数0.001,0.005,0.1)
    var1=0.001;
    gaussianattack_img=gaussianattack(img,var1);
    figure(2),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(gaussianattack_img);
    title('高斯噪声攻击后的图像');
    
    % 3、椒盐噪声攻击(var2可取参数0.001,0.005,0.1)
    var2=0.001;
    saltpepperattack_img=saltpepperattack(img,var2);
    figure(3),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(saltpepperattack_img);
    title('椒盐噪声攻击后的图像');
    
    % 4、散斑噪声攻击(var3可取参数0.01,0.05,0.1)
    var3=0.01;
    speckleattack_img=speckleattack(img,var3);
    figure(4),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(speckleattack_img);
    title('散斑噪声攻击后的图像');
    
    % 5、高斯低通滤波攻击(k1可取参数357)
    k1=3;
    gaussianlowpassattack_img=gaussianlowpassattack(img,k1);
    figure(5),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(gaussianlowpassattack_img);
    title('高斯低通滤波攻击后的图像');
    
    % 6、均值滤波攻击(k2可取参数357)
    k2=3;
    meanattack_img=meanattack(img,k2);
    figure(6),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(meanattack_img);
    title('均值滤波攻击后的图像');
    
    % 7、中值滤波攻击(k3可取参数357)
    k3=3;
    medianattack_img=medianattack(img,k3);
    figure(7),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(medianattack_img);
    title('中值滤波攻击后的图像');
    
    % 8、中心裁剪攻击(percentage可取参数0.20.5)
    percentage=0.2;
    centeredattack_img = centeredattack(img,percentage);
    figure(8),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(centeredattack_img);
    title('中心裁剪攻击后的图像');
    
    % 9、边缘裁剪攻击(percentage可取参数0.10.2)
    percentage=0.1;
    edgeattack_img = edgeattack(img,percentage);
    figure(9),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(edgeattack_img);
    title('边缘裁剪攻击后的图像');
    
    % 10、旋转攻击(angle可取参数10,3050)
    angle=30;
    rotationattack_img=rotationattack(img,angle);
    figure(10),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(rotationattack_img);
    title('旋转攻击后的图像');
    
    % 11、平移攻击(Holidays数据集中(80,50),(160,100)(320,200),注意图像规格为512*512)
    location=[80,50];
    translationattack_img=translationattack(img,location);
    figure(11),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(translationattack_img);
    title('平移攻击后的图像');
    
    % 12、缩放攻击(scale可取参数0.3,0.5,0.75,1.53)
    scale=3;
    rescalingattack_img=rescalingattack(img,scale);
    figure(12),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(rescalingattack_img);
    title('缩放攻击后的图像');
    
    % 13、颜色直方图均衡化攻击(无参数)
    histogramattack_img=histogramattack(img);
    figure(13),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(histogramattack_img);
    title('颜色直方图均衡化攻击后的图像');
    
    % 14、伽马校正攻击(gamma可取参数0.8)
    gamma=0.8;
    gammaattack_img=gammaattack(img,gamma);
    figure(14),
    subplot(121),imshow(img);
    title('原始图像');
    subplot(122),imshow(gammaattack_img);
    title('伽马校正攻击后的图像');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131

    三、matlab实现效果

    1、JPEG压缩攻击
    在这里插入图片描述
    2、高斯噪声攻击
    在这里插入图片描述

    3、椒盐噪声攻击
    在这里插入图片描述

    4、散斑噪声攻击
    在这里插入图片描述

    5、高斯低通滤波攻击
    在这里插入图片描述

    6、均值滤波攻击
    在这里插入图片描述

    7、中值滤波攻击
    在这里插入图片描述

    8、中心裁剪攻击
    在这里插入图片描述

    9、边缘裁剪攻击
    在这里插入图片描述

    10、旋转攻击
    在这里插入图片描述

    11、平移攻击
    在这里插入图片描述

    12、缩放攻击
    在这里插入图片描述

    13、颜色直方图均衡化攻击
    在这里插入图片描述

    14、伽马校正攻击
    在这里插入图片描述

  • 相关阅读:
    IDEA点击RUN后后台到底执行了什么操作
    java计算机毕业设计高校宿舍管理系统MyBatis+系统+LW文档+源码+调试部署
    C#语音转文本
    liunx配置ssh免密登录
    Java单测Mock升级实践
    数据结构串和数组练习题
    构造函数及es6类写单例模式
    onnx转换TensorRT的步骤
    ARM-A架构入门基础(一)预备知识
    Python asyncore模块-客户端
  • 原文地址:https://blog.csdn.net/qq_44111805/article/details/127579311