基于方向梯度直方图的行人检测
2014-09-12 11:02
253 查看
Dalal等提出的方向梯度直方图(HOG)是目前广泛使用的行人特征描述子。HOG刻画图像的局部梯度幅值和方向特征,基于梯度特征、对块的特征向量进行归一化处理、允许块之间相互重叠,使得对光照变化和小量的偏移有很好的鲁棒性,能有效地刻画出人体的边缘特征。
HOG的特征提取过程如下:
这个过程的基本思想是局部对象外貌和形状可以通过局部亮度梯度或边缘方向的分布来描述,甚至无需精确的知道相应的梯度和边缘位置。实际上它是这样实现的:将图像窗口分为一些小的空间区域(单元格),对每一个单元格,可以计算出关于它的像素的梯度方向或边缘方向的一维直方图,这些直方图的联合就构成了上面的描述。为了更好的实现对光照和阴影的鲁棒性,在使用它们前进行对比归一化。计算稍微大一点的空间区域(块)的局部直方图'energy',并用此结果来归一化块中的每一个单元格,此时归一化后的块即为HOG
描述子。然后便将所有块的HOG描述子构成特征向量,训练SVM 线性分类器。用一个检测窗口来扫描整幅图像,根据分类器来判断该窗口中是否为行人。
该方法分别在MIT行人数据库和'INRIA'数据库上进行了测试。MIT行人数据库为城市场景中的行人图像,包括509幅训练图像和200幅测试图像。它们基本上都是正面或背面图像,姿态范围有限,因此测试结果很完美。'INRIA' 数据库包括1805 幅64*128 的行人图像。它们通常都是站立的,但出现在各种不同方向,并且有许多不同的背景包括拥挤的背景。
MIT行人数据库下载地址:http://cbcl.mit.edu/software-datasets/PedestrianData.html
'INRIA'数据库下载地址:http://pascal.inrialpes.fr/data/human/
Opencv 2.4实现的HOG行人检测代码如下:
int main(int argc, char** argv)
{
Mat img;
img = imread("E:/Mypic/2.png");
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
namedWindow("people detector", 1);
vector<Rect> found, found_filtered;
// 检测窗口使用缺省值。
hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);
size_t i, j;
for( i = 0; i < found.size(); i++ )
{
Rect r = found[i];
// HOG 检测返回的矩形框比实际人体要稍微大些,所以我们调整其大小使输出更美观
r.x += cvRound(r.width*0.1);
r.width = cvRound(r.width*0.8);
r.y += cvRound(r.height*0.07);
r.height = cvRound(r.height*0.8);
rectangle(img, r.tl(), r.br(), cv::Scalar(0,255,0), 3);
}
imshow("people detector", img);
waitKey(0);
return 0;
}
测试图像来自'INRIA'数据库。运行结果:
从上图中可以看出在拥挤场景存在漏检,而对类似行人的柱状物可能出现错检,如上图的伞。
HOG的特征提取过程如下:
这个过程的基本思想是局部对象外貌和形状可以通过局部亮度梯度或边缘方向的分布来描述,甚至无需精确的知道相应的梯度和边缘位置。实际上它是这样实现的:将图像窗口分为一些小的空间区域(单元格),对每一个单元格,可以计算出关于它的像素的梯度方向或边缘方向的一维直方图,这些直方图的联合就构成了上面的描述。为了更好的实现对光照和阴影的鲁棒性,在使用它们前进行对比归一化。计算稍微大一点的空间区域(块)的局部直方图'energy',并用此结果来归一化块中的每一个单元格,此时归一化后的块即为HOG
描述子。然后便将所有块的HOG描述子构成特征向量,训练SVM 线性分类器。用一个检测窗口来扫描整幅图像,根据分类器来判断该窗口中是否为行人。
该方法分别在MIT行人数据库和'INRIA'数据库上进行了测试。MIT行人数据库为城市场景中的行人图像,包括509幅训练图像和200幅测试图像。它们基本上都是正面或背面图像,姿态范围有限,因此测试结果很完美。'INRIA' 数据库包括1805 幅64*128 的行人图像。它们通常都是站立的,但出现在各种不同方向,并且有许多不同的背景包括拥挤的背景。
MIT行人数据库下载地址:http://cbcl.mit.edu/software-datasets/PedestrianData.html
'INRIA'数据库下载地址:http://pascal.inrialpes.fr/data/human/
Opencv 2.4实现的HOG行人检测代码如下:
int main(int argc, char** argv)
{
Mat img;
img = imread("E:/Mypic/2.png");
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
namedWindow("people detector", 1);
vector<Rect> found, found_filtered;
// 检测窗口使用缺省值。
hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);
size_t i, j;
for( i = 0; i < found.size(); i++ )
{
Rect r = found[i];
// HOG 检测返回的矩形框比实际人体要稍微大些,所以我们调整其大小使输出更美观
r.x += cvRound(r.width*0.1);
r.width = cvRound(r.width*0.8);
r.y += cvRound(r.height*0.07);
r.height = cvRound(r.height*0.8);
rectangle(img, r.tl(), r.br(), cv::Scalar(0,255,0), 3);
}
imshow("people detector", img);
waitKey(0);
return 0;
}
测试图像来自'INRIA'数据库。运行结果:
从上图中可以看出在拥挤场景存在漏检,而对类似行人的柱状物可能出现错检,如上图的伞。
相关文章推荐
- 目标检测之行人检测(Pedestrian Detection)基于hog(梯度方向直方图)--- 梯度直方图特征行人检测、人流检测2
- 行人检测之HOG——方向梯度直方图(Histogram of Oriented Gradient)
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- 利用hog+svm(梯度方向直方图和支持向量机)实现物体检测
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- 梯度方向直方图和物体检测Histogram of Oriented Gradients and Object Detection
- opencv-ios开发笔记4 梯度方向直方图hog行人目标图像监测
- 目标检测之hog(梯度方向直方图)---hog简介0
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- 基于曲线方向(梯度)变化的角点检测方法
- HOG:用于人体检测的梯度方向直方图 Histograms of Oriented Gradients for Human Detection
- 梯度方向直方图
- HoG梯度方向直方图总结
- HOG(方向梯度直方图)