特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。
特征提取(feature extraction)包括两部分:特征检测(feature detection)和特征描述(feature description)。假设我们使用object corners 作为特征,检测就是在一个区域或图像中寻找corners;描述就是给检测到的特征赋予定量属性(quantitative attributes),如 corner orientation和location。
特征是用来区分对象的,一般要independent于location, rotation, 和 scale,另外独立于illumination levels 和 changes caused by the viewpoint between the imaging sensor and the scene 也很重要。(平移不变性、旋转不变性、尺度不变性、光照不变性、视点不变性)
上面说的"independent"一词通常具有两种含义之一:invariant或covariant。特征描述子是不变的,即对于一系列的图像变换,其值保持不变;特征描述子是协变的,即对于一系列变换,应用任意一个变换会导致特征描述子发生相同的变换。通过协变量的规范化(normalize)可以转换为不变量,例如对于旋转是协变的,我们可以通过将特征描述子旋转至预定义的方向,这样旋转协变的特征描述子就转换为了旋转不变的也正描述子。
特征分为局部特征(local feature description)和全局特征(global)。如果一个特征适用于一个集合中的一个成员,则称这个特征是局部的;如果一个特征适用于整个集合,则称这个特征是全局的。“集合”和“成员”视具体任务而定。
特征提取算法通常会产生多个特征描述值,将这些数值特征打包称之为一个特征向量(feature vector),其元素都是描述子(descriptors)。如果采用n个descriptors,则特征向量是n维的,则包含所有特征向量的空间是一个n维特征空间(feature space)。
在特征提取之前应使用预处理操作对输入图像进行归一化(normalize),例如直方图均衡化或规定化(histogram equalization or specification),可以用于部分弥补光照变化的影响。
假设一幅二值图像,物体区域的像素值为1,背景区域像素为0,Moore边界跟踪算法流程如下:
链码通过指定长度和方向的直线段的连接序列来表示边界。
定义四方向和八方向链码各个方向对应的数字。
在实际使用中,不需要那么精细的链码(一是太长,二是些微扰动对边界形状影响很大),因此首先利用更大的网格间距对边界进行重采样,使得多个像素点落在一个网格内,根据原始像素点与网格结点的距离确定粗网格的边界点。然后以最左最上的边界点为起始点,顺时针方向按照以上的四方向或八方向数字定义对边界点进行数字编码。
SCCs 通过用将某条固定长度线段的两个端点置于曲线上并遍历曲线得到,用一个斜率变化序列来表示,取值范围为(-1,1),可以用来近似曲线。SCCs独立于旋转、平移,并且可以对尺度变化进行规范化。
可以用边界的最小周长多边形(MPP)来近似表示边界。我们首先用一系列的cell 包围边界,称为 a cellular complex。则边界的MPP的顶点要么是 the cellular complex 内壁的凸顶点,要么是其内壁凹顶点对应的在外壁的镜像凹顶点。
MPP算法通过遍历边界所有的顶点来判断该顶点是否为MPP的顶点。边界的顶点可以采用边界跟踪算法生成。
MPP可以用来近似表示边界,能大大减小数据量,此外对边界具有平滑效果(视网格大小而定)。
a signature 是用一个一维函数表示二维边界。
边界(boundaries)和骨架(skeletons)都可以用来描述区域形状。骨架可以通过两种方法获得:基于形态学的腐蚀变薄处理;基于距离变换获得区域中轴的方法。
The major and minor axes of a region
The bounding box of a region
The area of a region A A A:the number of pixels in the region
The perimeter of a region p p p:the length of its boundary
compactness(dimensionless measure): c o m p a c t n e s s = p 2 A compactness=\frac{p^2}{A} compactness=Ap2
circularity/roundness(dimensionless measure): c i r c u l a r i t y = 4 π A p 2 circularity=\frac{4\pi A}{p^2} circularity=p24πA
( c o m p a c t n e s s compactness compactness和 c i r c u l a r i t y circularity circularity are independent of size, orientation, and translation.)
The effective diameter: d e = 2 A π d_e=2\sqrt{\frac{A}{\pi}} de=2πA (independent of orientation and translation)
The eccentricity of a region:等于与该区域具有相同二阶中心矩的椭圆的离心率
( 椭 圆 离 心 率 = c a = a 2 − b 2 a = 1 − ( b a ) 2 椭圆离心率=\frac{c}{a}=\frac{\sqrt{a^2-b^2}}{a}=\sqrt{1-(\frac{b}{a})^2} 椭圆离心率=ac=aa2−b2=1−(ab)2 (a>=b) 即椭圆中心到焦点的距离与椭圆中心到主轴端点距离的比值)
(给定一个区域,我们令椭圆的主轴和副轴分别与区域的轴对齐,获得该区域的近似椭圆。定义协方差矩阵 C C C: C = 1 K − 1 ∑ k = 1 K ( z k − z ‾ ) ( z k − z ‾ ) T C=\frac{1}{K-1} \sum^K_{k=1}(z_k-\overline{z})(z_k-\overline{z})^T C=K−11∑k=1K(zk−z)(zk−z)T。其中 z k z_k zk是一个二维向量,其元素为区域中像素点的坐标; K K K为像素点个数; z ‾ \overline{z} z是均值向量。主轴和副轴长度的一半 a a a和 b b b分别为协方差矩阵的最大值和最小值,主轴和副轴的方向分别为特征值对应的特征向量方向。 另外有结论:圆的离心率为0;直线的离心率为1。离心率的范围为[0,1]。)
通常一个描述子无法区分个体。我们将多个描述子组合成一个特征向量,所有这样的特征向量构成特征空间。 在特征空间中,我们更易看出个体间的相似性和差异性。
Topology:研究图形不受任何变形影响(如拉伸、旋转)的特性,假设不存在撕裂(no tearing)和折叠的情况。(例如:区域空洞的个数)
一般描述区域的纹理可以通过:smoothness, coarseness, and regularity …
设 z z z是表示灰度的随机变量, p ( z i ) , i = 0 , 1 , . . . , L − 1 p(z_i), i=0,1,...,L-1 p(zi),i=0,1,...,L−1 为对应的归一化直方图,则 z z z的 n n n阶矩为:
μ n ( z ) = ∑ i = 0 L − 1 ( z i − m ) n p ( z i ) \mu_n(z)=\sum^{L-1}_{i=0} (z_i - m)^n p(z_i) μn(z)=i=0∑L−1(zi−m)np(zi)
其中, m = ∑ i = 0 L − 1 z i p ( z i ) m=\sum^{L-1}_{i=0}z_i p(z_i) m=∑i=0L−1zip(zi)。
可以发现,
总结:
仅利用直方图计算的纹理描述子不包含像素的空间位置信息。为了引入空间位置信息,采取graylevel co-occurrence matrix。
定义灰度共生矩阵: 假设 Q Q Q是位置算子,co-occurrence matrix G G G is a matrix whose element g i j g_{ij} gij is the number of times that pixel pairs with intensities z i z_i zi and z j z_j zj occur in image f f f in the position specified by Q Q Q。(即灰度共生矩阵 G G G的元素 g i j g_{ij} gij表示像素 z i z_i zi和 z j z_j zj在满足 Q Q Q指定的位置关系下在图像 f f f中出现的次数。)
The quantity p i j = g i j n p_{ij}=\frac{g_{ij}}{n} pij=ngij is an estimate of the probability that a pair of points satisfying Q Q Q will have values ( z i , z j ) (z_i,z_j) (zi,zj)。
基于共生矩阵的纹理描述子:
傅里叶频谱的特征可以用作纹理描述(周期性纹理)。
LBP(Local Binary Pattern, 局部二值模式)是一种用来描述图像局部纹理特征的算子。
(1)首先将图像划分为16×16的小区域(cell);
(2)对每个cell中的每个像素,将相邻的8个像素的灰度值与之比较,若大于该灰度值,则标记为1,否则标记为0。33邻域内的8个点经比较可产生8位二进制数,即为该像素点的LBP值。
(3)将二进制LBP值转换为十进制,计算每个cell的LBP直方图,即统计每个LBP值出现的频率,并对直方图进行归一化。
(4)将1616个cell的直方图进行连接得到一个特征向量,即整幅图的LBP纹理特征向量。
然后便可利用SVM或者其他机器学习算法进行分类了。
应用:纹理特征提取,提取的特征是图像的局部纹理特征
The 2-D moment of order ( p + q ) (p+q) (p+q) of an M × N M×N M×N digital image f ( x , y ) f(x,y) f(x,y):
m p q = ∑ x = 0 M − 1 ∑ y = 0 N − 1 x p y q f ( x , y ) m_{pq}=\sum^{M-1}_{x=0} \sum^{N-1}_{y=0} x^p y^q f(x,y) mpq=x=0∑M−1y=0∑N−1xpyqf(x,y)
The corresponding central moment of order ( p + q ) (p+q) (p+q):
μ p q = ∑ x = 0 M − 1 ∑ y = 0 N − 1 ( x − x ‾ ) p ( y − y ‾ ) q f ( x , y ) \mu_{pq}=\sum^{M-1}_{x=0} \sum^{N-1}_{y=0} (x-\overline x)^p (y-\overline y)^q f(x,y) μpq=x=0∑M−1y=0∑N−1(x−x)p(y−y)qf(x,y)
其中, x ‾ = m 10 m 00 \overline x=\frac{m_{10}}{m_{00}} x=m00m10, y ‾ = m 01 m 00 \overline y=\frac{m_{01}}{m_{00}} y=m00m01。
The normalized central moment of order ( p + q ) (p+q) (p+q):
η p q = μ p q μ 00 γ \eta_{pq}=\frac{\mu_{pq}}{\mu^{\gamma}_{00}} ηpq=μ00γμpq
其中, γ = p + q 2 + 1 \gamma=\frac{p+q}{2}+1 γ=2p+q+1 for p + q = 2 , 3 , . . . p+q=2,3,... p+q=2,3,...
一组共7个2-D moment invariants can be derived from the second and third normalized central moments: ϕ 1 , ϕ 2 , . . . , ϕ 7 \phi_1, \phi_2, ..., \phi_7 ϕ1,ϕ2,...,ϕ7。这组矩对于平移、尺度变化、镜像、旋转都是不变的(invariant)。
假设有 n n n幅图像,对于任一位置,这 n n n幅图像对应位置的像素组成一个 n n n维列向量:
x = ( x 1 x 2 . . . x n ) x=\left( \begin{array}{c} x_1 \\ x_2 \\ ... \\ x_n \end{array} \right) x=⎝⎜⎜⎛x1x2...xn⎠⎟⎟⎞
我们将 x x x视为一个随机向量,并定义均值向量和协方差矩阵:
m x = E { x } m_x=E\{x\} mx=E{x}
C x = E { ( x − m x ) ( x − m x ) T } C_x=E\{ (x-m_x)(x-m_x)^T \} Cx=E{(x−mx)(x−mx)T}
由于 x x x是一个 n n n维列向量,则 C x C_x Cx是一个 n × n n×n n×n矩阵。 C i i C_{ii} Cii表示向量 x x x的第 i i i个分量的方差, C i j C_{ij} Cij表示向量 x x x中的 x i x_i xi与 x j x_j xj的协方差。如果 x i x_i xi和 x j x_j xj不相关,则 C i j = 0 C_{ij}=0 Cij=0。
C x C_x Cx是一个实对称矩阵,总可以找到 n n n个正交的特征向量。令矩阵 A A A的每一行为 C x C_x Cx的特征向量,且对应的特征值按从大到小排序(即 A A A的第一行是最大特征值对应的特征向量)。
作变换:
y = A ( x − m x ) y=A(x-m_x) y=A(x−mx)
有性质: m y = 0 m_y=0 my=0, C y = A C A T C_y=ACA^T Cy=ACAT。 C y C_y Cy是一个对角矩阵,对角线上的元素为其特征值按从大到小排序。因此向量 y y y的各个分量互不相关。 C x C_x Cx和 C y C_y Cy具有相同的特征值。
通过 y y y可以重建 x x x: ( A A A为正交矩阵, A T = A − 1 A^T=A^{-1} AT=A−1)
x = A T y + m x x=A^T y +m_x x=ATy+mx
假设 A k A_k Ak是由 k k k个最大特征值对应的特征向量组成的, A k A_k Ak的维度为 k × n k×n k×n,作变换:
y k = A k ( x − m x ) y_k=A_k(x-m_x) yk=Ak(x−mx)
(可以发现 x n × 1 x_{n×1} xn×1 --> y k × 1 y_{k×1} yk×1 实现了降维。)
利用 y k y_k yk我们获得 x x x的近似:
x ^ = A k T y + m x \hat x =A^T_{k} y + m_x x^=AkTy+mx
x x x与 x ^ \hat x x^的均方误差为: e m s = ∑ j = k + 1 n λ j e_{ms}=\sum^{n}_{j=k+1} \lambda_j ems=∑j=k+1nλj。
假设有一个物体,我们记物体像素点的坐标为 x = ( x 1 , x 2 ) T x=(x_1,x_2)^T x=(x1,x2)T,物体区域的所有像素点构成数据总体,求其均值向量和协方差矩阵,然后对这个物体区域实行主成分变换。式子 y = A ( x − x m ) y=A(x-x_m) y=A(x−xm)做了两件事:(1) x − x m x-x_m x−xm将变换后的原点确定为物体的质心;(2)变换后的y坐标向量是x的旋转,即将坐标轴与两个特征向量的方向对齐。
尺度不变特征转换(Scale-invariant feature transform 或SIFT)用于检测和描述图像的局部性特征,它在空间尺度中寻找极值点,并提取出位置、尺度、旋转不变量,对于光线、噪声以及微小视角改变的容忍度较高。
高斯滤波是实现尺度变换的唯一变换核。
使用高斯差分函数的原因:尺度归一化的高斯拉普拉斯函数 σ 2 ∇ 2 G \sigma^2 \nabla^2 G σ2∇2G的极大值和极小值相比其他特征提取函数,如梯度、Hessian 或Harris角特征,能够产生最稳定的图像特征。而高斯差分函数近似于尺度归一化的高斯拉普拉斯函数。
在实际计算中,使用高斯金字塔每组中相邻上下两层图像相减,得到高斯差分图像。然后进行极值检测。
为了在高斯差分金字塔中寻找尺度空间的极值点,每个采样点要和它所有的相邻点进行比较,包括图像域和尺度域。即对于任意一个检测点要和它同尺度的8个相邻点以及上下相邻尺度的9*2个点共26个点比较。
搜索过程从每组的第二层开始,以第二层为当前层,对第二层的DoG图像中的每个点取一个3×3的立方体,立方体上下层为第一层与第三层。这样搜索得到的极值点既有位置坐标又有空间尺度坐标。当S=3时,每组要搜索3层。
这样产生的极值点并不全是稳定的特征点,因为某些极值点响应较弱,而且DoG算子会产生较强的边缘响应。
上面的尺度空间极值点的搜索是在离散空间中进行的,检测到的极值点并不是真正意义上的极值点。需要利用已知的离散空间点插值到连续空间极值点,即子像元插值。
通过多次迭代得到最终候选点的精确位置与尺度,将其代入公式求得 D ( x ) D(x) D(x),并求其绝对值。如果其绝对值低于阈值的将被删除。
选取 γ = 10 \gamma=10 γ=10,即主曲率比值大于10的特征点将被删除。
参考资料:
[1] SIFT定位算法关键步骤的说明
Harris角点检测算子具有旋转不变性和尺度不变性,且对亮度和对比度变化不敏感。
若某个窗口内的图像存在角点,则在各个方向上移动这个特征的小窗口,窗口内区域的灰度会发生较大的变化。因此对于图像 I ( x , y ) I(x,y) I(x,y),定义点 ( x , y ) (x,y) (x,y)平移 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy)后的自相似性,即自相关函数:
c ( x , y ; Δ x , Δ y ) = ∑ w ( u , v ) ∈ W ( x , y ) w ( u , v ) ( I ( u , v ) − I ( u + Δ x , v + Δ y ) ) 2 c(x,y;\Delta x,\Delta y)=\sum_{w(u,v) \in W(x,y)} w(u,v)(I(u,v)-I(u+\Delta x, v+\Delta y))^2 c(x,y;Δx,Δy)=w(u,v)∈W(x,y)∑w(u,v)(I(u,v)−I(u+Δx,v+Δy))2
该函数可近似为二项函数:
c ( x , y ; Δ x , Δ y ) ≈ A Δ x 2 + 2 C Δ x Δ y + B Δ y 2 = [ Δ x , Δ y ] M ( x , y ) [ Δ x Δ y ] c(x,y;\Delta x, \Delta y) \approx A \Delta x^2 + 2C \Delta x \Delta y + B \Delta y^2 = \left[\Delta x, \Delta y \right] M(x,y)\left[ \begin{array}{c}\Delta x \\ \Delta y\end{array} \right] c(x,y;Δx,Δy)≈AΔx2+2CΔxΔy+BΔy2=[Δx,Δy]M(x,y)[ΔxΔy]
其中,
A = ∑ w I x 2 , B = ∑ w I y 2 , C = ∑ w I x I y , M ( x , y ) = [ A C C B ] A=\sum_w I^2_x, B=\sum_w I^2_y, C=\sum_w I_x I_y, M(x,y)=\left[ \begin{array}{cc}A & C \\ C & B \end{array} \right] A=w∑Ix2,B=w∑Iy2,C=w∑IxIy,M(x,y)=[ACCB]
当 M M M的两个特征值都大且近似相等时,存在角点。我们可以通过计算一个角点响应值 R R R来判断角点。
R = d e t M − α ( t r a c e M ) 2 R=detM-\alpha(traceM)^2 R=detM−α(traceM)2
其中, α \alpha α的取值范围为 0.04 ∼ 0.06 0.04 \thicksim 0.06 0.04∼0.06,
d e t M = λ 1 λ 2 = A C − B 2 det M=\lambda_1 \lambda_2=AC-B^2 detM=λ1λ2=AC−B2
t r a c e M = λ 1 + λ 2 = A + C trace M=\lambda_1+\lambda_2=A+C traceM=λ1+λ2=A+C
算法流程如下:
HOG(Histogram of Oriented Gradient,方向梯度直方图)用于描述图像局部纹理的特征。HOG特征通过激素那和统计图像局部区域的方向梯度直方图来构成特征。
思想:在一幅图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好地描述。其本质为:梯度的统计信息,而梯度主要存在于边缘的地方。
算法步骤:
(1)灰度化和Gamma校正:能够有效降低阴影和光照变化的影响。
(2)计算梯度的幅值和方向:
(3)构建方向的直方图:将图像分为若干个cell。假设每个cell为6*6个像素,假设采用9个bin的方向直方图来统计梯度信息(即将360度分为9个方向块,第一个bin是0~40°,第2个bin是40-80° )。假设某个像素梯度大小为2,方向为30°,则梯度方向直方图的第一个bin计数加2(即梯度大小用来作权值,用双线性内插法将幅值累加到直方图中?)。这样每个cell都能计算出一个梯度方向直方图,即对应的特征向量(上述为9维的特征向量)。
(4)把小cell组合成更大的block,block内归一化梯度直方图:将小cell组合成大的、空间上连通的blocks。一个block内所有cell的特征向量串联起来便得到该block的HOG特征(归一化去除光照和阴影的影响)。(注意,这些blocks是有重叠的,即每个cell的特征会以不同的结果多次出现在最后的特征向量中,我们将归一化后的block描述符称为HOG描述符。)
(5)收集所有blocks的特征,并将它们结合成最终的特征向量供分类使用。
应用:HOG+SVM进行行人检测
参考资料:
[1]Harris角点
[2]图像特征提取三大法宝:HOG特征,LBP特征,Haar特征