首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用hog实现opencv

使用hog实现opencv
EN

Stack Overflow用户
提问于 2014-10-08 10:01:13
回答 2查看 2.2K关注 0票数 0

我想使用hog实现的opencv,以检测身体在图像。我在opencv的文件夹示例中发现了peopledetect.cpp,它是使用预训练模型的hog算法的默认实现。稍微谷歌一下,我发现这种默认的方法不能令人满意地工作。我必须使用libSvm创建自己的模型。我的第一个问题是有任何教程或例子来解释这个过程吗?第二,我的模特应该学些什么?我要做什么训练样本?只包含人的图片?

编辑问题:是否有机会培养一种只包含人体图像的一级模型?我正在努力理解代码在这里。它计算了一个数据库的hog特性,并训练了一个svm模型。在评价过程中,采用了hog级联和detectMultiScale。detectMultiScale与支持向量机的关系是什么?

我用从这里开始提供的图像训练了一个带有线性内核的libsvm。图像有两种,一种是包含人的,一种是没有人的。训练结果接近98%( svm_predict)。如何定位人体在测试图像中的位置?我能用多尺度探测来达到这个目的吗?用svm模型馈电多尺度函数?在我的svm模型中,我注意到一些支持向量在行的乞讨中没有标签,但是只有符号。这是正常的事情还是可能是个窃听器?

它似乎对我不起作用(图像中的F.E):

代码语言:javascript
复制
CascadeClassifier body_cascade;
body_cascade.load("cascades/hogcascade_pedestrians.xml");    
Mat image, gray_image;
image = imread( fileName, 1 );
resize(image, image, Size(150, 200));

vector<Rect> bodies;
cvtColor(image, gray_image, CV_BGR2GRAY);
body_cascade.detectMultiScale( gray_image, bodies, 1.3, 5 );
cout << "size of detection" << bodies.size() << endl;

每次我都有0具身体。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-08 14:09:18

  1. 拍一堆包含人的照片。你需要所有的人在他们周围标记一个长方形。
  2. 将这些ROIs转换为HOG功能(这些将是积极的培训数据)。同时将非人物区域的图像转换成HOG特征(负面的训练数据)。HOG的特征必须是相同的维度。在相关的论文中找出最优的参数,即每个矩形的HOG单元数,每个HOG单元的维数(31个正常值)。这要求所有矩形具有相同的长宽比(我认为)。
  3. 训练分类器。您的培训数据是您在上一步中计算出来的所有特性,您的标签是+1表示正面培训数据( HOG功能引用人员)和-1表示负面培训数据。您可以将这两个都传递给libsvm。再读一遍报纸,看看他们用来训练支持向量机的参数。我猜它是一个线性支持向量机,它有潜在的L1距离度量,因为HOG是很大程度上的直方图,而直方图与L2范数不太一致。但那只是猜测。
  4. Libsvm将返回一个模型。您应该通过测量测试数据的精确度/召回量来测试它有多好。(或测量中华民国,或任何你想要的)。Libsvm也有这方面的功能。
票数 2
EN

Stack Overflow用户

发布于 2014-10-08 13:00:42

  1. 这个程序在纸上是很直接的.从图像中提取HOG特征,创建一个训练向量,分配一个标签并给分类器学习。将是一个很好的实验场所。我不知道有多有效,但它绝对是一个很好的来源。还有一些智慧这里
  2. 你的模型应该是为了了解一个人的形象的猪特征。一个训练样本是HOG特征向量(而不是直接图像本身)。对于负面类来说,它将再次从不包含人的图像中获取大量功能。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26254181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档