Haar特征最初是用来进行人脸特征的表示的,最近重新看了SURF算法,发现在生成特征点描述子的时候也有用到Haar特征。查看了一些博文,自己整理一些,方便以后复习。
Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模型。特征模板有黑白两种颜色,且定义模板的特征值为模板中 白色区域的像素总和 减去 黑色区域的像素总和。这里还涉及到积分图像的应用。Haar特征反应的是图像的灰度变化情况。但是矩形特征只对一些简单的图形结构,如边缘、线段比较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。
积分图像
积分图像是一种能够描述全局信息的矩阵表示方法,他的构造方式 是积分图中某个点的值表示该点左上角所有像素之和,具体方式如下所示:
1) 用 s(i,j)表示行方向的累加和,即第i行前j列像素之和,初始化为s(i,-1)=0
2) 用 T(i,j)表示一个积分图像,初始化为T(-1,j)=0
3) 逐行扫描图像,递归计算每个像素(i,j)行方向的累加和s(i,j) 与(i,j)左上角方向积分图的累加和
s(i,j) = s(i,j-1) + I(i,j)
T(i,j) = T(i-1,j) + s(i,j)
如下图所示:

在上述积分图像中,若要得到 A区域的像素和,则需要T(4) , B区域的像素和为T(12) - T(11) ,区域C的像素和为 T(16) - T(14), 区域D的像素和为 T(8) + T(5) - T(6) - T(7)
Haar特征的模板有如下几种

关于一幅图像有多少个特征数量可以参考这个博客
特征模板数量计算参考

import cv2
#积分图
def intergralMat(input=[],weight=0,height=0):output=[]#output.clear()columnSum = [0 for i in range(weight)] #[0, 0, 0, 0, 0, 0, 0, 0, 0]for i in range(height):output.append([0 for x in range(weight)])for j in range(weight):if j==0:columnSum[j] = int(input[i][j])else:columnSum[j]=columnSum[j-1] + int(input[i][j])if i==0:output[i][j]=columnSum[j]else:output[i][j]=output[i-1][j]+columnSum[j]return output#Haar特征 默认size=1 ,deep=2
def wHaar(interM = [],weigth = 0,height = 0,size = 1,deep = 2):dst = []for i in range(height - deep + 1):dst.append([0 for x in range(weigth - size)])for j in range(weigth - 2*size +1):white,black = (0,0)if j == 0 and i==0:white = int(interM[i+deep-1][j+size-1])elif i!=0 and j==0:white = int(interM[i + deep - 1][j + size - 1]) - int(interM[i - 1][j + size -1])elif i == 0 and j != 0:white = int(interM[i+deep-1][j+size-1]) - int(interM[i+deep-1][j-1])else:white = int(interM[i+deep-1][j+size-1]) + int(interM[i+deep-3][j+size-2]) - int(interM[i+deep-1][j+size-2]) - int(interM[i+deep-3][j+ size -1])_i = i_j = j + sizeif _i == 0:black = int(interM[_i+deep-1][_j+size-1]) - int(interM[_i+deep-1][_j+size-2])else:black = int(interM[_i+deep-1][_j+size-1]) + int(interM[_i+deep-3][_j+size-2]) - int(interM[_i+deep-1][_j+size-2]) - int(interM[i+deep-3][_j+size-1])dst[i][j] = black - whitereturn dstif __name__ == '__main__':src = cv2.imread(r'D:\Python Code\picture\cat1.jpg')tmp = src.copy()b,g,r = cv2.split(src)_w = len(g[0]) #图像的宽 391_h = len(g)   #图像的长220#print _w , _h#g通道in_g = intergralMat(g,_w,_h)  #返回积分图像Haar_g = wHaar(in_g,_w,_h)  #返回Haar特征#b通道in_b = intergralMat(b,_w,_h)  #返回积分图像Haar_b = wHaar(in_b,_w,_h)  #返回Haar特征#r通道in_r = intergralMat(r,_w,_h)  #返回积分图像Haar_r = wHaar(in_r,_w,_h)  #返回Haar特征dst1 = []dst2 = []dst3 = []#print len(Haar_b), len(Haar_b[0])for x in range(len(Haar_g)): #219dst1.append([])dst2.append([])dst3.append([])for y in range(len(Haar_g[0])): #390if Haar_g[x][y] > 0:dst2[x].append(255)else:dst2[x].append(0)if Haar_b[x][y] > 0:dst1[x].append(255)else:dst1[x].append(0)if Haar_r[x][y] > 0:dst3[x].append(255)else:dst3[x].append(0)for x in range(len(dst1)):for y in range(len(dst1[0])):f1 = dst1[x][y]f2 = dst2[x][y]f3 = dst3[x][y]tmp[x,y] = [f1,f2,f3]cv2.imshow('src',src)cv2.imshow('test',tmp)cv2.waitKey(0)

