基于adboost的车牌定位主程序,需15*45的图像

 
%***********************************************************************
clear;clc;close all;
%***********************************************************************                                             
PosExaNum = 200;%最低要做1000个
NegExaNum = 500; %最低要做2000个
TotalExaNum = PosExaNum + NegExaNum;
SetImgSzY = 15;
SetImgSzX = 45;
AllExaFeatures = [];%所有样本的特征值矩阵
T = 100; % 100 可改变,由你选择几个特征决定
for i = 1:PosExaNum
    I = double(rgb2gray(imread(strcat('F:\车牌图片\裁剪后的车牌\bmp\切割后的车牌bmp\im',strcat(num2str(i),'.bmp')))));
    %im = double(rgb2gray(imread(strcat('LprTrain\im',strcat(num2str(i),'.bmp')))));
    Im = imresize(I,[SetImgSzY SetImgSzX],'nearest'); %'nearest','bilinear','bicubic',可根据调试情况修改
    %可以预处理增加对比度 ????????????????????????????????????????????????????????
    %求取微分图像
    [Iy,Ix] = diffImage(Im,SetImgSzY,SetImgSzX);
    %求取积分图像
    intg_imY = ImageToIntg(Iy,SetImgSzX,SetImgSzY);% to integ image
    intg_imX = ImageToIntg(Ix,SetImgSzX,SetImgSzY);
    %[intg_imY,intg_imX] = size(intg_im);
    %tic
    yFeatures = GetFeatures(intg_imY,SetImgSzY,SetImgSzX); % 应该在多增加几个类型
    xFeatures = GetFeatures(intg_imX,SetImgSzY,SetImgSzX);
    %toc
    yAllExaFeatures = [AllExaFeatures ,[yFeatures.Value]'];
    xAllExaFeatures = [AllExaFeatures ,[xFeatures.Value]'];
end  
for i = 1:NegExaNum
    I = double(rgb2gray(imread(strcat('F:\车牌图片\背景图片\bmp\im',strcat(num2str(i),'.bmp')))));
    %im = double(rgb2gray(imread(strcat('LprTrain\im',strcat(num2str(i),'.bmp')))));
    Im = imresize(I,[SetImgSzY SetImgSzX],'nearest'); %'nearest','bilinear','bicubic',可根据调试情况修改
    %可以预处理增加对比度 ????????????????????????????????????????????????????????
    %求取微分图像
    [Iy,Ix] = diffImage(Im,SetImgSzY,SetImgSzX);
    %求取积分图像
    intg_imY = ImageToIntg(Iy,SetImgSzX,SetImgSzY);% to integ image
    intg_imX = ImageToIntg(Ix,SetImgSzX,SetImgSzY);
    %[intg_imY,intg_imX] = size(intg_im);
    %tic
    yFeatures = GetFeatures(intg_imY,SetImgSzY,SetImgSzX);
    xFeatures = GetFeatures(intg_imX,SetImgSzY,SetImgSzX);
    %toc
    yAllExaFeatures = [AllExaFeatures ,[yFeatures.Value]'];
    xAllExaFeatures = [AllExaFeatures ,[xFeatures.Value]'];
end
%%%%%%%%%%%%%%%%%%%%%针对Y方向的微分图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Theta,BestFea,P,alfa,H] = adboost(yAllExaFeatures,yFeatures,T);
%获取强分类器,等待样本全了再调试
ResultH = alfa * H > 0.5 * sum(alfa);
TotalError = sum(ResultH ~= AllExaFeatures(end,i));
disp('the training is over, the total error is'),disp(TotalError);
%%%%%%%%%%%%%%%%%%%% 训练结束 %%%%%%%%%%%%%%%%%%%%%%%%%%%
% image figure No. 1
f1h = figure;   
% set various properties and display images
set(f1h,'units','normalized');  
set(f1h,'position',[0 0 0.5 1]); 
set(f1h,'numbertitle','off');
titleName='adaboost algom. test and application';
set(f1h,'name',titleName);
t = 1 : 100 ;
plot(t,minError,'r+:');
title('adaboost train error test ','Fontsize',16);
xlabel('the altetive time');
ylabel('Errrors rate');
% legend('error on train file','error on test file');
grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调试时在找没用的变量
clear ResultH;
clear TotalError;
clear H;
%**********************************************************************
%以下为测试部分
%***********************************************************************
%选择一副图片
[filename pathname] = uigetfile({'*.jpg';'*.bmp';'*.gif'},'选择图片');
%路径名+全名
str = [pathname filename];
%读取图片
im = rgb2gray(imread(str));
imshow(im); hold on
[Y,X] = size(im);
%对图像进行预处理
%不同尺度,不同位置检测器 
k = 1 ; %根据调试情况而定
DetectorScale.y = SetImgSzY; 
DetectorScale.x = SetImgSzX;
while (DetectorScale.y < Y & DetectorScale.x < X)
    SubImgStPos.y = 1;
    while (SubImgStPos.y < Y - DetectorScale.y + 1) %行扫描
        SubImgStPos.x = 1;
        while (SubImgStPos.x < X - DetectorScale.x +1) %列扫描
                %将该部分图像剪切掉
                SubIm = imcrop(im,[SubImgStPos.x,SubImgStPos.y,DetectorScale.x-1,DetectorScale.y-1]);
                %可以预处理增加对比度????????????????????????????????????????????????
                [Iy,Ix] = diffImage(SubIm,SetImgSzY,SetImgSzX);
                intg_im = ImageToIntg(Iy,DetectorScaleX,DetectorScaleY);% to integ image
                for t = 1:T
                    yFeatures(t).Value = GetOneFeatureValue(BestFea(t).Type,BestFea(t).StPos,BestFea(t).Scale,intg_im);
                    h(t) = weakClassify(yFeatures(t).Value,Theta(t),P(t));
                end
                ResultH = alfa * h' > 0.5 * sum(alfa);
                if ResultH == 1
                    msgbox('this is a Lpr image','image classify');
                    %把这个矩形标记起来
                    plot(SubImgStPos.x:(SubImgStPos.x+DetectorScale.x-1),SubImgStPos.y*ones(1,DetectorScale.x),'g');%画上行线
                    plot(SubImgStPos.x:(SubImgStPos.x+DetectorScale.x-1),(SubImgStPos.y+DetectorScale.y)*ones(1,DetectorScale.x),'g');
                    plot(SubImgStPos.x*ones(1,DetectorScale.y+1),SubImgStPos.y:(SubImgStPos.y+DetectorScale.y),'g');%画前列线
                    plot((SubImgStPos.x+DetectorScale.x)*ones(1,DetectorScale.y+1),SubImgStPos.y:(SubImgStPos.y+DetectorScale.y),'g');
                    imwrite(SubIm,'lp.jpg');
                elseif ResultH == 0
                    msgbox('this is a BackGard image','image classify');
                end
                SubImgStPos.x = SubImgStPos.x + k * DetectorScale.x;% k 根据调试情况而定
        end
        SubImgStPos.y = SubImgStPos.y + k * DetectorScale.y;
    end
    DetectorScale.x = 1.25 * DetectorScale.x; %1.25 根据调试情况而定
    DetectorScale.y = 1.25 * DetectorScale.y;
end
        
%%%%%%%%%%%%%%%%%%Y方向的微分图像检测结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%针对X方向的微分图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%X方向的微分图像检测结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%以下求两个被圈矩形的交集%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%定位出车牌%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


    


    
 

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/113878248