資源簡介
根據Dalal提出的HOG特征算法編寫,代碼簡單,注釋清楚,根據所處理圖像的名稱路徑修改后可生成36*105的特征向量。
代碼片段和文件信息
%?imgPathName:?圖片路徑及名稱
%?cell_size:?cell的長寬
%?nblock:?block的width及height包括的cell個數
%?overlap:?block重疊比例
%?angle:?180/360
%?bin_num:?方向bin的數目
%?weight_vote:?高斯加權投票
function?HOG?=?HOG(imgPathName?cell_size?nblock...????????????????????????%?計算圖像的HOG特征向量
???????????????overlap?angle?bin_num)
if?nargin<2
????cell_size=8;??????????????????????????????????????????????????????????????%?默認參數
????nblock=2;
????overlap=0.5;
????angle=180;
????bin_num=9;
elseif?nargin<6
????error(‘Input?parameters?are?not?enough.‘);
end
?
Img?=?imread(imgPathName);
if?size(Img3)?==?3
????G?=?rgb2gray(Img);????????????????????????????????????????????????????????%?簡化計算,直接轉換成灰度圖像
else
????G?=?Img;
end
?
[height?width]?=?size(G);
hx?=?[-101];????????????????????????????????????????????????????????????????%?計算x、y方向的梯度
hy?=?-hx‘;
grad_x?=?imfilter(double(G)hx);
grad_y?=?imfilter(double(G)hy);
grad_mag=sqrt(grad_x.^2+grad_y.^2);???????????????????????????????????????????%?計算梯度的模長
index=?grad_x==0;?????????????????????????????????????????????????????????????%?計算梯度的方向
grad_x(index)=1e-5;
YX=grad_y./grad_x;
if?angle==180
????grad_angle=?((atan(YX)+(pi/2))*180)./pi;
elseif?angle==360
????grad_angle=?((atan2(grad_ygrad_x)+pi).*180)./pi;
end
?
bin_angle=angle/bin_num;??????????????????????????????????????????????????????%?標定方向
grad_orient=ceil(grad_angle./bin_angle);
?
block_size=cell_size*nblock;??????????????????????????????????????????????????%?計算block個數
skip_step=block_size*overlap;
x_step_num=floor((width-block_size)/skip_step+1);
y_step_num=floor((height-block_size)/skip_step+1);
?
feat_dim=bin_num*nblock^2;????????????????????????????????????????????????????%?初始化HOG特征描述子
HOG=zeros(feat_dimx_step_num*y_step_num);
?
for?k=1:y_step_num
????for?j=1:x_step_num
????????x_off?=?(j-1)*skip_step+1;????????????????????????????????????????????%?block左上角坐標
????????y_off?=?(k-1)*skip_step+1;
?
????????b_mag=grad_mag(y_off:y_off+block_size-1x_off:x_off+block_size-1);????%?獲取block梯度大小與方向
????????b_orient=grad_orient(y_off:y_off+block_size-1x_off:x_off+block_size-1);
?
????????currFeat?=?BlkHOG(b_mag?b_orient?cell_sizenblock?bin_num?false);?%?當前block的HOG
????????HOG(:?(k-1)*x_step_num+j)?=?currFeat;?
????end
end
function?BlkHOG?=?BlkHOG(?b_magb_orientcell_sizenblock...?????????????????%?計算單個block的HOG特征向量
??????????????????bin_num?weight_vote)
BlkHOG=zeros(bin_num*nblock^21);
gaussian_weight=fspecial(‘gaussian‘cell_size*nblock0.5*cell_size*nblock);???%?高斯權重
for?n=1:nblock????????????????????????????????????????????????????????????????%?分割block
????for?m=1:nblock
????????x_off?=?(m-1)*cell_size+1;????????????????????????????????????????????%?cell左上角坐標
????????y_off?=?(n-1)*cell_size+1;
????????c_mag=b_mag(y_off:y_off+cell_size-1x_off:x_off+cell_size-1);?????????%?cell梯度大小與方向
????????c_orient=b_orient(y_off:y_off+cell_size-1x_off:x_off+cell_size-1);
?
????????c_feat=zeros(bi
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????3828??2013-03-19?17:05??HOG.m
- 上一篇:MMC模塊化多電平換流器直流輸電系統
- 下一篇:遺傳算法的基本理
評論
共有 條評論