opemcv 計算HOG特徵

2021-07-14 13:46:18 字數 2698 閱讀 1356

#include #include #include #include using namespace cv;

using namespace std;

#define nbins 9

#define theta 180 / nbins

#define cellsize 20

#define blocksize 2

#define r (cellsize * (blocksize) * 0.5)

// 計算積分圖

std::vectorcalculateintegralhog(mat& srcmat)

mat magnmat,anglemat;

// 座標轉換

carttopolar(sobelmatx,sobelmaty,magnmat,anglemat,true);

// 角度變換

add(anglemat,scalar(180),anglemat,anglemat<0);

add(anglemat,scalar(-180),anglemat,anglemat>=180);

anglemat /= theta;

for(int y = 0; y < srcmat.rows;y++) }

// 積分影象的生成

std::vectorintegrals(nbins);

for(int i = 0; i < nbins; i++)

return integrals;

}// 計算單個cell hog特徵

void cachogincell(mat& hogcellmat,rect roi,

std::vector& integrals)

}// hog直方圖獲取

cv::mat gethog(point pt,std::vector&integrals)

// 直方圖

mat hist(size(nbins*blocksize*blocksize,1),cv_32f);

point tl(0,pt.y-r);

int c = 0;

// 遍歷塊

for(int i = 0; i < blocksize;i++)

tl.y = cellsize;

} normalize(hist,hist,1,0,norm_l2);

return hist;

}// 計算hog特徵

std::vectorcachogfeature(cv::mat srcimage)

}// l2範數歸一化

normalize(hogblockmat,hogblockmat,1,0,cv_l2);

hogmatvector.push_back(hogblockmat);

point center(x, y);

// 繪製hog特徵圖

for (int i = 0; i < nbins; i++)

}} imshow("out",image);

return hogmatvector;

}int main()

原圖

效果圖

再小談下hog、sift與pca-sift的應用與區別:

hog沒有旋轉和尺度不變性,因此計算量小;而sift中每個feature需要用128維的向量來描述,因此計算量相對很大。

那麼行人檢測中怎麼應用hog呢?

對於解決scale-invariant的問題:將進行不同尺度的縮放,就相當於對模板進行不同尺度scale的縮放

對於解決rotation-invariant 的問題:建立不同方向的模版(一般取15*7的)進行匹配

總的來說,就是在不同尺度上的影象進行不同方向的模板(15*7)匹配,每個點形成乙個8方向的梯度描述。

sift由於其龐大計算量不用與行人檢測,而pca-sift的方法過濾掉很多維度的資訊,只保留20個主分量,因此只適用於行為變化不大的物體檢測。

method

time

scale

rotation

blur

illumination

affine

sift

common

best

best

common

common

good

pca-sift

good

good

good

best

good

best

surf

best

common

common

good

best

good

hog是乙個基於梯度的直方圖提取演算法,用於人體檢測十分有效。在opencv2.2+版本裡面已經實現。

HOG引數簡介及Hog特徵維數的計算

1.hog運算元 2.hog引數簡介及hog特徵維數的計算 3.hog引數簡介及hog特徵維數的計算 梯度直方圖特徵 hog 是一種對影象區域性重疊區域的密集型描述符 它通過計算區域性區域的梯度方向直方圖來構成特徵。hog特徵結合 svm分類器已經被廣泛應用於影象識別中,尤其在行人檢測中獲得了極大的...

HOG特徵理解

hog histogram of oriented gradient 表示的是影象區域性方向梯度直方圖,主要用來進行複雜影象中的行人檢測,並且比較通用的模型是hog svm。基本思想 在影象中,區域性區域的特徵能夠 被梯度或邊緣的方向密度資訊很好的表示 本質就是邊緣的梯度資訊 思想思路 將待分析影象...

HOG特徵學習

hog方向梯度直方圖 histogram of oriented gradient,hog 特徵是一種在計算機視覺和影象處理中用來進行物體檢測的特徵描述子。它通過計算和統計影象區域性區域的梯度方向直方圖來構成特徵。其主要步驟 顏色空間歸一化 梯度計算 梯度方向直方圖 重疊塊直方圖歸一化 hog特徵。...