【图像加密】基于matlab行列像素置乱+DWT图像加密【含Matlab源码 675期】

举报
海神之光 发表于 2022/05/29 03:27:26 2022/05/29
【摘要】 一、DWT简介 数字技术、多媒体技术和网络技术的发展,为信息的存储提供了极大的方便.随着计算机网络通信技术的深入应用,数据的交换和传输已经得到广泛的应用.因此,通过网络传输的数字产品如:图象、声音、静态...

一、DWT简介

数字技术、多媒体技术和网络技术的发展,为信息的存储提供了极大的方便.随着计算机网络通信技术的深入应用,数据的交换和传输已经得到广泛的应用.因此,通过网络传输的数字产品如:图象、声音、静态图片等的版权保护成为急需解决的技术问题.
图像是人类获取和传播信息的主要载体之一,利用数字图像信息本身存在的冗余性及人眼对图像信息的掩蔽效应,可以将秘密信息嵌入到公开图像中进行传送.Internet技术和多媒体信息处理技术的迅猛发展,使得数字化信息加密技术得到了人们的广泛关注.
根据加密算法的工作域不同可以分成两类:空间域算法、变换域算法.空间域算法是通过直接修改图象的某些像素值的办法来实现加密,该类算法较易实现,但鲁棒性较弱,即使对伪装载体做极小的修改都具有极大的脆弱性.变换域算法是先对公开图象进行某种变换,然后在变换系数上潜入待加密信息.变换域算法的优点是: (1) 待加密信息分布到空间域的所有像素上,有利于提高信息的不可见性; (2) 能方便地与HVS(人类视觉系统)的某些特性结合; (3) 能与现有的图象压缩方法兼容,从而实现压缩图象的信息嵌入.与空域加密方法相比,变换域方法在保持了对人类感官不可察觉性的前提下,对诸如压缩、剪裁等信号处理的抗攻击能力更强.目前有许多变换域的加密方法.一种方法是采用离散余弦变换(DCT)把信息嵌入到载体文件中;另一种方法是使用小波变换(DWT).由于小波理论本身的研究日趋完善,小波多尺度分析方法的应用愈来愈广泛,尤其是在信号和图像处理中良好的时频特性,使得小波域中的信息加密技术成为近年来的研究热点.

本文给出了一种基于小波变换的快速图像加密算法,该方法思想简单易于实现,加密效果较好,安全性较好.

算法原理
1 连续小波变换(CWT)
设x (t)是平方可积函数,ψ(t)是被称为基本小波或母小波的函数,定义
在这里插入图片描述
2 离散小波变换(DWT)
离散小波变换是对连续小波变换的尺度和位移按照2的幂进行离散化得到的,又称为二进制小波变换,可以表示为
在这里插入图片描述
ψ(t)是小波母函数.
如图1形象地表示了图像的两层小波分解.可以看出, 图像在每一个分解层上都被分解成4个频带, 分别为LL, LH, HL, HH.接着下一层分解只仅仅对低频分量LL进行分解.因此利用小波变换, 图像被分解成逼近图像和细节图像之和, 可认为它是一个将图像在相互垂直的空间频率上进行变换的过程.离散小波变换在提取图像低频信息的同时, 又获得了3个方向的高频边缘细节信息.
在这里插入图片描述
图1 图像的两层小波分解
3 算法思想
首先分别对秘密图像SI和公开图像OI进行时域上的置乱变换得到图像SIL和OIL,其次对公开图像进行小波变换,对于变换的小波系数矩阵选择一个起始位置在(r, c),大小为N×N(其中N×N为秘密图像的大小)的系数矩阵OILC;对OILC和图像SIL按位进行异或运算,最后利用小波逆变换进行图像重构,从而得到结果图像.

4 加密算法
Step1:对秘密图像SI进行置乱变换得到置乱图像SIL;
Step2:对公开图像OI进行置乱变换得到置乱图像OIL;
Step3:对图像OIL进行小波变换,得到小波变换系数OILC;
Step4:对Step1与Step2中所得图像SIL和OILC按位进行异或运算;
Step5:利用小波逆变换对图像进行重构得到结果图像EI.

