Harr-like特征算法

简介:

对于Harr特征以及Adaboost的讲解,网上有很多分析,在此记录一些较好的博客。

较好的文章:

两篇原文:

1、Rapid Object Detection using a
Boosted Cascade of Simple Features

2、An Extended Set of Haar-like
Features for Rapid Object Detection

维基百科:

Viola–Jones object detection framework

小魏的修行路:

1、【OpenCV】基于Adaboost和Haar-like特征人脸识别

2、【图像处理】计算Haar特征个数

3、【图像处理】利用积分图像法快速计算Haar特征

zouxy09的博客:

目标检测的图像特征提取之(三)Haar特征

liuliu603的博客:

Haar特征与积分图

当然对于24x24子窗口内,harr特征个数的计算到底是18K左右还是16K左右,依然是有争论:

Viola-Jones‘ face detection claims 180k features

Harr特征:

下面就Harr特征也来说说我的理解,以人脸检测为例,如有失误的地方,还请多多指教。此处不去介绍积分图像、Adaboost级联分类器,Harr特征个数(我也没去推导)的计算等等。

对于一副待检测图像,目的是要将图中的人脸标记出来。由于拍摄者的距离远近不同或者相机对焦等设置,会导致图像中人脸分辨率大小不一致,想要准确的检测图像中所有的人脸,则需要从不同的尺度、不同的位置来检测,也就是多尺度法。

多尺度法:即待检测图像的大小保持不变,逐层等比放大检测窗口,利用这些不同大小的窗口来扫描检测整幅图像。下面做详细说明。

在图像中,子窗口取24x24大小,计算当前子窗口内的Harr特征向量,特征向量就是当前子窗口的表征,把这个向量送到已经训练好了的分类器中,判定其是否为人脸。若是,则标记一下;若不是,则子窗口滑动到下24x24的位置。重复上述特征计算,一直到整幅图像24x24的子窗口从左到右、从上到下都扫描完了,也就结束了当前层(尺度)的检测。

Harr特征也称矩形特征,最初的就是下面的几种:

看了上面列出的博客,大概都知道如何利用积分图像计算Harr特征。后来演变为下面的几种:

不管矩形特征怎么变,计算方法都是一样的,只是表征子窗口的特征向量的维度发生了改变。

以第一幅图中的A、B、C、D为例,有2个两矩形的,2个三矩形的,1个四矩形的组成,再详细点就是下图:

在上图中,a是2x1大小,在24x24的子窗口中滑动,每滑动一次会有一个值,则可产生23x24个值,也就是Harr特征值;同理bcde的都可以产生若干个Harr特征值,将它们组成一个向量,这就是Harr特征向量。在图像中扫描式的取子窗口,计算特征向量,判别是否是人脸,记录下当人脸的窗口,当然这只是进行了一层(一种尺度)的检测。

在一幅图像中,有的人脸可能小,有的可能很大,24x24的窗口可能检测不到,出现漏检的情况。如下图所示。

这个时候就需要将窗口进行适当的放大了,形成一个较大的窗口,也就是另一种尺度(另一层)。放大因子取1.25效果较好,每一尺度都是上一尺度的1.25倍大小,尺度(层)的大小不能超过原始图像的大小。

当然,子窗口进行了等比例的放大,那么矩形特征(a、b、c、d、e)也要进行一定比例的放大。然后计算Harr特征向量,再判别记录。

如此循环计算,直到子窗口大小达到不超过原始图像的最大尺寸。然后,再将所有记录过的人脸的进行标记,由于人脸区域在不同尺度的窗口中可能会有重复检测到,所以需要将重叠检测到的人脸区域合并起来成为一个区域并标记。

综上所述,就是Harr特征算法了,感觉有点像HOG特征算法,都是窗口内有东西在滑动计算,而窗口本身也是滑动的,只是Harr的窗口大小还在改变。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 02:33:10

Harr-like特征算法的相关文章

HOG特征算法

