【图像加密】基于行列像素置乱+DWT小波变换图像隐藏加密matlab源码
发布日期:2021-05-04 12:56:12 浏览次数:28 分类:技术文章

本文共 4717 字,大约阅读时间需要 15 分钟。

一、简介

小波变换原理

小波变换是一种信号的时间一尺度(时间一频率)分析方法,一种窗口大小固定不变形状可改变,时间窗和频率窗都可以改变的时频局部化分析方法。它具有多分辨率分析( Multi-resolution Analysis)的特点,且在时频两域都具有表征信号局部特征的能力。
小波分析方法在低频部分具有较高的频率分辨率和较低的时间分辨率,在高频部分具有较高的时间分辦率和较低的频率分辦率,所以被誉为“数学显微镜”。正是这种特性,使小波变换具有对信号的自适应性。
小波分析被看成调和分析这一数学领域半个世纪以来的工作结晶,已经广泛地应用于信号处理、图像处理、量子场论、地震勘探、语音识别与合成、音乐、雷达、CT成像、彩色复印、流体湍流、天体识别、机器视觉、机械故障诊断与监控、分形以及数字电视等科技领域。
原则上讲,传统上使用傅里叶分析的地方,都可以用小波分析取代。小波分析优于傅里叶变换的地方是在时域和频域同时具有良好的局部化性质。
在这里插入图片描述
这样小波变換对不同的频率在时域上的取样步长是调节性的:在低频时,小波变换的时间分辨率较低,而频率分辦率较高;在高频时,小波变换的时间分辨率较高,而類率分辨率较低。这正符合低频信号变化缓慢而高频信号变化迅速的特点。
这便是它优于经典傅里叶变换与短时傅里叶变换的地方。

二、源代码

%同时打乱各行和各列进行明文图像第一次加密 %%% 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);endR1=zeros(1,M*N);    %产生一维混沌加密序列R1(1)=x;for i=1:M*N-1R1(i+1)=u*R1(i)*(1-R1(i));endR2=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);endG1=zeros(1,M*N);     %产生一维混沌加密序列G1(1)=x;for i=1:M*N-1G1(i+1)=u*G1(i)*(1-G1(i));endG2=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);endB1=zeros(1,M*N);    %产生一维混沌加密序列B1(1)=x;for i=1:M*N-1B1(i+1)=u*B1(i)*(1-B1(i));endB2=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    endend[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    endend[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    endend% 进行逆小波变换(idwt),得到视觉安全上的图像FRGBFr=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    endend

三、运行结果

在这里插入图片描述

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

四、备注

完整代码或者代写添加QQ 1575304183

转载地址:https://blog.csdn.net/qq_34763204/article/details/116379577 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【手写数字识别】基于支持向量机SVM实现手写数字识别matlab源码含GUI
下一篇:【图像检测】基于形态学实现人脸检测定位matlab源码含 GUI

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月03日 18时00分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java文档生成_Java文档自动生成 2019-04-21
java 共享目录_java 操作windows 共享目录方法介绍 2019-04-21
java 监控 宕机_JAVA监测tomcat是否宕机,控制重启 2019-04-21
catch that cow java_POJ3278——Catch That Cow 2019-04-21
java integer 不变模式_Java代码的变与不变 2019-04-21
java guava 使用_Java8-Guava实战示例 2019-04-21
python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价... 2019-04-21
java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~ 2019-04-21
gnome mysql client_解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享 2019-04-21
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决 2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦 2019-04-21
java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 2019-04-21
下列不属于java语言特点的是_下列选项中,不属于Java语言特点的一项是( )。... 2019-04-21
java中小数的乘法_javascript的小数点乘法除法实例 2019-04-21
kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验 2019-04-21
linux shell mysql备份_linux shell 备份mysql 数据库 2019-04-21
Java双向链表时间复杂度_链表是什么?有多少种链表?时间复杂度是? 2019-04-21
unity3d能和java系统整合吗_Android与Unity3d的整合 2019-04-21
minecraft666java_我的世界的666的世界 2019-04-21
辽宁师范大学java_辽宁师范大学心理学院 2019-04-21