参考的别人的博客,只用了竖直方向的模板,模板如上图所示。其他模板也类似,旋转45度的可能有点难度,具体可以参考这篇文献
Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object Detection

图像处理——Haar特征相关推荐

  1. 图像处理之Haar特征

    Haar-like特征是计算机视觉领域一种常用的特征描述算子(也称为Haar特征,这是因为Haar-like是受到一维haar小波的启示而发明的,所以称为类Haar特征),后来又将Haar-like扩 ...

  2. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

  3. Haar特征和级联分类器目标检测介绍及应用

    文章目录 Haar特征和级联分类器目标检测介绍及应用 1. Haar特征 2. 级联分类器 3. 实现步骤 4.尝试训练自己的级联分类器 4. 应用示例 Haar特征和级联分类器目标检测介绍及应用 H ...

  4. Haar特征类有哪些最新发表的毕业论文呢?

    一.总体简介 Haar特征的相关文献在2006年到2020年内共计132篇,主要集中在自动化技术.计算机技术.无线电电子学.电信技术.公路运输 等领域,其中期刊论文100篇.会议论文4篇.专利文献28 ...

  5. svm训练特征提取——图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

    图像特征提取三大法宝:HOG特征,LBP特征,Haar特征 一.HOG特征 1.HOG特征: 即局部归一化的梯度方向直方图,是一种对图像局部重叠区域的密集型描述符, 它通过计算局部区域的梯度方向直方图 ...

  6. 物体识别算法——SIFT/SURF、haar特征、广义hough变换的对比分析

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:cvvision 链接:http://www.cvvision.cn/7780.html 来源:CV视觉网 识别算法概述: ...

  7. 利用OpenCV的级联分类器类CascadeClassifier和Haar特征实现人脸区域的检测

    级联分类器是将若干个分类器进行连接,从而构成一种多项式级的强分类器.级联分类器使用前要先进行训练,怎么训练呢?用目标的特征值去训练,对于人脸来说,通常使用Haar特征进行训练. Haar特征是由M.O ...

  8. 分类器是如何做检测的?(2)——【续】检测中的LBP和HAAR特征计算过程

    前面介绍分类器检测过程的示例中是以HOG特征为例,那LBP和HAAR特征在xml中是如何表达和测试的呢? 2.3    LBP与HAAR特征 HAAR特征的计算和表达方式与HOG很类似,在OpenCV ...

  9. 目标检测的图像特征提取—Haar特征

    1.Haar-like特征 Haar-like特征最早是由Papageorgiou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征. Haar特征分为三类:边缘特征.线性 ...

  10. 人脸识别案例:【实战】opencv人脸检测+Haar特征分类器

    1 基础 我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器.我们需要从其中提取特征.下图中的 Haar 特征会被使用,就像我们的卷积核 ...

最新文章

  1. PUTTY、Xshell远程连接Linux与PUTTY、Xshell密匙认证
  2. 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)
  3. html5结构 客户端缓存,Javascript--离线应用与客户端储存
  4. [Ubuntu] 使用 ibus 输入汉字
  5. (SAE)skylark app engine preview (1) —— guestbook
  6. jquery选择器的总结
  7. 14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
  8. python的类中包含什么_Python中的类(中)
  9. 建筑学公务员要求计算机二级,在我国,建筑学作为一级学科包括四个二级学科,其中两个是建筑设计及其理论、建筑历史与理论,另外两个是(  )。...
  10. Flink 1.10 Container 环境实战
  11. 曾经使用过的chart控件(mschart,XCL-Chart,vue-echart)
  12. python json转字符串_python如何将json转成字符串
  13. 实战:VM Player导入虚机到ESXi
  14. 英文网站源码 国外财经资讯商业新闻整站源码 全自动采集发布 广告联盟网站
  15. 【Si24R2F+ Demo板】介绍说明与使用建议
  16. oracle左连接应用场景,Oracle左连接left join 的实际操作与应用
  17. Grafana 汉化
  18. github生成密钥步骤
  19. 字符输入函数详解(getchar的使用)
  20. 三点确定一个圆(输出圆心、弧长、圆心角、方向)

热门文章

  1. MAVEN专题之十、设计你自己的maven插件【高手必备】
  2. Java 入门之6:Java中的char类型是怎么存储的以及常见的编码字符集
  3. 解决VMware 小度wifi 驱动报错问题 Driver error
  4. echarts中国省份地图
  5. 直播app源码,隐藏导航栏和状态栏
  6. Linux平台升级chrome浏览器后,再打开会提示:“您的个人资料来自新版 Google Chrome 浏览器,因此无法使用。某些功能可能无法使用。请指定其他个人资料目录,或使用新版本”
  7. VS2019创建COM组件
  8. Linux版的led显示屏控制软件,中航Led显示屏控制软件下载
  9. 像中文的罗马音字体复制_罗马音字体复制下载
  10. 使用JavaVisualVM远程监控JVM虚拟机