1. AVI视频文件结构特点[13]
音频视频交错格式AVI(Audio Video Interleaved)是将语音和影像同步组合在一起的文件格式。它对视频文件采用了一种有损压缩方式,但压缩比较高,AVI支持256色和RLE压缩,一个AVI文件可以包含多个不同类型的媒体流,它以一系列的位图来存储视频信息,并在文件中加入以数字形式存储的数字化视频信息。
AVI包含三部分:文件头、数据块和索引块。其中文件头包快文件的通用信息,定义数据格式及压缩算法等参数。数据块包含实际数据流,即图像和声音序列数据,是文件的主体,也是决定文件容量的主要部分。索引块包括数据块列表和它们在文件中的位置,以提供文件内数据随机存取能力。
2.系统模型与问题陈述
超混沌Lorenz系统的动力学方程为:
?1?a(x2?x1)?x4?x?x??2?cx3?x2?x1x3 ?x (1)
??3?x1x2?bx3??4??x1x3?rx4?x 其中x?(x1,x2,x3,x4)T为系统的状态变量,L?(a,b,c,r)T为系统的控制参数,选取参数
?a,b,c,r??(10,8,28,?1)时,该系统处于混沌状态。采用四阶龙格库塔算法产生混沌迭代序列
3D,其具体形式如下:
?K1?f(xi,yi)?K?f(x?h/2,y?K*h/2)2ii1???K3?f(xi?h/2,yi?K2*h/2) (2) ?K?f(x?h,y?K?h)ii3?4??yi?1?yi?h/6(K1?2K2?2K3?K4)根据式(1)和式(2)以及上述参数,可以得到Lorenz混沌系统中吸引子的数值仿真结果,令初始条件x0?{1.2157,3.0436,1.8573,2.9458},t?1040时,图1所示为混沌吸引子的三维图形以及分别在?x,y?,?x,z?,?y,z?平面投影。
2
图1超混沌Lorenz系统的混沌吸引子
3. 基于超混沌Lorenz系统的视频加密算法 3.1 AVI视频文件的读入
利用随机采样到的一段AVI视频进行混沌加密,由于Matlab中只支持ZJmedia Umcompress RGB24编码方式的AVI视频文件,因此有必要把采集到的这段视频文件进行转换处理,使其能够无障碍地载入到Matlab工具中。本文采用的是Matlab默认的视频“clock.avi”,运用mmread工具包读入视频,将视频分别转存为video和audio。
3.2 视频加密原理图
本文基于超混沌Lorenz系统采用四阶龙格库塔算法产生用于视频加密的混沌序列,并使用此混沌序列对视频的图像数据进行了加密,由于希望加密所用的混沌序列能够对明文的变化具有敏感性,因此将明文属性叠加到混沌映射的初值和参数中。视频编码如图所示:
3
从视频的video中读取一帧帧的图片 将每张彩色图片的像素矩阵分为R、G、B三个分量 采用四阶龙格库塔算法产生混沌迭代序列D与R、G、B三个分量做加法 编码前的视频图片 编码后的视频图片
图2 系统的编码模型
3.3 视频加密算法
视频加密的过程中,主要是针对读入视频的图片文件进行加密。具体操作过程如下: (1)对原始视频进行帧处理。主要是读入视频,将视频的每帧转化为图片。相关程序如下:
[vid,audio]=mmread(’clock.avi’); %读取视频; fnum=size(vid.frames,2); %读取视频的帧数; for i=1:fnum
strtemp=strcat(’c:\\转换的图片\\’,int2str(i),’.’,’bmp’); imwrite(vid.frames(i).cdata(:,:,:),strtemp); end
(2)将每张彩色图片的像素矩阵分为R、G、B三个分量。 I=cell(1,12);
for p=1:12
imageName=strcat('c:\\转换的图片\\',num2str(p),'.bmp');
4
I{p} = imread(imageName);
R=I{p}(:,:,1); G=I{p}(:,:,2);
B=I{p}(:,:,3); %将像素矩阵分成R,G,B三个分量 end
(3) 设定Lorenz超混沌系统的初值x0,步长h,及运行时间t1。由龙格库塔法产生迭代矩阵D。
D=zeros(n,4); for i=1:n
k1=xprim(t,x);
k2=xprim(t+h/2,x+(h/2)*k1); k3=xprim(t+h/2,x+(h/2)*k2); k4=xprim(t+h,x+h*k3);
k=h/6*(k1+2*k2+2*k3+k4); %4阶龙格库塔算法 t=t+h; x=x+k; D(i,:)=x; end 其中xprim函数为:
function xprim=xprim(t,x)
xprim(1)=a*(x(2)-x(1))+x(4); xprim(2)=c*x(1)-x(2)-x(1)*x(3); xprim(3)=x(1)*x(2)-b*x(3); xprim(4)=-x(1)*x(3)+r*x(4);
(4)Q?round(D),D?D?Q,D?abs(round(rem((D*1000),256)))。取矩阵D的小数部分,这样处理后得到的非负整数矩阵的元素值在0到255(包括0和255)上均匀分布。
Q=round(D);
D=Q-D; %对数据进行处理 D=abs(round(rem(D*1000,256)));
5
相关推荐: