%该函数先对初始图像进行DCT变换,然后对DCT系数进行加密,以达到加密的效果,置乱效果较好,但运行时间很长
clear all;
t0 = clock;%测试程序运行时间
im=imread('F:\我的资料\大四上学期\课程设计\lifangti.jpg');
im1=rgb2gray(im);%图像灰度化
im1=medfilt2(im1,[3 3]); %图像平滑处理
subplot(111);
figure(1);
imshow(im);%X为原始图像
title('原始图像');
figure(2);
imshow(im1);
title('灰度化处理');
im1=double(im1);
T=dctmtx(8); %离散余弦变换矩阵
im2=blkproc(im1,[8 8],'P1*x*P2',T,T'); %对原图像进行DCT变换
[M,N]=size(im2);
e=hundungen(M,N,0.1);
tt=0.1;
im3=mod(tt*im2+(1-tt)*e,256);
figure(3);
imshow(uint8(im3),[]);
title('加密置乱图像');
e=hundungen(M,N,0.1);
im4=(im3-(1-tt)*e)/tt;
im5=blkproc(im4,[8 8],'P1*x*P2',T',T); %进行DCT反变换,得到原图像
figure(4);
imshow(uint8(im5),[]);
title('解密图像');
figure(5);
subplot(231)
imhist(uint8(im1));
title('初始图像的直方图');
subplot(232)
imhist(uint8(im2));
title('DCT编码之后的直方图');
subplot(233)
imhist(uint8(im3));
title('加密之后的直方图');
subplot(234)
imhist(uint8(im4));
title('解密之后的直方图');
subplot(236)
imhist(uint8(im5));
title('解密并DCT反变换之后的直方图');
ssy=sum(sum(im3));
uy=ssy/(M*N);%置乱后图像的均值
vy=sum(sum((im3-uy)^2));
ssx=sum(sum(im1));
ux=ssx/(M*N);%原图像的均值
vx=sum(sum((im1-ux)^2));
Variancey=vy/uy;%置乱后图像的方差
Variancex=vx/ux;%原图像的方差
DDD=Variancey/Variancex;%置乱度
etime(clock,t0)