clear;
%图象的总帧数
FrameCount=21;
%每帧图象的特征点的个数
FeaturePointCount=9;
%权重系数
w1=0.2;w2=0.3;
%初始群体数
PopSize=100;
%交叉概率
Pc=0.9;
%变异概率
Pm=0.04;
%定义种群的数据结构
Population=struct('chrom',{},'fitness',{});
BestIndividual=struct('chrom',{},'fitness',{});
%最大迭代次数
MaxGeneration=100;
%状态模型误差的协方差矩阵Q
q=[0.25 0 0
0 0.25 0
0 0 0.25];
%状态转移矩阵F T=0.12
f=[1 0.12 0.0072
0 1 0.12
0 0 1];
dt=0.012;
%观测矩阵H
h=[1.0 0 0];
%观测噪声协方差阵R
r=[0.005];
%初始估计协方差阵为P
for i=1:FeaturePointCount*2
P(:,:,i)=zeros(3);
end
%初始化状态向量
for i=1:FeaturePointCount
X_Ordinate(:,i)=[0 0 0]';
Y_Ordinate(:,i)=[0 0 0]';
end
%对实际和预测坐标开辟三维矩阵
for i=1:FrameCount
Prospect_Ordinate(:,:,i)=zeros(FeaturePointCount,2);
end
for i=1:FrameCount
Actual_Ordinate(:,:,i)=zeros(FeaturePointCount,2);
end
fid=fopen('1.txt');
CurrentFrame= fscanf(fid,'%d %d',[2 inf]);
CurrentFrame=CurrentFrame';
for i=1:FeaturePointCount
XX_Ordinate(i,1)=CurrentFrame(i,1);
YY_Ordinate(i,1)=CurrentFrame(i,2);
end
Prospect_Ordinate(:,:,1)=CurrentFrame;
Actual_Ordinate(:,:,1)=CurrentFrame;
for FC=1:FrameCount-1
%读入当前帧特征点坐标
FrameNumber=FC;
CurrentFrame=Actual_Ordinate(:,:,FC);
% o=num2str(FrameNumber);
% OpenFileName=strcat('',o,'.txt');
% fid=fopen(OpenFileName);
% CurrentFrame= fscanf(fid,'%d %d',[2 inf]);
% CurrentFrame=CurrentFrame';
% fclose(fid);
%卡尔曼滤波预测本帧图象中的特征点在下一帧中的位置
for i=1:FeaturePointCount
%预测x方向的向量
Zx=Actual_Ordinate(i,1,FC);
[X_Estimate_Coordinate p]=kalman1(f,q,P(:,:,(i*2-1)),X_Ordinate(:,i),r,h,Zx);
X_Ordinate(:,i)=X_Estimate_Coordinate;
P(:,:,(i*2-1))=p;
X_Coordinate_Prospect=f*X_Estimate_Coordinate;
NextFrame_Prospect(i,1)=X_Coordinate_Prospect(1);
%预测y方向的向量
Zy=Actual_Ordinate(i,2,FC);
[Y_Estimate_Coordinate p]=kalman1(f,q,P(:,:,(i*2)),Y_Ordinate(:,i),r,h,Zy);
Y_Ordinate(:,i)=Y_Estimate_Coordinate;
P(:,:,i*2)=p;
Y_Coordinate_Prospect=f*Y_Estimate_Coordinate;
NextFrame_Prospect(i,2)=Y_Coordinate_Prospect(1);
end
Prospect_Ordinate(:,:,FC+1)=NextFrame_Prospect;
%读入下一帧特征点坐标
o=num2str(FrameNumber+1);
OpenFileName=strcat('',o,'.txt');
fid=fopen(OpenFileName);
NextFrame=fscanf(fid,'%d %d',[2 inf]);
NextFrame=NextFrame';
[Nm,Nn]=size(NextFrame);
fclose(fid);
if Nm<FeaturePointCount
Count=zeros(1,FeaturePointCount);
for i=1:Nm
if (NextFrame(i,2)>70&NextFrame(i,2)<80)
Count(1)=Count(1)+1;
elseif (NextFrame(i,2)>80&NextFrame(i,2)<90)
Count(2)=Count(2)+1;
elseif (NextFrame(i,2)>105&NextFrame(i,2)<120)
Count(3)=Count(3)+1;
elseif (NextFrame(i,2)>125&NextFrame(i,2)<135)
Count(4)=Count(4)+1;
elseif (NextFrame(i,2)>135&NextFrame(i,2)<150)
Count(5)=Count(5)+1;
elseif (NextFrame(i,2)>165&NextFrame(i,2)<180)
Count(6)=Count(6)+1;
else %(NextFrame(i,2)>190)
Count(7)=Count(7)+1;
end
end
if (Count(4)==0&Count(6)==1)
for i=1:3
Actual_Ordinate(i,:,FC+1)=NextFrame(i,:);
end
for i=5:-1:4
Actual_Ordinate(i+1,:,FC+1)=NextFrame(i,:);
end
for i=Nm:-1:6
Actual_Ordinate(i+2,:,FC+1)=NextFrame(i,:);
end
Actual_Ordinate(4,:,FC+1)=Prospect_Ordinate(4,:,FC+1);
Actual_Ordinate(7,:,FC+1)=Prospect_Ordinate(7,:,FC+1);
elseif (Count(4)==0)
for i=1:3
Actual_Ordinate(i,:,FC+1)=NextFrame(i,:);
end
for i=Nm:-1:4
Actual_Ordinate(i+1,:,FC+1)=NextFrame(i,:);
end
Actual_Ordinate(4,:,FC+1)=Prospect_Ordinate(4,:,FC+1);
elseif (Count(6)==1)
for i=1:6
Actual_Ordinate(i,:,FC+1)=NextFrame(i,:);
end
for i=Nm:-1:7
Actual_Ordinate(i+1,:,FC+1)=NextFrame(i,:);
end
Actual_Ordinate(7,:,FC+1)=Prospect_Ordinate(7,:,FC+1);
else %(Count(7)==1)
for i=1:7
Actual_Ordinate(i,:,FC+1)=NextFrame(i,:);
end
for i=Nm:-1:8
Actual_Ordinate(i+1,:,FC+1)=NextFrame(i,:);
end
Actual_Ordinate(8,:,FC+1)=Prospect_Ordinate(8,:,FC+1);
end
else
Actual_Ordinate(:,:,FC+1)=NextFrame;
end
%初始化代数
Generation=1;
%产生初始群体 GenerationInitialPopulation
for i=1:PopSize
InitialPopulation(i).chrom=randperm(FeaturePointCount);
end
%对群体进行估计 EvaluatePopulation
% 计算初始群体进行估计
[Population,BestIndividual(Generation)]=EvaluatePopulation(Prospect_Ordinate(:,:,FC+1),Actual_Ordinate(:,:,FC+1),InitialPopulation,w1,w2,FeaturePointCount,PopSize);
% [Population,BestIndividual(Generation)]=EvaluatePopulation(Actual_Ordinate(:,:,FC),Actual_Ordinate(:,:,FC+1),InitialPopulation,w1,w2,FeaturePointCount,PopSize);
MaxIndividual=BestIndividual(1);
while (Generation<MaxGeneration)
Generation=Generation+1;
%选择算子
NewPopulation=SelectOperator(Population,PopSize);
Population=NewPopulation;
%交叉算子
Population=CrossoverOperator2(Population,Pc,PopSize,FeaturePointCount);
%变异算子
Population=MutationOperator2(Population,Pm,PopSize,FeaturePointCount);
%对群体进行估计
[Population,BestIndividual(Generation)]=EvaluatePopulation(Prospect_Ordinate(:,:,FC+1),Actual_Ordinate(:,:,FC+1),Population,w1,w2,FeaturePointCount,PopSize);
% [Population,BestIndividual(Generation)]=EvaluatePopulation(Actual_Ordinate(:,:,FC),Actual_Ordinate(:,:,FC+1),Population,w1,w2,FeaturePointCount,PopSize);
if (MaxIndividual.fitness<BestIndividual(Generation).fitness)
MaxIndividual=BestIndividual(Generation);
end
end
MF=FC+1
MaxIndividual
for i=1:FeaturePointCount
XX_Ordinate(i,FC+1)=Actual_Ordinate(MaxIndividual.chrom(i),1,FC+1);
YY_Ordinate(i,FC+1)=Actual_Ordinate(MaxIndividual.chrom(i),2,FC+1);
% XX_Ordinate(i,FC+1)=NextFrame(MaxIndividual.chrom(i),1);
% YY_Ordinate(i,FC+1)=NextFrame(MaxIndividual.chrom(i),2);
end
end
plot(XX_Ordinate(1,:),YY_Ordinate(1,:),XX_Ordinate(2,:),YY_Ordinate(2,:),XX_Ordinate(3,:),YY_Ordinate(3,:),XX_Ordinate(4,:),YY_Ordinate(4,:),XX_Ordinate(5,:),YY_Ordinate(5,:),XX_Ordinate(6,:),YY_Ordinate(6,:));
hold on;
for i=1:FeaturePointCount
x = XX_Ordinate(i,:);
y = YY_Ordinate(i,:);
plot(x,y,'-k.');
end
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论























收起资源包目录




















共 16 条
- 1
资源评论


GZM888888
- 粉丝: 26
- 资源: 1989
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
