嵌入噪声帧:
%在一些特定的位置添加一些噪声帧。
%由混沌序列控制加入帧所在位置,并由其控制删除位置。
%这里用的是随机噪声,可以使用自定义形式的图片等。
%程序开发: lilizong@gmail.com
%2013-9-19
clc;
clear all;
aviobj=avifile('aviVideo\myAddFrame');
aviobj.Quality=100;
aviobj.compression='None';
mov=mmreader('aviVideo\vipfly.avi'); %用mmreader读入视频文件 50帧
mySize=read(mov,1);
[m n]=size(mySize);
nShort=n/3; %彩色图像的其中一帧
%%%%%%%产生混沌序列,用于产生噪声帧
%产生第1个混沌序列
l=linspace(0,0,m*nShort);
l(1)=0.98;
for i=2:m*nShort
l(i)=1-2*l(i-1)*l(i-1);
end
%转为二进制只包含0和1
for i=1:m*nShort
if l(i)>0
l(i)=1;
else
l(i)=0;
end
end
cs1=reshape(l,m,nShort);%chaotic system1
%产生第2个混沌序列
l(1)=0.99;
for i=2:m*nShort
l(i)=1-2*l(i-1)*l(i-1);
end
%转为二进制只包含0和1
for i=1:m*nShort
if l(i)>0
l(i)=1;
else
l(i)=0;
end
end
cs2=reshape(l,m,nShort);%chaotic system2
%产生第3个混沌序列
l(1)=0.92;
for i=2:m*nShort
l(i)=1-2*l(i-1)*l(i-1);
end
%转为二进制只包含0和1
for i=1:m*nShort
if l(i)>0
l(i)=1;
else
l(i)=0;
end
end
cs3=reshape(l,m,nShort); %chaotic system3
cs(:,:,1)=cs1;
cs(:,:,2)=cs2;
cs(:,:,3)=cs3;
%%%%%%%产生混沌序列,用于产生噪声帧
%%%%%%%产生混沌序列,用于控制位置
location=linspace(0,0,mov.numberofframes);
loc=location;
location(1)=0.98;
for i=2:mov.numberofframes
location(i)=1-2*location(i-1)*location(i-1);
end
for i=1:mov.numberofframes
loc(i)=mod(location(i)*10000,20)+20; %产生[20 40]之间的随机数,帧数在这个范围内
end
loc=uint8(loc); %如果不转换只能嵌入一个,整数不能等于小数。
%%%%%%%产生混沌序列,用于控制位置
%%%%%%%%%%嵌入,
%flag1用于控制当前嵌入的帧数在原有视频内的位置。
%flag2用来保存当前总共嵌入的帧数
%flag3用来保持当前嵌入帧,与上一个嵌入帧之间的距离,由loc决定
%
flag1=0;
flag2=1;
flag3=0;
% flag4=mov.numberofframes; %需要遍历的次数,随着嵌入帧数的增加而增加
% test=mov.numberofframes; 开始使用for i=1:flag4,不可以,for不支持变量
%或者在 if flag3==loc(flag2)内添加i=i-1
for i=1:100000
flag1=i-flag2+1;
flag3=flag3+1;
if flag3==loc(flag2)
flag2=flag2+1;
flag3=0;
% flag4=flag4+1
aviobj=addframe(aviobj,cs);
else
if flag1>mov.numberofframes
break;
else
b=read(mov,flag1);
end
aviobj=addframe(aviobj,b);
end
end
%flag3用来保持当前嵌入帧,与上一个嵌入帧之间的距离,由loc决定
aviobj=close(aviobj);
mplay('aviVideo\myAddFrame.avi');
剔除噪声帧:
%在一些特定的位置删除一些噪声帧。
%由混沌序列控制加入帧所在位置,并由其控制删除位置。
%程序开发: lilizong@gmail.com
%2013-9-19
clc;
clear all;
aviobj=avifile('myAVI\myRemoveFrame');
aviobj.Quality=100;
aviobj.compression='None';
mov=mmreader('aviVideo\myAddFrame.avi'); %用mmreader读入视频文件 50帧
mySize=read(mov,1);
[m n]=size(mySize);
nShort=n/3; %彩色图像的其中一帧
%%%%%%%产生混沌序列,用于控制位置
location=linspace(0,0,mov.numberofframes);
loc=location;
location(1)=0.98;
for i=2:mov.numberofframes
location(i)=1-2*location(i-1)*location(i-1);
end
for i=1:mov.numberofframes
loc(i)=mod(location(i)*10000,20)+20; %产生[20 40]之间的随机数,帧数在这个范围内
end
loc=uint8(loc); %如果不转换只能嵌入一个,整数不能等于小数。
%%%%%%%产生混沌序列,用于控制位置
%%%%%%%%%%嵌入,
%flag1用于控制当前嵌入的帧数在原有视频内的位置。
%flag2用来保存当前总共嵌入的帧数
%flag3用来保持当前嵌入帧,与上一个嵌入帧之间的距离,由loc决定
%
% flag1=0;
flag2=1;
flag3=0;
for i=1:mov.numberofframes
% flag1=i-flag2+1;
flag3=flag3+1;
if flag3==loc(flag2)
flag2=flag2+1;
flag3=0;
else
b=read(mov,i);
aviobj=addframe(aviobj,b);
end
end
%flag3用来保持当前嵌入帧,与上一个嵌入帧之间的距离,由loc决定
aviobj=close(aviobj);
mplay('myAVI\myRemoveFrame.avi');