www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I5_04_4_myHOGDigitClassification_Tree.m
%% HOG (Histogram of Oriented Gradient) 摿挜検 偲 % 寛掕栘乮2暘栘乯 傪巊偭偨丄庤彂偒悢帤偺幆暿 clear;clc;close all;imtool close all % 僩儗乕僯儞僌夋憸乮101枃x10暥帤庬乯偲僥僗僩夋憸乮12枃x10暥帤庬乯傊偺愨懳僷僗傪愝掕 pathData = [toolboxdir('vision'), '\visiondata\digits'] trainSet = imageSet([pathData,'\synthetic' ], 'recursive'); testSet = imageSet([pathData,'\handwritten'], 'recursive'); %% 慡僩儗乕僯儞僌梡夋憸椺偺昞帵 figure;montage([trainSet.ImageLocation], 'Size', [26 40]); %% 慡僥僗僩夋憸傪儌儞僞乕僕儏昞帵 (12枃 x 10暥帤庬丗奺庤彂偒悢帤傪擣幆) figure;montage([testSet(:).ImageLocation], 'Size', [10,12]); %% 4x4偺僙儖僒僀僘傪巊梡 (324師尦儀僋僩儖) cellSize = [4 4]; hogFeatureSize = 324; % length(hog_4x4) %% [暘椶栘偺峔抸]丗fitctree傪巊梡 % 10暥帤暘偺trainingFeatures 傪奿擺偡傞攝楍傪偁傜偐偠傔嶌惢 trainingFeatures = zeros(10*101,hogFeatureSize, 'single'); trainingLabels = zeros(10*101,1); % HOG摿挜検傪拪弌 for digit = 0:9 % 暥帤'0'乣'9' for i = 1:101 % 奺悢帤偛偲偵101枃偺僩儗乕僯儞僌梡夋憸 img = read(trainSet(digit+1), i); %僩儗乕僯儞僌夋憸偺撉崬傒 trainSet()偼丄1偐傜巒傑傞偺偱丄+1 img = im2bw(img,graythresh(img)); % 擇抣壔 trainingFeatures((digit)*101+i,:) = extractHOGFeatures(img,'CellSize',cellSize); trainingLabels((digit)*101+i) = digit; end end % 暘椶栘偺妛廗 treeModel = fitctree(trainingFeatures, trainingLabels, 'MaxNumSplits',4) %% 暘椶僣儕乕價儏乕傾乕偱丄惗惉偟偨僣儕乕傪昞帵 % x斣崋偼丄摿挜検偺斣崋 view(treeModel, 'mode','graph'); %% [幆暿] 嶌惉偟偨暘椶婍偱庤彂偒悢帤(120枃)傪幆暿\帵丗predict() Ir = zeros([16,16,3,120], 'uint8'); % 寢壥傪奿擺偡傞攝楍 cntTrue = 0; for digit = 0:9 % for i = 1:12 % 奺悢帤偛偲偵12枃偺庤彂偒暥帤 img = read(testSet(digit+1), i); % testSet()偼丄1偐傜巒傑傞偺偱丄+1 BW = im2bw(img,graythresh(img)); % 2抣壔 testFeatures = extractHOGFeatures(BW,'CellSize',cellSize); predictedNum = predict(treeModel, testFeatures); % testFeature 傪攝楍偵偟偰丄偁偲偱傑偲傔偰敾掕傕壜 if predictedNum == digit %惓偟偄幆暿偼惵怓丄岆擣幆偼愒怓 Ir(:,:,:,digit*12+i) = insertText(img,[6 4],num2str(predictedNum),'FontSize',9,'TextColor','blue','BoxOpacity',0.4); cntTrue = cntTrue+1; else Ir(:,:,:,digit*12+i) = insertText(img,[6 4],num2str(predictedNum),'FontSize',9,'TextColor','red','BoxOpacity',0.4); end end end % 寢壥偺昞帵 figure;montage(Ir, 'Size', [10,12]); title(['Correct Prediction: ' num2str(cntTrue)]); %% %% 傾儞僒儞僽儖妛廗 (ClassificationBaggedEnsemble 僋儔僗偑曉傞) % 僶僊儞僌寛掕栘 => 儔儞僟儉僼僅儗僗僩 傾儖僑儕僘儉傪巊梡 template = templateTree('MaxNumSplits', 20); bagModel = fitcensemble(... trainingFeatures, trainingLabels, ... 'Method', 'Bag', ... 'NumLearningCycles', 30, 'Learners', template); %% bagModel.Trained偼丄 CompactClassificationTree僋儔僗偺僙儖攝楍 % Children : 僲乕僪斣崋弴偵丄偦偺僲乕僪偑偮側偑偭偰偄傞2偮偺僲乕僪斣崋丅廔抂僲乕僪偵娭偟偰偼0 0 偑擖傞 % CutPredictor : 奺僲乕僪偱偺暘婒偵梡偄傞摿挜検斣崋 % CutPoint : 暘婒偺鑷抣 (廔抂僲乕僪偵娭偟偰偼丄NaN偑擖傞) % NodeClass : 奺僲乕僪偱偺暘椶偝傟偨僋儔僗 view(bagModel.Trained{3}) view(bagModel.Trained{3}, 'mode','graph') %% 暘椶妛廗婍傾僾儕働乕僔儑儞偺巊梡 % 僶僊儞僌寛掕栘偼丄儔儞僟儉僼僅儗僗僩 % 峔憿懱偺儊儞僶乕偲偟偰丄ClassificationEnsemble (CompactClassificationEnsemble僋儔僗) 偑曉傞 % 奺ClassificationEnsemble.Trained{k}偑丄CompactClassificationTree僋儔僗偺僆僽僕僃僋僩 dataTable = table(trainingFeatures, trainingLabels, 'VariableNames',{'features', 'label'}); % 1x324 偺摿挜儀僋僩儖 + 儔儀儖 偑丄200峴 openvar('dataTable'); classificationLearner % 僐儞僷僋僩儌僨儖偺僄僋僗億乕僩丗trainedClassifier view(trainedClassifier.ClassificationEnsemble.Trained{1}, 'mode','graph') %% [幆暿] 嶌惉偟偨暘椶婍偱庤彂偒悢帤(120枃)傪幆暿\帵丗trainedClassifier.predictFcn() Ir = zeros([16,16,3,120], 'uint8'); % 寢壥傪奿擺偡傞攝楍 cntTrue = 0; for digit = 0:9 % for i = 1:12 % 奺悢帤偛偲偵12枃偺庤彂偒暥帤 img = read(testSet(digit+1), i); % testSet()偼丄1偐傜巒傑傞偺偱丄+1 BW = im2bw(img,graythresh(img)); % 2抣壔 features = extractHOGFeatures(BW,'CellSize',cellSize); predictedNum = trainedClassifier.predictFcn(table(features)); % testFeature 傪攝楍偵偟偰丄偁偲偱傑偲傔偰敾掕傕壜 if predictedNum == digit %惓偟偄幆暿偼惵怓丄岆擣幆偼愒怓 Ir(:,:,:,digit*12+i) = insertText(img,[6 4],num2str(predictedNum),'FontSize',9,'TextColor','blue','BoxOpacity',0.4); cntTrue = cntTrue+1; else Ir(:,:,:,digit*12+i) = insertText(img,[6 4],num2str(predictedNum),'FontSize',9,'TextColor','red','BoxOpacity',0.4); end end end % 寢壥偺昞帵 figure;montage(Ir, 'Size', [10,12]); title(['Correct Prediction: ' num2str(cntTrue)]); %% Copyright 2013-2014 The MathWorks, Inc. % 夋憸僨乕僞僙僢僩 % 僩儗乕僯儞僌夋憸丗insertText娭悢偱帺摦嶌惉 (廃埻偵暿偺悢帤桳傝) % 僥僗僩夋憸丗庤彂偒偺夋憸傪巊梡