**:
opencv demo演示見本人的另一篇灌水部落格
本人原始碼分析見
參考文獻:《n. dalal and b. triggs, 「histograms of oriented gradients for human detection,」proc. ieee conf. computer vision and pattern recognition,2005.》
作者原始碼:
參考鏈結
一、基本思想
上圖是目標檢測的基本流程。
hog屬於特徵提取,它統計梯度直方圖特徵。具體來說就是將梯度方向(0->360°)劃分為9個區間,將影象化為16x16的若干個block,每個block在化為4個cell(8x8)。對每乙個cell,算出每一點的梯度方向和模,按梯度方向增加對應bin的值,最終綜合n個cell的梯度直方圖形成乙個高維描述子向量。實際實現的時候會有各種插值。
選用的分類器是經典的svm。
檢測框架為經典的滑動視窗法,即在位置空間和尺度空間遍歷搜尋檢測。
二、基本概念
原始影象打完補丁後就直接用固定的視窗在影象中移動,計算檢測視窗下的梯度,形成描述子向量,然後就直接svm了
三、hog演算法流程
演算法流程比較簡單:
1、gamma校正
r=0.5,暗區對比度提高,亮區對比度下降
2、計算梯度
微分運算元[-1 0 1],取rgb通道中模值最大的為該畫素點的梯度。
插值策略:對與該點梯度方向相鄰的兩個bin按距離進行線性插值。
3 、權值
這一部分比較複雜, 每乙個畫素點還要對cell插值。
1)f,j,g,k區域內的畫素點對四個cell都有貢獻,比如p4對cell 0 的權重是倒對稱cell中心即cell 3的「距離」 p4-cell 3 即圖中綠色虛線的「長度」,對其它cell 的權值依次類推
2)b,c,e,i,n,o,h,l區域的畫素點要對兩個cell中心插值。比如p2雖然處在cell 1中,但是對cell 0 也有貢獻,對虛線中的紅,綠兩個十字所在的cell 也有貢獻。那對cell 0的權重計算方法同p4。
取到對稱cell 中心的 「距離」,即到綠色中心的「距離」。
3)a,d,m,p,區域的點對周圍的四個cell也有貢獻,但是block覆蓋的只有乙個cell,自然只要對其本身所在的cell插值即可。比如p1,到對稱cell 中心的「距離」,即圖中的cell中心。
但是要注意:cell的編號順序是從上到下,從左到右,即(cell 0 cell 1 cell 2 cell 3)但是四個cell的偏移量儲存順序卻是(cell 0 ->cell 2 ->cell 1->cell 3)
這張圖沒畫完,也可以說有錯誤,大家參加這篇部落格吧,等找好工作了再來細改
4、歸一化
l2 hys歸一化,比較簡單
5、獲取整個檢測視窗內的所有block的梯度直方圖組成乙個很高很高維的描述子向量
用查表替代了八重迴圈,大大減少了時間開銷。
最笨的方法是依次迴圈:
1.檢測視窗在輸入影象中滑動
2.block在檢測視窗win中滑動
3.cell在block中滑動
4.在cell中迴圈獲取畫素的梯度值
每一層迴圈都是2維的這樣下來就是八重迴圈…………子子孫孫無窮盡也
作者通過預先計算好的pixdata,blockdata基本上化為了3重迴圈。
1.迴圈影象中的每乙個檢測視窗win
2.迴圈檢測視窗內的每乙個block
3.迴圈每乙個block中的畫素點,getblock()
每一層都是一維。
6、svm分類
計算到分類超平面的距離
四、hog演算法opencv實現流程
五、原始碼分析
Opencv HOG特徵與行人檢測Python實現
hog特徵與行人檢測 hog histogram of oriented gradient 特徵在物件識別與模式匹配中是一種常見的特徵提取演算法,是基於本地畫素塊進行特徵直方圖提取的一種演算法,物件區域性的變形與光照影響有很好的穩定性,最初是用hog特徵來來識別人像,通過hog特徵提取 svm訓練,...
PCL行人檢測
首先我們知道hog特徵結合svm分類器已經被廣泛應用於影象識別中,尤其在行人檢測中獲得了極大的成功 hog svm進行行人檢測的方法是法國研究人員dalal在2005的cvpr上提出的,而如今雖然有很多行人檢測演算法不斷提出,但基本都是以hog svm的思路為主,那麼pcl中也是利用這一思想來進行行...
行人檢測OpenCV ICF
最近專案中需要用到行人檢測,對比了幾種常用的演算法後,果斷選擇出自大神piotr dollar的icf integral channel features 下面開始了苦逼之旅。由於從網上down的 都是matlab版的,如果翻譯成c 的話,勞民傷財。以前就聽說opencv contrib裡整合了該演...