【图像加密】基于matlab行列像素置乱+DWT图像加密【含Matlab源码 675期】
一、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
- 点赞
- 收藏
- 关注作者
评论(0)