项目代码matlab
2015-11-03 14:12
197 查看
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 可调参数 test_path=''; neighbour_pixels_affect=3; target_digit=2; % forestTrain()参数设置 % .M - [1] number of trees to train % .H - [max(hs)] number of classes % .N1 - [5*N/M] number of data points for training each tree % .F1 - [sqrt(F)] number features to sample for each node split % .split - ['gini'] options include 'gini', 'entropy' and 'twoing' % .minCount - [1] minimum number of data points to allow split % .minChild - [1] minimum number of data points allowed at child nodes % .maxDepth - [64] maximum depth of tree % .dWts - [] weights used for sampling and weighing each data point % .fWts - [] weights used for sampling features % .discretize - [] optional function mapping structured to class labels % format: [hsClass,hBest] = discretize(hsStructured,H); varargin.M=1000; %varargin.H=10; % forestApply()的输入设置 % data - [NxF] N length F feature vectors % forest - learned forest classification model % maxDepth - [] maximum depth of tree % minCount - [] minimum number of data points to allow split % best - [0] if true use single best prediction per tree % forestApply()输出结果及对比的阀值 % hs - [Nx1] predicted output labels % ps - [NxH] predicted output label probabilities ps_val_more_than0_3=0.2; %滑窗检测,窗口尺度,步长 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% data=[]; label=[]; temp_r1=0; temp_c1=0; for i_digit=0:9 % if(i_digit==target_digit) %%%%%%%%%%%%%%%%%%%%%% % this_image_label=1; % end %数字转字符 str=num2str(i); %%数据是不是不平衡 path_temp=strcat('C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\trainingSample\num',str,'\'); file=dir(path_temp); for i=3:length(file) path= strcat(path_temp,file(i).name); %%%%%%%%%%%%%%%%%%%%%%%%%% % 加载图片 %%%%%%%%%%%%%%%%%%%%%%%%%% I=imread(path); %I=imread('E:/WeChat.jpg'); %%%%%%%%%%%%%%%%%%%%%%%%%% % 提取channel features %%%%%%%%%%%%%%%%%%%%%%%%%% [all_channel_difference_features,temp_r1,temp_c1]=extract_features(I,1); data=[data,all_channel_difference_features]; label=[label;i_digit+1]; % if(i>100 && this_image_label~=1) %%这里只取了前100帧,实际上可以随意抽取一百张 % break; % end end % for i=3:length(file) end % for i_digit=0:9 %%%%%%%%%%%%%%%%%%%%%%%%%% % 扔进分类器中,训练 %%%%%%%%%%%%%%%%%%%%%%%%%% forest = forestTrain( data, label, varargin ); %%%%%%%%%%%%%%%%%%%%%%%%%% % 检测,测试 test_image=imread(test_path); %滑窗检测,窗口尺度,步长 [test_r,test_c,test_z]=size(test_image); for i_test=1:test_r %model %resize test_image=imresize(model,temp_r1,temp_c1); test_data=extract_features(test_image,1); [hs,ps] = forestApply( test_data, forest, [], [], [] );%尺度问题 if(ps>ps_val_more_than0_3) %画框 end end %%%%%%%%%%%%%%%%%%%%%%%%%%
function [ all_channel_difference_features,,r1,c1 ] = extract_features( I,shrink_or_not ) %EXTRACT_FEATURES 此处显示有关此函数的摘要 % 此处显示详细说明 %%%%%%%%%%%%%%%%%%%%%%%%%% % 提取channel features %%%%%%%%%%%%%%%%%%%%%%%%%% % 参数设置 if(shrink_or_not==1) pChns.shrink=4; end pChns.pColor.enabled=1; pChns.pColor.smooth=1; pChns.pColor.colorSpace='luv'; pChns.pGradMag.enabled=1; pChns.pGradMag.colorChn=0; pChns.pGradMag.normRad=5; pChns.pGradMag.normConst=.005; pChns.pGradMag.full=0; pChns.pGradHist.enabled=1; %pChns.pGradHist.binSize= pChns.pGradHist.nOrients=6; pChns.pGradHist.softBin=0; pChns.pGradHist.useHog=0; pChns.pGradHist.clipHog=.2; %pChns.pCustom.** %pChns.complete= % 提取channel features chns = chnsCompute( I, pChns ); % 将各个通道放在矩阵中 [r1,c1,ch1]=size(chns.data{1}); [r2,c2,ch2]=size(chns.data{2}); [r3,c3,ch3]=size(chns.data{3}); ch=ch1+ch2+ch3; all_channel=zeros(r1,c1,ch); all_channel(:,:,1:ch1)=chns.data{1}; all_channel(:,:,ch1+1:ch1+ch2)=chns.data{2}; all_channel(:,:,ch1+ch2+1:ch)=chns.data{3}; %%%%%%%%%%%%%%%%%%%%%%%%%% % pooling %%%%%%%%%%%%%%%%%%%%%%%%%% for ii=1:ch %向下采样 all_pooling(:,:,ii)=imresize(all_channel(:,:,ii),0.2); end %%%%%%%%%%%%%%%%%%%%%%%%%% % 再次做相减特征 %%%%%%%%%%%%%%%%%%%%%%%%%% all_channel_difference_features=[]; for ij=1:ch temp=difference_features( all_pooling(:,:,ij),neighbour_pixels_affect ); all_channel_difference_features = [all_channel_difference_features;temp]; end end
function [ one_channel_difference_features ] = difference_features( one_channel_features,neighbour_pixels_affect ) %DIFFERENCE_FEATURES 计算邻域内个特征之间两两相减 %input: % one_channel_features %neighbour_pixels_affect %output: %one_channel_difference_features [r,c]=size(one_channel_features); one_channel_difference_features=[]; for i=1:r-neighbour_pixels_affect+1 for j=1:c-neighbour_pixels_affect+1 local_features=one_channel_features(i:i+neighbour_pixels_affect-1,j:j+neighbour_pixels_affect-1); temp=local_feature_compute(local_features); one_channel_difference_features=[one_channel_difference_features;temp];%特征拼接 end end end function [ local_differece_feature ]=local_feature_compute( local_features ) [r,c]=size(local_features); result_mat=local_features-local_features(1,1).*ones(r,c); result_vector=reshape(result_mat,r*c,1); local_differece_feature=result_vector(2:r*c,1);%把第一个特征去掉,自己减自己没有任何特征信息可言 end
%{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 可调参数 test_path='C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\OCR\one\3.jpg'; neighbour_pixels_affect=3; target_digit=2; % forestTrain()参数设置 % .M - [1] number of trees to train % .H - [max(hs)] number of classes % .N1 - [5*N/M] number of data points for training each tree % .F1 - [sqrt(F)] number features to sample for each node split % .split - ['gini'] options include 'gini', 'entropy' and 'twoing' % .minCount - [1] minimum number of data points to allow split % .minChild - [1] minimum number of data points allowed at child nodes % .maxDepth - [64] maximum depth of tree % .dWts - [] weights used for sampling and weighing each data point % .fWts - [] weights used for sampling features % .discretize - [] optional function mapping structured to class labels % format: [hsClass,hBest] = discretize(hsStructured,H); varargin.M=1000; %varargin.H=10; % forestApply()的输入设置 % data - [NxF] N length F feature vectors % forest - learned forest classification model % maxDepth - [] maximum depth of tree % minCount - [] minimum number of data points to allow split % best - [0] if true use single best prediction per tree % forestApply()输出结果及对比的阀值 % hs - [Nx1] predicted output labels % ps - [NxH] predicted output label probabilities ps_val_more_than0_3=0.2; %滑窗检测,窗口尺度,步长 win_h=20; win_w=20; step=1; disp('参数配置成功...'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% disp('正在读入图片及特征提取...'); %读入图片及特征提取 data=[]; label=[]; temp_r1=0; temp_c1=0; for i_digit=0:9 % if(i_digit==target_digit) %%%%%%%%%%%%%%%%%%%%%% % this_image_label=1; % end %数字转字符 str=num2str(i_digit); %%数据是不是不平衡 path_temp=strcat('C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\trainingSample\num',str,'\'); file=dir(path_temp); for i=3:length(file) path= strcat(path_temp,file(i).name); %%%%%%%%%%%%%%%%%%%%%%%%%% % 加载图片 %%%%%%%%%%%%%%%%%%%%%%%%%% I=imread(path); %I=imread('E:/WeChat.jpg'); %%%%%%%%%%%%%%%%%%%%%%%%%% % 提取channel features %%%%%%%%%%%%%%%%%%%%%%%%%% [all_channel_difference_features,temp_r1,temp_c1]=extract_features(I,neighbour_pixels_affect,1); data=[data,all_channel_difference_features]; label=[label;i_digit+1]; if(rem(i,100)==0) disp('...'); end end % for i=3:length(file) disp('数字') i_digit disp('的特征提取完毕...'); end % for i_digit=0:9 disp('读入图片及特征提取完毕...'); %%%%%%%%%%%%%%%%%%%%%%%%%% % 扔进分类器中,训练 %%%%%%%%%%%%%%%%%%%%%%%%%% data=data'; disp('正在训练,请稍等...'); forest = forestTrain( data, label, varargin ); disp('训练完毕...'); %} %%%%%%%%%%%%%%%%%%%%%%%%%% % 检测,测试 test_label=[]; test_label_p=[]; win_h=40; win_w=30; windSize = [30,40]; step=2; ps_val_more_than0_3=0.07; disp('正在检测...'); test_image=imread(test_path); %滑窗检测,窗口尺度,步长 [test_r,test_c,test_z]=size(test_image); figure; imshow(test_image); hold on for i_test=1:step:test_r-win_h+1 for j_test=1:step:test_c-win_w+1 %model model=test_image(i_test:i_test+win_h-1,j_test:j_test+win_w-1,:); %resize test_image_rs=imresize(model,[temp_r1 temp_c1]); test_data=extract_features(test_image_rs,neighbour_pixels_affect,0); test_data=test_data'; test_data=single(test_data); [hs,ps] = forestApply( test_data, forest,0,0,1);%尺度问题 test_label=[test_label,hs]; test_label_p=[test_label_p,ps(hs)]; if(ps>ps_val_more_than0_3) %画框 %draw_rect(test_image,); i_test j_test rectangle('Position',[i_test,j_test,20,20],'LineWidth',4,'EdgeColor','r'); %pointAll = [i_test,j_test]; %[state,results]=draw_rect(test_image,pointAll,windSize); hold on end end hold on end disp('检测完毕!恭喜恭喜!') %%%%%%%%%%%%%%%%%%%%%%%%%%
相关文章推荐
- matlab double axes, 两个坐标轴 papa的儿子,儿子的papa
- Matlab 三维图像绘制(1)——纹理贴图、球体
- libsvm在matlab和Python上的探索
- MATLAB实现坐标系变换动画演示
- 新版Matlab中函数aviread报错问题
- c# 调用 matlab
- 在win7下如何以兼容模式运行matlab
- 遗传算法的matlab实现
- MATLAB函数汇总
- 关于Matlab中avi视频的读取问题
- RCNN 安装编译与MATLAB2014下问题解决
- Matlab使用技巧
- MATLAB 循环移位序列,二进制的按位循环右移/左移
- matlab中的灰度共生矩阵相关函数用法
- matlab bar的用法简介
- matlab中用imwrite()保存图像
- matlab magic
- 用MATLAB制作GIF
- 英文版Windows 10中MATLAB中文字符乱码的问题
- matlab 函数头注释规范