5 恢复算法
Step1:对结果图像EI进行小波变换,得到其小波变换系数EIC;
Step2:对公开图像OI进行小波变换,得到其小波变换系数OIC;
Step3:对EIC和OIC进行异或运算得到图像RIL;
Step4:对Step3中所得图像RIL进行置乱逆变换得到恢复图像RI.

二、部分源代码

%同时打乱各行和各列进行明文图像第一次加密 %%% 
clear;  
W = imread('lena.tif');  
s = size(W);  
r = randsample(s(1), s(1));  
W1 = W(r, :, :);  
c = randsample(s(2), s(2));  
W2 = W1(:, c, :);  
i = 1; f = 1:length(c);  
while i <= length(c)  
    f(i) = find(c == i);  
    i = i + 1;  
end   
P = W2;   
R = P(:,:,1);        %提取明文图像的R层像素
G = P(:,:,2);        %提取明文图像的G层像素
B = P(:,:,3);        %提取明文图像的B层像素
figure(1)
subplot(2,2,1);imshow(R,[]);title('第一次加密的R层');imwrite(R,'R1.tif')
subplot(2,2,2);imshow(G,[]);title('第一次加密的G层');imwrite(G,'G1.tif')
subplot(2,2,3);imshow(B,[]);title('第一次加密的B层');imwrite(B,'B1.tif')
subplot(2,2,4);imshow(P,[]);title('第一次加密的RGB彩色层');imwrite(P,'第一次加密的RGB彩色层.tif')
%%%%%%第二次加密%%%%%
[M,N]=size(R);      %利用Logistic混沌映射,对R分层图像进行序列加密
u=3.9;
x0=0.5;
x=x0;
for i=1:100         %迭代100次,达到充分混沌状态
    x=u*x*(1-x);
end
R1=zeros(1,M*N);    %产生一维混沌加密序列
R1(1)=x;
for i=1:M*N-1
R1(i+1)=u*R1(i)*(1-R1(i));
end
R2=uint8(255*R1);     %归一化序列
R3=reshape(R2,M,N);   %转化为二维混沌加密序列
R4=bitxor(R,R3);      %异或操作加密
imwrite(R4,'R2.tif')

% [M,N]=size(G);        %利用Logistic混沌映射,对G分层图像进行序列加密
u=3.9;
x0=0.5;
x=x0;
for i=1:100          %迭代100次,达到充分混沌状态
    x=u*x*(1-x);
end
G1=zeros(1,M*N);     %产生一维混沌加密序列
G1(1)=x;
for i=1:M*N-1
G1(i+1)=u*G1(i)*(1-G1(i));
end
G2=uint8(255*G1);    %归一化序列
G3=reshape(G2,M,N);  %转化为二维混沌加密序列
G4=bitxor(G,G3);     %异或操作加密
imwrite(G4,'G2.tif')

% [M,N]=size(B);      %利用Logistic混沌映射,对B分层图像进行序列加密
u=3.9;
x0=0.5;
x=x0;
for i=1:100         %迭代100次,达到充分混沌状态
    x=u*x*(1-x);
end
B1=zeros(1,M*N);    %产生一维混沌加密序列
B1(1)=x;
for i=1:M*N-1
B1(i+1)=u*B1(i)*(1-B1(i));
end
B2=uint8(255*B1);     %归一化序列
B3=reshape(B2,M,N);   %转化为二维混沌加密序列
B4=bitxor(B,B3);      %异或操作加密
imwrite(B4,'B2.tif')

%RGB三分层合成
P1=cat(3,R4,G4,B4);

figure(2);
subplot(2,2,1);imshow(R4);title('第二次R分层加密后图像');
subplot(2,2,2);imshow(G4);title('第二次G分层加密后图像');
subplot(2,2,3);imshow(B4);title('第二次B分层加密后图像'); 
subplot(2,2,4);imshow(P1);title('第二次加密彩色RGB图像');
imwrite(P1,'第二次加密彩色RGB图像.tif')

