详细解释3D Harris特征提取中的协方差矩阵CCC计算
在3D Harris特征提取中,协方差矩阵CCC是核心计算步骤,用于量化点云局部邻域的几何变化。其计算基于邻域点的坐标或法向量,反映邻域在三个主方向上的分布特性。
1. 协方差矩阵CCC的定义
对于点云中的某个点ppp,其邻域N(p)N(p)N(p)包含nnn个点{q1,q2,...,qn}\{q_1, q_2, \dots, q_n\}{q1,q2,...,qn}。协方差矩阵CCC定义为:
C=1n∑i=1n(qi−qˉ)(qi−qˉ)TC = \frac{1}{n} \sum_{i=1}^n (q_i - \bar{q})(q_i - \bar{q})^TC=n1∑i=1n(qi−qˉ)(qi−qˉ)T
其中:
-qˉ=1n∑i=1nqi\bar{q} = \frac{1}{n} \sum_{i=1}^n q_iqˉ=n1∑i=1nqi是邻域点的质心(均值)。
-(qi−qˉ)(q_i - \bar{q})(qi−qˉ)是点qiq_iqi相对于质心的偏移向量。
-(qi−qˉ)T(q_i - \bar{q})^T(qi−qˉ)T是偏移向量的转置(列向量转行向量)。
-(qi−qˉ)(qi−qˉ)T(q_i - \bar{q})(q_i - \bar{q})^T(qi−qˉ)(qi−qˉ)T是一个3×33 \times 33×3的外积矩阵,表示点qiq_iqi对协方差矩阵的贡献。
若使用法向量 :
若邻域点的几何信息为法向量{n1,n2,...,nn}\{n_1, n_2, \dots, n_n\}{n1,n2,...,nn},则协方差矩阵可定义为:
C=1n∑i=1n(ni−nˉ)(ni−nˉ)TC = \frac{1}{n} \sum_{i=1}^n (n_i - \bar{n})(n_i - \bar{n})^TC=n1∑i=1n(ni−nˉ)(ni−nˉ)T
其中nˉ=1n∑i=1nni\bar{n} = \frac{1}{n} \sum_{i=1}^n n_inˉ=n1∑i=1nni是邻域法向量的均值。
2. 协方差矩阵的物理意义
协方差矩阵CCC是一个对称矩阵,其特征值λ1,λ2,λ3\lambda_1, \lambda_2, \lambda_3λ1,λ2,λ3(按降序排列)反映邻域在三个主方向上的变化程度:
- 大特征值:对应方向变化剧烈(如边缘或角点)。
- 小特征值:对应方向变化平缓(如平面区域)。
3D Harris算法通过分析特征值的分布来检测关键点:
- 角点 :三个特征值均较大(λ1≈λ2≈λ3\lambda_1 \approx \lambda_2 \approx \lambda_3λ1≈λ2≈λ3)。
- 边缘 :两个特征值较大,一个较小(λ1≈λ2≫λ3\lambda_1 \approx \lambda_2 \gg \lambda_3λ1≈λ2≫λ3)。
- 平面 :一个特征值较大,两个较小(λ1≫λ2≈λ3\lambda_1 \gg \lambda_2 \approx \lambda_3λ1≫λ2≈λ3)。
3. 计算步骤与样例
样例数据
假设点ppp的邻域N(p)N(p)N(p)包含以下3个点(坐标形式):
q1=(1,2,3),q2=(2,3,4),q3=(3,4,5)q_1 = (1, 2, 3), \quad q_2 = (2, 3, 4), \quad q_3 = (3, 4, 5)q1=(1,2,3),q2=(2,3,4),q3=(3,4,5)
步骤1:计算质心qˉ\bar{q}qˉ
qˉ=(1+2+33,2+3+43,3+4+53)=(2,3,4)\bar{q} = \left( \frac{1+2+3}{3}, \frac{2+3+4}{3}, \frac{3+4+5}{3} \right) = (2, 3, 4)qˉ=(31+2+3,32+3+4,33+4+5)=(2,3,4)
步骤2:计算偏移向量qi−qˉq_i - \bar{q}qi−qˉ
q1−qˉ=(1−2,2−3,3−4)=(−1,−1,−1)q2−qˉ=(2−2,3−3,4−4)=(0,0,0)q3−qˉ=(3−2,4−3,5−4)=(1,1,1)q_1 - \bar{q} = (1-2, 2-3, 3-4) = (-1, -1, -1) \\ q_2 - \bar{q} = (2-2, 3-3, 4-4) = (0, 0, 0) \\ q_3 - \bar{q} = (3-2, 4-3, 5-4) = (1, 1, 1)q1−qˉ=(1−2,2−3,3−4)=(−1,−1,−1)q2−qˉ=(2−2,3−3,4−4)=(0,0,0)q3−qˉ=(3−2,4−3,5−4)=(1,1,1)
步骤3:计算外积矩阵(qi−qˉ)(qi−qˉ)T(q_i - \bar{q})(q_i - \bar{q})^T(qi−qˉ)(qi−qˉ)T
对于q1−qˉ=(−1,−1,−1)q_1 - \bar{q} = (-1, -1, -1)q1−qˉ=(−1,−1,−1):
(q1−qˉ)(q1−qˉ)T=[−1−1−1][−1−1−1]=[111111111](q_1 - \bar{q})(q_1 - \bar{q})^T = \begin{bmatrix} -1 \\ -1 \\ -1 \end{bmatrix} \begin{bmatrix} -1 & -1 & -1 \end{bmatrix}= \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix}(q1−qˉ)(q1−qˉ)T= −1−1−1 [−1−1−1]= 111111111
同理:
-q2−qˉq_2 - \bar{q}q2−qˉ的外积矩阵为000(零矩阵)。
-q3−qˉ=(1,1,1)q_3 - \bar{q} = (1, 1, 1)q3−qˉ=(1,1,1)的外积矩阵与q1q_1q1相同:
111111111\]\\begin{bmatrix} 1 \& 1 \& 1 \\\\ 1 \& 1 \& 1 \\\\ 1 \& 1 \& 1 \\end{bmatrix} 111111111 #### **步骤4:求和并平均得到协方差矩阵CCC** C=13(\[111111111\]+\[000000000\]+\[111111111\])=13\[222222222\]=\[232323232323232323\]C = \\frac{1}{3} \\left( \\begin{bmatrix} 1 \& 1 \& 1 \\\\ 1 \& 1 \& 1 \\\\ 1 \& 1 \& 1 \\end{bmatrix} + \\begin{bmatrix} 0 \& 0 \& 0 \\\\ 0 \& 0 \& 0 \\\\ 0 \& 0 \& 0 \\end{bmatrix} + \\begin{bmatrix} 1 \& 1 \& 1 \\\\ 1 \& 1 \& 1 \\\\ 1 \& 1 \& 1 \\end{bmatrix} \\right)= \\frac{1}{3} \\begin{bmatrix} 2 \& 2 \& 2 \\\\ 2 \& 2 \& 2 \\\\ 2 \& 2 \& 2 \\end{bmatrix}= \\begin{bmatrix} \\frac{2}{3} \& \\frac{2}{3} \& \\frac{2}{3} \\\\ \\frac{2}{3} \& \\frac{2}{3} \& \\frac{2}{3} \\\\ \\frac{2}{3} \& \\frac{2}{3} \& \\frac{2}{3} \\end{bmatrix}C=31 111111111 + 000000000 + 111111111 =31 222222222 = 323232323232323232 #### **步骤5:特征值分解** 协方差矩阵CCC的特征值为: λ1=2,λ2=0,λ3=0\\lambda_1 = 2, \\quad \\lambda_2 = 0, \\quad \\lambda_3 = 0λ1=2,λ2=0,λ3=0 (因为CCC的秩为1,仅有一个非零特征值。) **物理意义** : 此邻域在(1,1,1)(1,1,1)(1,1,1)方向上变化剧烈(如一条直线),而在其他方向无变化,因此检测为边缘特征而非角点。 *** ** * ** *** ### **4. 使用法向量的协方差矩阵计算** 若邻域点的法向量为: n1=(0.5,0.5,0.707),n2=(0.5,−0.5,0.707),n3=(−0.5,0,0.866)n_1 = (0.5, 0.5, 0.707), \\quad n_2 = (0.5, -0.5, 0.707), \\quad n_3 = (-0.5, 0, 0.866)n1=(0.5,0.5,0.707),n2=(0.5,−0.5,0.707),n3=(−0.5,0,0.866) (已归一化,即∥ni∥=1\\\|n_i\\\| = 1∥ni∥=1) #### **步骤1:计算法向量均值nˉ\\bar{n}nˉ** nˉ=(0.5+0.5−0.53,0.5−0.5+03,0.707+0.707+0.8663)≈(0.167,0,0.760)\\bar{n} = \\left( \\frac{0.5+0.5-0.5}{3}, \\frac{0.5-0.5+0}{3}, \\frac{0.707+0.707+0.866}{3} \\right) \\approx (0.167, 0, 0.760)nˉ=(30.5+0.5−0.5,30.5−0.5+0,30.707+0.707+0.866)≈(0.167,0,0.760) #### **步骤2:计算偏移向量ni−nˉn_i - \\bar{n}ni−nˉ** n1−nˉ≈(0.333,0.5,−0.053)n2−nˉ≈(0.333,−0.5,−0.053)n3−nˉ≈(−0.667,0,0.106)n_1 - \\bar{n} \\approx (0.333, 0.5, -0.053) \\\\ n_2 - \\bar{n} \\approx (0.333, -0.5, -0.053) \\\\ n_3 - \\bar{n} \\approx (-0.667, 0, 0.106)n1−nˉ≈(0.333,0.5,−0.053)n2−nˉ≈(0.333,−0.5,−0.053)n3−nˉ≈(−0.667,0,0.106) #### **步骤3:计算外积矩阵并求和** (此处省略具体矩阵计算,直接给出结果) C≈\[0.2220−0.03700.50−0.03700.006\]C \\approx \\begin{bmatrix} 0.222 \& 0 \& -0.037 \\\\ 0 \& 0.5 \& 0 \\\\ -0.037 \& 0 \& 0.006 \\end{bmatrix}C≈ 0.2220−0.03700.50−0.03700.006 #### **步骤4:特征值分解** 特征值约为: λ1≈0.5,λ2≈0.222,λ3≈0.006\\lambda_1 \\approx 0.5, \\quad \\lambda_2 \\approx 0.222, \\quad \\lambda_3 \\approx 0.006λ1≈0.5,λ2≈0.222,λ3≈0.006 **物理意义** : 三个特征值均较小且差异不大,说明邻域法向量分布均匀,可能为平面区域或噪声点。 *** ** * ** *** ### **5. 总结** * **协方差矩阵CCC** 是3D Harris算法的核心,通过邻域点的坐标或法向量计算。 * **特征值分析** 可区分角点、边缘和平面: * 角点:三个特征值均大且接近。 * 边缘:两个特征值大,一个小。 * 平面:一个特征值大,两个小。 * **计算步骤**:质心计算 → 偏移向量 → 外积矩阵 → 求和平均 → 特征值分解。 通过调整邻域大小和响应阈值,可优化关键点检测效果。