HOG特征的理解

HOG特征

有关HOG特征的介绍、详解、代码在网上都能找到很多。我是在处理车牌识别中字符识别问题时,无意之中接触到HOG特征算法的,当时赶时间完成作业,正愁于如何对数字和字母,以及部分汉子提取特征,以便能够准确地实现识别的功能。一看到HOG特征,让我眼前一亮,虽然算法是设计用来识别行人的,但用来识别字符肯定一样十分有效。

我对HOG的一些理解:

HOG算法的核心思想就是利用物体表面的光强或边缘方向的分布可以描述整个物体,利用HOG算法提取的特征实质就是图像的光强和边缘方向的分布。HOG算法的具体操作就是将图像分割成很多小的连接区域,在每个小的区域之中生产多个方向梯度直方图或像素点的边缘方向,图像所有的这些区域的方向梯度直方图或像素点边缘方向就构成了图像的描述子HOGDescriptor,这个描述子即可作为识别该图像物体的特征向量。
Opencv中HOG算法在实现过程中,采用窗口移动的方法对整幅图进行计算,每个窗口中又有块,块由四个小区域组成,块在窗口中移动,块遍历完整个窗口后,窗口在移动,直到整个图片被计算完。具体如下图所示:
这里写图片描述

窗口大小为28*28,使用opencv中的函数,实现HOG特征的提取并将其由vector保存到cvMat的代码实现如下:
其中img[i]是要提取HOG特征和保存特征的图片。

IplImage* trainTempImg=cvCreateImage(cvSize(28,28),8,1); 
cvZero(trainTempImg);      
    cvResize(img[i],trainTempImg);
    HOGDescriptor *hog=new HOGDescriptor(cvSize(28,28),cvSize(14,14),cvSize(7,7),cvSize(7,7),9);         
    vector<float>descriptors;   //结果数组         
    hog->compute(trainTempImg, descriptors,Size(1,1), Size(0,0));
    CvMat* SVMtrainMat=cvCreateMat(1,descriptors.size(),CV_32FC1);      
    int n=0;
    //将特征保存到MAT中
    for(vector<float>::iterator iter=descriptors.begin();iter!=descriptors.end();iter++)      
    {      
        cvmSet(SVMtrainMat,0,n,*iter);      
        n++;      
    }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值