小白记录:补充书上没有的特征检测与匹配的内容:HOG特征检测

一.对于HOG特征原理的理解
参考:https://bbs.csdn.net/topics/391911195?page=1
HOG的核心思想是所检测的局部物体外形能够被光强梯度或边缘方向的分布所描述。通过将整幅图像分割成小的连接区域(称为cells),每个cell生成一个方向梯度直方图或者cell中pixel的边缘方向,这些直方图的组合可表示出(所检测目标的目标)描述子。为改善准确率,局部直方图可以通过计算图像中一个较大区域(称为block)的光强作为measure被对比标准化,然后用这个值(measure)归一化这个block中的所有cells.这个归一化过程完成了更好的照射/阴影不变性。
与其他描述子相比,HOG得到的描述子保持了几何和光学转化不变性(除非物体方向改变)。因此HOG描述子尤其适合人的检测。
通俗的讲:
HOG特征提取方法就是将一个image:
灰度化(将图像看做一个x,y,z(灰度)的三维图像)
划分成小cells(22)
计算每个cell中每个pixel的gradient(即orientation)
统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor
再小谈下Hog、SIFT与PCA-SIFT的应用与区别:
Hog没有旋转和尺度不变性,因此计算量小;而SIFT中每个feature需要用128维的向量来描述,因此计算量相对很大。
那么行人检测中怎么应用HOG呢?
对于解决Scale-invariant 的问题:将图片进行不同尺度的缩放,就相当于对模板进行不同尺度scale的缩放。
对于解决Rotation-invariant 的问题:建立不同方向的模版(一般取15
7的)进行匹配。
总的来说,就是在不同尺度上的图像进行不同方向的模板(15*7)匹配,每个点形成一个8方向的梯度描述。

二.API的介绍
https://www.cnblogs.com/long5683/p/9735903.html

三.HOG的最大作用
Hog+SVM 行人检测
https://blog.csdn.net/andylanzhiyong/article/details/84678447

#include <iostream>
#include "opencv2/opencv.hpp" 
using namespace cv;
using namespace std; 

int main(int argc, char** argv) 
{
	Mat src = imread("E:\\pictures\\38.jpg"); 
 	if (src.empty()) 
 	{
 		cout << "图片读取错误!" << endl;  
  		return -1; 
 	}
 	HOGDescriptor hog = HOGDescriptor(); 
 	hog.setSVMDetector(hog.getDefaultPeopleDetector());  
 	vector<Rect> foundLocations; 
 	hog.detectMultiScale(src, foundLocations, 0, Size(8, 8), Size(32, 32), 1.05, 2); 
 	Mat result = src.clone(); 
 	for (size_t t = 0; t < foundLocations.size(); t++)
 	{
 		//将找到的行人用矩形框表现出来
 		rectangle(result, foundLocations[t], Scalar(0, 0, 255), 2, 8, 0);
 	}
 	imshow("HOG SVM Detector Demo", result);  
 	waitKey(); 
 	return 0;
}

输出图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值