简介 HOG(Histogram of Oriented Gridients的简写)特征检测算法,最早是由法国研究员Dalal等在CVPR-2005上提出来的,一种解决人体目标检测的图像描述子,是一种用于表征图像局部梯度方向和梯度强度分布特性的描述符. 其主要思想是:在边缘具体位置未知的情况下,边缘方向的分布也可以很好的表示行人目标的外形轮廓. Dalal等提出的HOG+SVM算法,在进行行人检测取得了极大地成功后,更多新算法不断涌现,不过大都是以HOG+SVM的思路为主线. HOG算法 HOG

OpenCV2学习笔记(十一):特征点检测之FAST算法

在上一节中,记录了Harris算子检测图像特征点的定义和基于OpenCV的实现方法,它基于两个正交方向上的强度变化率.本节记录另一种特征点检测算子FAST(Features from Accelerated Segment Test),它依赖少数像素的比较来确定是否接受一个特征点,其检测效率要好于Harris. 与Harris算法相同,FAST特征算法需要定义什么是特征点.这次的定义基于假定特征点周围的图像强度,通过检查候选像素的周围一圈像素来决定是否接受这一个特征点.与中心点差异较大的像素如果

常用特征选取算法

特征选取是机器学习领域非常重要的一个方向. 主要有两个功能: (1)减少特征数量.降维,使模型泛化能力更强,减少过拟合 (2)增强度特征和特征值之间的理解 几种常用的特征选取方法 一.去掉取值变化小的特征 考察某个特征下,样本的方差值,可以人为给定一个阈值,抛开那些小于这个阈值的特征. 二.单变量特征选择 单变量特征选择的出发点是计算某一特征和分类变量之间的关系,以此计算每一特征的得分,抛开那些排名靠后的特征.比较经典的方法是卡方检验. (1)peason相关系数,缺点:只对线性相关系数敏感 (

【OpenCV入门教程之十七】OpenCV重映射 & SURF特征点检测合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中

【OpenCV新手教程之十七】OpenCV重映射 & SURF特征点检測合辑

本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中,我们一起探讨了OpenCV

模式匹配之常见匹配算法---SIFT/SURF、haar特征、广义hough变换的特性对比分析

识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点,再使用二次插值法得到精确特征点所在的层(尺度),即完成了尺度不变. 二.在特征点选取一个与尺度相应的邻域,求出主方向,其中SIFT采用在一个正方形邻域内统计所有点的梯度方向,找到占80%以上的方向作为主方向:而SURF则选择圆形邻域,并且使用活动扇形的方法求出特征点主方向,以主方向对齐即完成旋转不变

【opencv入门】重映射 & SURF特征点检测合辑

一.OpenCV重映射 1.重映射的概念简析 重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程.为了完成映射过程, 我们需要获得一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的.一般情况下,我们通过重映射来表达每个像素的位置 (x,y),像这样 : g(x,y) = f ( h(x,y) ) 在这里, g() 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数. 来看个例子.若有一幅图像 I ,想满足下面的条件作重映射

Fast检测角点算法

1.角点定义 角点是一种局部特征,具有旋转不变性和不随光照条件变化而变化的特点,一般将图像中曲率足够高或者曲率变化明显的点作为角点.检测得到的角点特征通常用于图像匹配.目标跟踪.运动估计等方面. 2.Fast检测角点 1)基本思想 E.Rosten和T.Drummond两位大佬在06年一篇文章中提出了FAST特征算法,基本思想十分简单:以某个像素点为圆心,某半径的圆周上其他像素点与圆心像素点特性差异达到某种标准时即认为该点就是角点. 2)数学模型 经过测试发现,选取的圆形半径为3时可以兼顾检测结

如何开发一个异常检测系统:如何评价一个异常检测算法

利用数值来评价一个异常检测算法的重要性 使用实数评价法很重要,当你用某个算法来开发一个具体的机器学习应用时,你常常需要做出很多决定,如选择什么样的特征等等,如果你能找到如何来评价算法,直接返回一个实数来告诉你算法的好坏,那样你做决定就会更容易一些.如现在有一个特征,要不要将这个特征考虑进来?如果你带上这个特征运行你的算法,再去掉这个特征运行你的算法,得到返回的实数,这个实数直接告诉你加上这个特征算法是变好了还是变坏了,这样你就有一种更简单的算法来确定是否要加上这个特征. 为了更快地开发出一个异常