ORB与LBP、HOG

LBP:局部二进制; 这什么这里要将ORB和LBP放到一起说? 因为ORB当中特征点检测和描述子计算都有LBP的“影子”;

ORB会在下一篇博客当中详细讨论,包括opencv3源代码。我们知道,一般地,opencv当中,成熟、稳定的算法都会直接给出API,相对不稳定的算法,比如:SIFT、SURF都会放在opencv_contrib当中。再讲LBP之前,我想先讲一下HOG,因为二者在统计特征的形式是一样的,计算方式不一样,

HOG特征向量是浮点型,LBP则是二进制。这里先讲一下HOG。

 

 

图像处理之特征提取:HOG特征简单梳理

  HOG 方向梯度直方图,这里分解为方向梯度与直方图。

一、方向梯度
梯度:在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。在这个意义上,梯度是雅可比矩阵的一个特殊情况。
  在单变量的实值函数的情况,梯度只是导数,或者,对于一个线性函数,也就是线的斜率。

在图像中梯度的概念也是像素值变换最快的方向,把边缘(在图像合成中单一物体的轮廓叫做边缘)引入进来,边缘与梯度保持垂直方向。

 

 

图1

方向梯度中的方向是如何确定的?P0到P1的梯度方向:

 

 

图2

具体在HOG中方向梯度的实现:首先用[-1,0,1]梯度算子对原图像做卷积运算,得到x方向(水平方向,以向右为正方向)的梯度分量gradscalx,然后用[1,0,-1]T梯度算子对原图像做卷积运算,得到y方向(竖直方向,以向上为正方向)的梯度分量gradscaly。然后再用以下公式计算该像素点的梯度大小和方向。

 二、直方图 

直方图是一个图像处理中用的比较多的概念,想深入了解,可以度娘一下。

三、方向梯度直方图HOG的提取
  方向梯度直方图为图像局部区域的梯度特征量统计,我们为什么要提取这个东东呢?
    HOG主要应用于行人检测方面,以行人照片为例。
    

图3
  上图是一张行人图的四种表示方式,原三色图,灰度图,边缘图,梯度图,人脑根据前期学习与先验知识很容易理解到图像中包含着一个行人,并可以根据一定情况将其从图像中抠选出来,但计算机是怎么思考的呢?怎样让计算机理解以上图像中包含的是一个行人呢?前三个图像现在情况不适用,所以选取梯度图,现在的梯度图同样也是人脑处理理解的平面结果,计算机是办不到的,需要将直观地的梯度图像转换成一种计算机容易理解的数据特征语言。
  
  对于64*128的图像而言,每8*8的像素组成一个cell,每2*2个cell组成一个块,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。这里截取梯度图的一部分画图进行理解,尺寸与比例并不精确。

 

图4

  单独将其中一个8*8的小格拿出来,方向梯度中指的方向范围为2π,360°,为了画直方图我们还需要选取合适的组距也就是bin,这里组距选取2π/9,也就是最后的直方图组数为9。下图为8*8像素的cell对应的方向梯度(未全部画出,共有8*8=64个)。

 

 图5

将上面的64个方向梯度,按着直方图的参数设置进行画图,其中梯度的大小在统计数量中呈线性关系,比如梯度大小为2,则直方图对应增加2个单位,
画出的对应直方图假设如下所示:

图6

  把上图中单个cell对应的方向直方图转换为单维向量,也就是按规定组距对对应方向梯度个数进行编码,(8,10,6,12,4,5,8,6,14),得到单个cell的9个特征,每个block(扫描窗口)包含2*2个cell也就是2*2*9=36个特征,一个64*128大小的图像最后得到的特征数为36*7*15=3780个。这样将一幅直观的梯度图通过分解提取变为计算机容易理解的特征向量。
  以上工作为HOG提取的主要内容,最后得到对应的行人的由方向梯度直方图HOG提取到的特征向量,但是计算机还是不知道这个数据数组代表了什么意思,什么时候这组向量代表行人,什么时候代表其他东西,怎样train,最后通过不断地学习,而后在检测积累的基础上对对未知图像检测识别有没有行人呢?那就是后一步SVM要做的事了。

参考文献:
zouxy09   http://blog.csdn.net/zouxy09/article/details/7929348/    目标检测的图像特征提取之(一)HOG特征

转载于:https://www.cnblogs.com/winslam/p/9753107.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 提取图像矩特征 图像矩(Image Moment)是图像处理中一种基本的形状描述方法,它可以用来描述图像的几何特征和灰度特征。图像矩特征包括中心矩、标准化中心矩、Hu矩等。 下面是使用OpenCV库提取图像矩特征的代码示例: ```python import cv2 # 读取图像 img = cv2.imread('test.jpg') # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 计算图像矩 m = cv2.moments(gray) # 计算中心矩 cx = int(m['m10'] / m['m00']) cy = int(m['m01'] / m['m00']) # 计算标准化中心矩 nu20 = m['mu20'] / m['m00'] nu02 = m['mu02'] / m['m00'] nu11 = m['mu11'] / m['m00'] # 计算Hu矩 hu = cv2.HuMoments(m) ``` 2. 提取HOG特征 HOG(Histogram of Oriented Gradients)特征是一种用于图像识别和检测的特征描述子,它可以通过计算图像中每个像素点的梯度方向和大小,进而得到图像的特征向量。 下面是使用OpenCV库提取HOG特征的代码示例: ```python import cv2 # 读取图像 img = cv2.imread('test.jpg') # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 计算HOG特征 winSize = (64, 64) blockSize = (16, 16) blockStride = (8, 8) cellSize = (8, 8) nbins = 9 hog = cv2.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins) feat = hog.compute(gray) ``` 3. 提取LBP特征 LBP(Local Binary Pattern)特征是一种用于图像分类和识别的局部纹理特征描述子,它可以通过对图像中每个像素点的局部区域进行二值化处理,得到一个二进制序列,并将该序列转换为十进制数作为该像素点的LBP特征值。 下面是使用OpenCV库提取LBP特征的代码示例: ```python import cv2 # 读取图像 img = cv2.imread('test.jpg') # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 计算LBP特征 radius = 1 n_points = 8 * radius lbp = cv2.ORB_create(n_features=1000, scaleFactor=1.2, nlevels=8, edgeThreshold=15, firstLevel=0, WTA_K=2, patchSize=31, fastThreshold=20) feat = lbp.detectAndCompute(gray, None) ``` 以上是三种常用的图像特征提取方法的Python实现,可以根据需要选择并应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值