• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Matlab
  • 标签: 目标识别  

资源简介

用Adaboost+PCA进行特定的目标识别

资源截图

代码片段和文件信息

clear all;
class_num=15;
class_sample=11;
train_num=6;
test_num=5;
sample=10;%sample为选择需要识别的类别编号
path = [‘D:\新建文件夹\文件\tu\‘];
N=5;
n=1;
Train_Image=zeros(10000train_num);
t=strcat(num2str(sample)‘\‘);
for j=1:train_num
    name=[path t ‘s‘ num2str(j) ‘.JPEG‘];
    [amap]=imread(name‘bmp‘);
    Train_Image(:j)=reshape(asize(a1)*size(a2)1);
end;
O=double(ones(1size(Train_Image2)));
mean_Image=mean(Train_Image2);
Train_ImageSub=Train_Image-mean_Image*O;
Cov=Train_ImageSub‘*Train_ImageSub;
[VD]=eig(Cov);
V=Train_ImageSub*V;
V=V(:end:-1:end-(N-1));
Vc=V;
a=[1:N];
C=nchoosek(an)‘;
V=zeros(size(Vc1)nsize(C2));
for i=1:size(C2)
    for k=1:n
        V(:ki)=Vc(:C(ki));
    end;
end;
N=nchoosek(Nn);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Adaboost训练开始
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T=150;%循环次数
%选择tr个类别(其中包括目标类别)的样本,输入到adTrain_Image中,用作adaboost训练
tr=3;
adTrain_Image=zeros(10000tr*train_num);
for i=1:tr
    t=strcat(num2str(sample-2+i)‘\‘);
    for j=1:train_num
        name=[path t ‘s‘ num2str(j) ‘.JPEG‘];
        [amap]=imread(name‘bmp‘);
        adTrain_Image(:(i-1)*train_num+j)=reshape(asize(a1)*size(a2)1);
    end;
end;
M=train_num*tr;
adaboost_model=struct(‘weights‘zeros(T1)‘feature‘zeros(T1)‘liminal‘zeros(T1));%weights是每轮弱分类器的权重,feature是特征组编号,liminal是阈值
D=ones(M1);
D=D./M;
errf=0;
errfp=0;
errd=0;
errdp=0;
numf=0;
numd=zeros(N1);
numdt=0;
dis=zeros(tr*train_numN);
for z=1:T
    errf=0;
    errfp=0;
    for i=1:N %遍历所有特征向量,每次选误差最小的向量
        errd=0;
        errdp=0;
        cv=zeros(size(mean_Image1)1);
        cv=double(cv);
        cv=mean_Image‘*V(::i);
        for k=1:tr*train_num  %取每个训练样本的距离
            Image=adTrain_Image(:k);
            %CoeTest=Image-mean_Image;
            CoeTest=Image‘*V(::i);
            dis(ki)=sum(((CoeTest - cv).^2).^(1/2));
        end;
        temp=zeros(tr*train_num1);
        for s=1:tr*train_num %遍历所有距离,以每个距离作为阈值
            for k=1:tr*train_num %比较所有距离与阈值的大小,进行分类
                
                if ((dis(ki)>dis(si))&(ceil(k/train_num)~=ceil(tr/2)))|((dis(ki)<=dis(si))&(ceil(k/train_num)==ceil(tr/2)))
                    temp(k)=1;
                else
                    temp(k)=-1;
                end;
            end;% 距离分类结束
            if s==1
                errd=sum(D(temp<0));
                errdp=errd;
        

评论

共有 条评论