传统图像特征
图像特征是图像中独特的,易于跟踪和比较的特定模板或特定结构。
图像特征提取与匹配是计算机视觉中的一个关键问题,在目标检测、物体识别、三维重建、图像配准、图像理解等具体应用中发挥着重要作用。
图像特征主要有图像的颜色特征、纹理特征、形状特征和空间关系特征。
- 颜色特征:是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。颜色特征描述方法:颜色直方图、颜色空间、颜色分布。
- 纹理特征:也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只是一种物体表面的特性,并不能完全反映出物体的本质属性,所以仅仅利用纹理特征是无法获得高层次图像内容的。
- 形状特征:形状特征有两类表示方法,一类是轮廓特征,另一类是区域特征。图像的轮廓特征主要针对物体的外边界,而图像的区域特征则描述了是图像中的局部形状特征。
- 空间关系特征:是指图像中分割出来的多个目标之间的相互的空间位置或相对方向关系,这些关系也可分为连接/邻接关系、交叠/重叠关系和包含/独立关系等。
一、方向梯度直方图(Histogram of Oriented Gradient,HOG)
形状特征
1、原理
- 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。
- 它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
- Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。
- 主要思想:在一副图像中,目标的形状能够被梯度或边缘的方向密度分布很好地描述。
2、实现过程
- 灰度化(将图像看做一个x,y,z(灰度)的三维图像);
- 采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);
- 计算图像每个像素的梯度(包括大小和方向);
- 将图像划分成小cells;
- 统计每个cell的梯度直方图(不同梯度的个数),得到cell的描述子;
- 将每几个cell组成一个block,得到block的描述子(对梯度进行归一化来减少光照变化影响);
- 将图像image内的所有block的HOG特征descriptor串联起来就可以得到HOG特征,
- 特征向量就是用来目标检测或分类的特征。
reference
二、Harris角点检测
形状特征
-
角点:在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。
从图像分析的角度来定义角点可以有以下两种定义:
角点可以是两个边缘的交点;
角点是邻域内具有两个主方向的特征点;
-
角点计算方法:
前者通过图像边缘计算,计算量大,图像局部变化会对结果产生较大的影响;
后者基于图像灰度的方法通过计算点的曲率及梯度来检测角点;
1、实现流程
- 计算图像在X和Y方向的梯度
I x = ∂ I ∂ x = I ⊗ ( − 1 0 1 ) , I y = ∂ I ∂ y = I ⊗ ( − 1 0 1 ) T I_{x}={\frac{\partial I}{\partial x}}=I\otimes(-1\ 0\ 1),\ I_{y}={\frac{\partial I}{\partial y}}=I\otimes(-1\ 0\ 1)^{T} Ix=∂x∂I=I⊗(−1 0 1), Iy=∂y∂I=I⊗(−1 0 1)T
-
计算图像两个方向梯度的乘积
I x 2 = I x ⋅ I x , I y 2 = I y ⋅ I y , I x y = I x ⋅ I y I_{x}^{2}=I_{x}\cdot I_{x},\ I_{y}^{2}=I_{y}\cdot I_{y},\ I_{x y}=I_{x}\cdot I_{y} Ix2=Ix⋅Ix, Iy2=Iy⋅Iy, Ixy=Ix⋅Iy -
使用高斯函数对三者进行高斯加权,生成矩阵M的A,B,C
A = g ( I x 2 ) = I x 2 ⊗ w , C = g ( I y 2 ) = I y 2 ⊗ w , B = g ( I x , y ) = I x y ⊗ w A=g(I_{x}^{2})=I_{x}^{2}\otimes w,\ \ C=g(I_{y}^{2})=I_{y}^{2}\otimes w,\ B=g(I_{x,y})=I_{x y}\otimes w A=g(Ix2)=Ix2⊗w, C=g(Iy2)=Iy2⊗w, B=g(Ix,y)=Ixy⊗w -
计算每个像素的Harris响应值R,并对小于某一阈值t的R置为零
-
在3x3或5x5的邻域内进行非最大值抑制,局部最大值点即为图像中的角点;
2、 封装
Open 中的函数 cv2.cornerHarris()
可以用来进行角点检测。参数如下:
img
— 数据类型为 float32 的输入图像blockSize
— 角点检测中要考虑的领域大小ksize
— Sobel 求导中使用的窗口大小k
— Harris 角点检测方程中的自由参数,取值参数为[0.04,0.06]
import cv2
import numpy as np
filename ='harris2.png'
img=cy2.imread(filename)
gray =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray=np.float32(gray)
#输入图像必须是float32,最后一个参数在0.04到0.06之间
dst=cv2.cornerHarris(gray,2,3,0.03)
#结果进行膨胀,可有可无
dst=cv2.dilate(dst,None)
print(dst)
#设定阈值,不同图像阈值不同
img[dst>0.01*dst.max()]=[0,0,255]
print(dst.max())
cv2.imshow('dst_img',img)
#cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、SIFT算法(Scale-invariant feature transform,SIFT)
形状特征
1、原理
SIFT,即尺度不变特征变换算法(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种算法。SIFT具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。
2、特性
- 旋转、缩放、平移不变性
- 解决图像仿射变换,投影变换的关键的匹配
- 光照影响小
- 目标遮挡影响小
- 噪声景物影响小
3、实现流程
- 尺度空间极值检测点检测
- 关键点定位:去除一些不好的特征点,保存下来的特征点能够满足稳定性等条件
- 关键点方向参数:获取关键点所在尺度空间的邻域,然后计算该区域的梯度和方向,根据计算得到的结果创建方向直方图,直方图的峰值为主方向的参数
- 关键点描述符:每个关键点用一组向量(位置、尺度、方向)将这个关键点描述出来,使其不随着光照、视角等等影响而改变
- 关键点匹配:分别对模板图和实时图建立关键点描述符集合,通过对比关键点描述符来判断两个关键点是否相同
4、封装
import cv2
import numpy as np
img=cv2.imread('harris2.png')
gray=cv2.evtColor(img,cv2.COLOR_BGR2GRAY)
sift=cv2.xfeatures2d.SIFT_create()#定义提取器
kp=sift.detect(gray,None)#找到关键点
img=cv2.drasKeypoints(gray,kp,img)#检制关键点
cv2.imshow('sp',img)
cv2.waitKey(0)
四、LBP(Local Binary Pattern,局部二值模式)
纹理特征
优点:旋转不变性、灰度不变性
1、LBP原理
LBP算子定义在一个3x3的窗口内,以窗口中心像素为阈值,与相邻的8个像素的灰度值比较,若周围的像素值大于中心像素值,则该位置被标记为1,否则标记为0。
如此可以得到一个8位二进制数(通常还要转换为10进制,即LBP码,共256种),将这个值作为窗口中心像素点的LBP值,以此来反映这个3x3区域的纹理信息。
二进制:01111100 十进制:124 用124代替83
2、LBP计算公式
L B P P , r = ∑ p = 0 P − 1 s ( g p − g c ) 2 p LB P_{P,r}=\sum_{p=0}^{P-1}s(g_{p}-g_{c})2^{p} LBPP,r=p=0∑P−1s(gp−gc)2p
其中,p表示窗口中除中心像素点外的第
p
p
p个像素点;
g
c
g_{c}
gc表示中心像素点的灰度值,
g
p
g_{p}
gp表示领域内第
p
p
p个像素点的灰度值;
s
(
x
)
s(x)
s(x)公式如下:
s
(
x
)
=
{
1
x
≥
0
0
x
<
0
s(x)={\left\{\begin{array}{l l}{1}&{x\geq0}\\ {0}&{x<0}\end{array}\right.}
s(x)={10x≥0x<0
3、特点
- LBP记录的是中心像素点与领域像素点之间的差值
- 当光照变化引起像素灰度值同增同减时,LBP变化并不明显
- LBP对与光照变化不敏感,LBP检测的仅仅是图像的纹理信息