Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

在一些随机的位置嵌入噪声帧

$
0
0

嵌入噪声帧:

%在一些特定的位置添加一些噪声帧。
%由混沌序列控制加入帧所在位置,并由其控制删除位置。
%这里用的是随机噪声,可以使用自定义形式的图片等。
%程序开发: 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');





作者:superdont 发表于2013-9-19 14:15:18 原文链接
阅读:0 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>