資源簡介
經(jīng)典的行人檢測算法,利用HOG和SVM實現(xiàn)此算法。已調(diào)試可以正常運行。

代碼片段和文件信息
%Matlab版HOG代碼
function?F?=?hogcalculator(img?cellpw?cellph?nblockw?nblockh...
????nthet?overlapissigned?normmethod);
%?HOG特征由Dalal在2005?cvpr?的一篇論文中提出
%?NORMMETHOD:重疊塊中的特征標準化函數(shù)的方法
%???????e為一個設(shè)定的很小的數(shù)使分母不為0
%???????v為標準化前的特征向量
%???????‘none‘?which?means?non-normalization;
%???????‘l1‘?which?means?L1-norm?normalization;?V=V/(V+e)
%???????‘l2‘?which?means?L2-norm?normalization;?V=V/根號(V平方+e平方)
%???????‘l1sqrt‘V=根號(V/(V+e))
%???????‘l2hys‘l2的省略形式。將V最大值限制為0.2
if?nargin?2
????%?在DALAL論文中指出的在rows:128*columns:64情況下的最佳值,設(shè)定為DEFAULT
????cellpw?=?8;
????cellph?=?8;
????nblockw?=?2;
????nblockh?=?2;
????nthet?=?9;
????overlap?=?0.5;
????issigned?=?‘unsigned‘;
????normmethod?=?‘l2hys‘;
else
????if?nargin?9
????????error(‘輸入?yún)?shù)不足.‘);
????end
end
[M?N?K]?=?size(img);??%M為行數(shù),N為列數(shù),K為維數(shù)
if?mod(Mcellph*nblockh)?~=?0???%行數(shù)必須為塊的高度的整數(shù)倍
????error(‘圖片行數(shù)必須為塊的高度的整數(shù)倍.‘);
end
if?mod(Ncellpw*nblockw)?~=?0???%列數(shù)必須為塊的寬度的整數(shù)倍
????error(‘圖片列數(shù)必須為塊的寬度的整數(shù)倍.‘);
end?????????????????????????????
if?mod((1-overlap)*cellpw*nblockw?cellpw)?~=?0?||...??%要使滑步后左邊是整數(shù)
????????mod((1-overlap)*cellph*nblockh?cellph)?~=?0
????error(‘滑步的像素個數(shù)必須為細胞單元尺寸的整數(shù)倍‘);
end
%設(shè)置高斯空間權(quán)值窗口的方差
delta?=?cellpw*nblockw?*?0.5;
%計算梯度矩陣??梯度的計算【-1,0,1】效果是很好的,而3*3的sobel算子或者2*2的對角矩陣反而會系統(tǒng)的降低效果
hx?=?[-101];
hy?=?-hx‘;???%轉(zhuǎn)置
gradscalx?=?imfilter(double(img)hx);??%imfilter是濾波器,hx表示濾波掩膜
gradscaly?=?imfilter(double(img)hy);
if?K?>?1
????gradscalx?=?max(max(gradscalx(::1)gradscalx(::2))?gradscalx(::3));??%取RGB中最大值
????gradscaly?=?max(max(gradscaly(::1)gradscaly(::2))?gradscaly(::3));
end
gradscal?=?sqrt(double(gradscalx.*gradscalx?+?gradscaly.*gradscaly));??%梯度矩陣?gradscal
%?計算梯度方向矩陣
gradscalxplus?=?gradscalx+ones(size(gradscalx))*0.0001;??%防止為0,所以gradscalx加了0.0001
gradorient?=?zeros(MN);?????????????????????????????????%初始化梯度方向矩陣
%?unsigned?situation:?orientation?region?is?0?to?pi.
if?strcmp(issigned?‘unsigned‘)?==?1?????????????????????%無向的情況
????gradorient?=...
????????atan(gradscaly./gradscalxplus)?+?pi/2;???????????%加pi/2因為atan的區(qū)間取值從-pi/2開始
????or?=?1;
else
????%?signed?situation:?orientation?region?is?0?to?2*pi.?%有向的情況
????if?strcmp(issigned?‘signed‘)?==?1
????????idx?=?find(gradscalx?>=?0?&?gradscaly?>=?0);
????????gradorient(idx)?=?atan(gradscaly(idx)./gradscalxplus(idx));
????????idx?=?find(gradscalx?0);
????????gradorient(idx)?=?atan(gradscaly(idx)./gradscalxplus(idx))?+?pi;
????????idx?=?find(gradscalx?>=?0?&?gradscaly?0);
????????gradorient(idx)?=?atan(gradscaly(idx)./gradscalxplus(idx))?+?2*pi;
????????or?=?2;
????else
?????%??error(‘Incorrect?ISSIGNED?parameter.‘);
????????error(‘參數(shù)ISSIGNED輸入有誤‘);
????end
end
%?計算塊的滑步
xbstride?=?cellpw*nblockw*(1-overlap);???%x方向的滑步
ybstride?=?cellph*nblockh*(1-overlap);
xbstridend?=?N?-?cellpw*nblockw?+?1;?????%x方向塊左角能達到的最大值
ybstridend?=?M?-?cellph*nblockh?+?1;
%?塊總數(shù)=ntotalbh*ntotalbw
ntotalbh?=?((M-cellph*nblockh)/ybstride)+1;?%除了第一個,后面每
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????42770??2011-10-30?21:59??pedestrain\alpha.mat
?????文件????????173??2011-10-30?21:59??pedestrain\bias.mat
?????文件???????9572??2011-05-11?18:32??pedestrain\HOG.m
?????文件???????3809??2013-01-18?11:51??pedestrain\main.asv
?????文件???????3811??2011-10-21?15:40??pedestrain\main.m
?????文件????????290??2011-05-14?15:28??pedestrain\myplot.m
?????文件????????211??2011-11-04?16:42??pedestrain\narrowarray.mat
?????文件???????1072??2013-01-17?20:31??pedestrain\newSVM.asv
?????文件???????1072??2011-10-30?22:46??pedestrain\newSVM.m
?????文件????????176??2011-10-30?21:59??pedestrain\nsv.mat
?????文件?????234689??2011-05-12?14:43??pedestrain\people0.png
?????文件?????234689??2011-05-12?14:43??pedestrain\postive\people0.png
?????文件?????234689??2011-05-12?14:43??pedestrain\postive\people0_2.png
?????文件?????234689??2011-05-12?14:43??pedestrain\postive\people0_3.png
?????文件?????234689??2011-05-12?14:43??pedestrain\postive\people0_4.png
?????文件???????1556??2011-05-15?15:42??pedestrain\readimg2.m
?????文件????????965??2011-10-28?21:50??pedestrain\readneg.m
?????文件????????983??2013-01-18?11:51??pedestrain\readpos.asv
?????文件????????984??2011-10-28?20:37??pedestrain\readpos.m
?????文件????1279012??2013-01-17?17:25??pedestrain\testvector.mat
?????文件????????815??2013-01-17?22:51??pedestrain\TSVM.asv
?????文件????????803??2013-01-17?22:54??pedestrain\TSVM.m
?????目錄??????????0??2013-01-24?17:20??pedestrain\postive
?????目錄??????????0??2013-01-18?10:28??pedestrain
-----------?---------??----------?-----??----
??????????????2521519????????????????????24
評論
共有 條評論