91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 9KB
    文件類型: .m
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-12
  • 語言: Matlab
  • 標簽: HOG特征??

資源簡介

HOG特征 matlab代碼實現,可以實現,很不錯的!強烈推薦給初學者,上學的時候,結合論文,看代碼,非常實用

資源截圖

代碼片段和文件信息

%Matlab版HOG代碼
function?F?=?hogcalculator(img?cellpw?cellph?nblockw?nblockh...
????nthet?overlapissigned?normmethod);

%?HOG特征由Dalal在2005?cvpr?的一篇論文中提出

%?NORMMETHOD:重疊塊中的特征標準化函數的方法
%???????e為一個設定的很小的數使分母不為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?????%?在DALAL論文中指出的在rows:128*columns:64情況下的最佳值,設定為DEFAULT
????cellpw?=?8;
????cellph?=?8;
????nblockw?=?2;
????nblockh?=?2;
????nthet?=?9;
????overlap?=?0.5;
????issigned?=?‘unsigned‘;
????normmethod?=?‘l2hys‘;
else
????if?nargin?????????error(‘輸入參數不足.‘);
????end
end

[M?N?K]?=?size(img);??%M為行數,N為列數,K為維數
if?mod(Mcellph*nblockh)?~=?0???%行數必須為塊的高度的整數倍
????error(‘圖片行數必須為塊的高度的整數倍.‘);
end
if?mod(Ncellpw*nblockw)?~=?0???%列數必須為塊的寬度的整數倍
????error(‘圖片列數必須為塊的寬度的整數倍.‘);
end?????????????????????????????
if?mod((1-overlap)*cellpw*nblockw?cellpw)?~=?0?||...??%要使滑步后左邊是整數
????????mod((1-overlap)*cellph*nblockh?cellph)?~=?0
????error(‘滑步的像素個數必須為細胞單元尺寸的整數倍‘);
end

%設置高斯空間權值窗口的方差
delta?=?cellpw*nblockw?*?0.5;


%計算梯度矩陣??梯度的計算【-1,0,1】效果是很好的,而3*3的sobel算子或者2*2的對角矩陣反而會系統的降低效果
hx?=?[-101];
hy?=?-hx‘;???%轉置
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的區間取值從-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?????????gradorient(idx)?=?atan(gradscaly(idx)./gradscalxplus(idx))?+?pi;
????????idx?=?find(gradscalx?>=?0?&?gradscaly?????????gradorient(idx)?=?atan(gradscaly(idx)./gradscalxplus(idx))?+?2*pi;
????????or?=?2;
????else
?????%??error(‘Incorrect?ISSIGNED?parameter.‘);
????????error(‘參數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;

%?塊總數=ntotalbh*ntotalbw
ntotalbh?=?((M-cellph*nblockh)/ybstride)+1;?%除了第一個,后面每

評論

共有 條評論