%%%%%%%%%%%%%%%%%%%%%%%%%%将密文图像嵌入载体图像%%%%%%%%%%%%%%%%%%%
%读取载体图像
F = imread('houlian.tif');
Rf = F(:,:,1);        %提取载体图像的R层像素
Gf = F(:,:,2);        %提取载体图像的G层像素
Bf = F(:,:,3);        %提载体取图像的B层像素
figure(3);
subplot(2,2,1);imshow(Rf);title('载体图像R层');
subplot(2,2,2);imshow(Gf);title('载体图像G层');
subplot(2,2,3);imshow(Bf);title('载体图像B层');
subplot(2,2,4);imshow(F);title('载体图像RGB彩色层');

%将R4,G4,B4的像素值分为小数位和十位个位两部分   
RCV=mod(R4,10);RCD=floor(R4./10);
GCV=mod(G4,10);GCD=floor(G4./10);
BCV=mod(B4,10);BCD=floor(B4./10);

% 将载体图像进行分层的小波分解,并嵌入
wave_in='db1';
[Rll,Rlh,Rhl,Rhh]=dwt2(Rf,wave_in);
mv=mean(Rll(:));%求出矩阵Rll平均值
for i=1:floor(M)
    for j=1:floor(N)
        if(Rll(i,j)>=mv)
            Rlh(i,j)=RCV(i,j);
            Rhl(i,j)=RCD(i,j);
        else
            Rlh(i,j)=RCD(i,j);
            Rhl(i,j)=RCV(i,j);
        end
    end
end

[Gll,Glh,Ghl,Ghh]=dwt2(Gf,wave_in);
mv=mean(Gll(:));%求出矩阵Gll平均值
for i=1:floor(M)
    for j=1:floor(N)
        if(Gll(i,j)>=mv)
            Glh(i,j)=GCV(i,j);
            Ghl(i,j)=GCD(i,j);
        else
            Glh(i,j)=GCD(i,j);
            Ghl(i,j)=GCV(i,j);
        end
    end
end

[Bll,Blh,Bhl,Bhh]=dwt2(Bf,wave_in);
mv=mean(Bll(:));%求出矩阵Bll平均值
for i=1:floor(M)
    for j=1:floor(N)
        if(Bll(i,j)>=mv)
            Blh(i,j)=BCV(i,j);
            Bhl(i,j)=BCD(i,j);
        else
            Blh(i,j)=BCD(i,j);
            Bhl(i,j)=BCV(i,j);
        end
    end
end

% 进行逆小波变换(idwt),得到视觉安全上的图像FRGB
Fr=idwt2(Rll,Rlh,Rhl,Rhh,wave_in);
Fg=idwt2(Gll,Glh,Ghl,Ghh,wave_in);
Fb=idwt2(Bll,Blh,Bhl,Bhh,wave_in);
Frgb(:,:,1)=Fr;%%合成
Frgb(:,:,2)=Fg;%%合成
Frgb(:,:,3)=Fb;%%合成
Frgb=uint8(Frgb);
figure(4);
subplot(2,2,1);imshow(Fr,[]);title('载密R层');
subplot(2,2,2);imshow(Fg,[]);title('载密G层');
subplot(2,2,3);imshow(Fb,[]);title('载密B层');
subplot(2,2,4);imshow(uint8(Frgb),[]);title('视觉安全图像');
imwrite(Frgb,'视觉安全图像.tif')

%%%%%%%%%%%%%%%%%%%%%%%%%%从视觉上安全的密文图像提取明文的密文图像%%%%%%%%%%%%%%%%%%%
C=Frgb;
%从这里开始是还原首先分解出RGB三层
% close all;
Cr=C(:,:,1);
Cg=C(:,:,2);
Cb=C(:,:,3);
[Rll1,Rlh1,Rhl1,Rhh1]=dwt2(Cr,wave_in);
mv=median(Rll1(:));
RD1=zeros(M,N);RD2=zeros(M,N);%定义两个矩阵用于存放小数位和十位个位
for i=1:floor(M)
    for j=1:floor(N)
        if(Rll1(i,j)>=mv)
            RD1(i,j)=Rlh1(i,j);
            RD2(i,j)=Rhl1(i,j);
        else
            RD2(i,j)=Rlh1(i,j);
            RD1(i,j)=Rhl1(i,j);
        end
    end
end

  
 
  • 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
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

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

原文链接:qq912100926.blog.csdn.net/article/details/115409874

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。