发明名称 一种基于点云姿态标准化的点云线特征提取方法
摘要 一种基于点云姿态标准化的点云线特征提取方法,它有六大步骤,适用于无序三维点云中线特征的提取,方便实现目标相对姿态的测量,属于三维测量和机器视觉技术领域。该方法首先构建点云的KD-TREE结构,以提高点云临近点集的搜索速度。然后根据整体点云密度构建每个点的临近点集,求出此点集的主方向并构建Householder变换矩阵调整点云姿态。接着对临近点集进行曲面拟合,进而基于曲面方程求出该点的两个主曲率,选择主曲率绝对值较大者作为该点曲率估计。最后,求出全部点云的曲率估计值,大于给定阈值的点作为线特征点,实现线特征提取。
申请公布号 CN102799763A 申请公布日期 2012.11.28
申请号 CN201210209643.8 申请日期 2012.06.20
申请人 北京航空航天大学 发明人 李旭东;赵慧洁;李伟;姜宏志
分类号 G06F19/00(2011.01)I;G01B11/00(2006.01)I 主分类号 G06F19/00(2011.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 1.一种基于点云姿态标准化的点云线特征提取方法,其特征在于:该方法具体步骤如下:步骤一:构建某点的临近点集:对点云经过滤波及去噪操作后,使用KD-TREE算法构建原始点云的树结构,根据点云的坐标分布将原始点云细分到不同区域,由于细分过程是基于坐标信息的,直接根据区域地址信息实现最近点的搜索,以大幅提高搜索速度,快速构建出指定点的临近点集;步骤二:计算临近点集主方向:使用PCA主成分分析法,根据点集坐标构建协方差矩阵,其最小特征值对应的特征向量即为主方向;设点p<sub>i</sub>的临近点集为<img file="FDA00001790000600011.GIF" wi="72" he="64" />r为点集内点云个数,即根据<img file="FDA00001790000600012.GIF" wi="48" he="49" />点的坐标,计算点集的主方向<img file="FDA00001790000600013.GIF" wi="45" he="59" />设<maths num="0001"><![CDATA[<math><mrow><msubsup><mi>P</mi><mi>i</mi><mi>r</mi></msubsup><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msubsup><mi>x</mi><mn>1</mn><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mn>1</mn><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mn>1</mn><mi>i</mi></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>x</mi><mn>2</mn><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mn>2</mn><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mn>2</mn><mi>i</mi></msubsup></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msubsup><mi>x</mi><mi>r</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mi>r</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mi>r</mi><mi>i</mi></msubsup></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>由PCA算法得点集的协方差矩阵为:<maths num="0002"><![CDATA[<math><mrow><msup><mrow><mo>(</mo><msubsup><mi>P</mi><mi>i</mi><mi>r</mi></msubsup><mo>)</mo></mrow><mi>T</mi></msup><mo>&CenterDot;</mo><msubsup><mi>P</mi><mi>i</mi><mi>r</mi></msubsup><mo>=</mo><msup><mfenced open='[' close=']'><mtable><mtr><mtd><msubsup><mi>x</mi><mn>1</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>x</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mn>1</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>y</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mn>1</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>z</mi><mi>n</mi><mi>i</mi></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>x</mi><mn>2</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>x</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mn>2</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>y</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mn>2</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>z</mi><mi>n</mi><mi>i</mi></msubsup></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msubsup><mi>x</mi><mi>r</mi><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>x</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mi>r</mi><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>y</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mi>r</mi><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>z</mi><mi>n</mi><mi>r</mi></msubsup></mtd></mtr></mtable></mfenced><mi>T</mi></msup><mfenced open='[' close=']'><mtable><mtr><mtd><msubsup><mi>x</mi><mn>1</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>x</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mn>1</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>y</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mn>1</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>z</mi><mi>n</mi><mi>i</mi></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>x</mi><mn>2</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>x</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mn>2</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>y</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mn>2</mn><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>z</mi><mi>n</mi><mi>i</mi></msubsup></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msubsup><mi>x</mi><mi>r</mi><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>x</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>y</mi><mi>r</mi><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>y</mi><mi>n</mi><mi>i</mi></msubsup></mtd><mtd><msubsup><mi>z</mi><mi>r</mi><mi>i</mi></msubsup><mo>-</mo><mfrac><mn>1</mn><mi>r</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow><mi>r</mi></munderover><msubsup><mi>z</mi><mi>n</mi><mi>i</mi></msubsup></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>结果为3×3的矩阵,对其特征分解得特征值λ<sub>1</sub>,λ<sub>2</sub>,λ<sub>3</sub>与对应的特征向量α<sub>1</sub>,α<sub>2</sub>,α<sub>3</sub>,若λ<sub>1</sub>=min(λ<sub>1</sub>,λ<sub>2</sub>,λ<sub>3</sub>),则主方向为α<sub>1</sub>;步骤三:点集姿态标准化:根据点集的主方向,构建Householder矩阵,对点集进行调整,使点集的主方向变成(0,0,1);首先将向量归一化得<img file="FDA00001790000600016.GIF" wi="193" he="136" />由Householder构建方法矩阵,令z=(0,0,1)<sup>T</sup>,<img file="FDA00001790000600021.GIF" wi="249" he="133" />则变换矩阵R=I-2bb<sup>T</sup>,调整后的点云为<img file="FDA00001790000600022.GIF" wi="351" he="76" />步骤四:点集曲面拟合:采用最小二乘方法,用曲面方程z=ax<sup>2</sup>+by<sup>2</sup>+cxy+dx+ey+f拟合点集,得到点集的曲面方程;假设目标曲面方程为z=ax<sup>2</sup>+by<sup>2</sup>+cxy+dx+ey+f,则有:<maths num="0003"><![CDATA[<math><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>z</mi><mn>1</mn></msub><mo>=</mo><msup><msub><mi>ax</mi><mn>1</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>by</mi><mn>1</mn></msub><mn>2</mn></msup><mo>+</mo><msub><mi>cx</mi><mn>1</mn></msub><msub><mi>y</mi><mn>1</mn></msub><mo>+</mo><msub><mi>dx</mi><mn>1</mn></msub><mo>+</mo><mi>e</mi><msub><mi>y</mi><mn>1</mn></msub><mo>+</mo><mi>f</mi></mtd></mtr><mtr><mtd><msub><mi>z</mi><mn>2</mn></msub><mo>=</mo><msup><msub><mi>ax</mi><mn>2</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>by</mi><mn>2</mn></msub><mn>2</mn></msup><mo>+</mo><msub><mi>cx</mi><mn>2</mn></msub><msub><mi>y</mi><mn>2</mn></msub><mo>+</mo><msub><mi>dx</mi><mn>2</mn></msub><mo>+</mo><mi>e</mi><msub><mi>y</mi><mn>2</mn></msub><mo>+</mo><mi>f</mi></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msub><mi>z</mi><mi>r</mi></msub><mo>=</mo><msup><msub><mi>ax</mi><mi>r</mi></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>by</mi><mi>r</mi></msub><mn>2</mn></msup><mo>+</mo><msub><mi>cx</mi><mi>r</mi></msub><msub><mi>y</mi><mi>r</mi></msub><mo>+</mo><msub><mi>dx</mi><mi>r</mi></msub><mo>+</mo><msub><mi>ey</mi><mi>r</mi></msub><mo>+</mo><mi>f</mi></mtd></mtr></mtable></mfenced></math>]]></maths>令<maths num="0004"><![CDATA[<math><mrow><mi>A</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd><mtd><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><msub><mi>x</mi><mn>1</mn></msub><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd><mtd><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd><mtd><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><msub><mi>x</mi><mn>2</mn></msub><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd><mtd><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msub><mi>x</mi><mi>r</mi></msub></mtd><mtd><msub><mi>y</mi><mi>r</mi></msub></mtd><mtd><msub><mi>x</mi><mi>r</mi></msub><msub><mi>y</mi><mi>r</mi></msub></mtd><mtd><msub><mi>x</mi><mi>r</mi></msub></mtd><mtd><msub><mi>y</mi><mi>r</mi></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>目标方程系数的确定最终转化为解线性方程(A<sup>T</sup>A)X=A<sup>T</sup>L;其中X=[a,b,c,d,e,f]<sup>T</sup>,L=[z<sub>1</sub>,z<sub>2</sub>…,z<sub>r</sub>]<sup>T</sup>,直接解线性方程得到所要拟合二次曲面的系数;步骤五:点曲率计算:将给定点沿着Z轴方向向二次曲面投影,根据曲面方程计算投影点处两个主曲率,选择绝对值较大者作为曲率估计值;对于特定点p<sub>i</sub>(x<sub>i</sub>,y<sub>i</sub>,z<sub>i</sub>),一般不会在拟合平面之上,此时需要用平面上该点的投影来代替,将p<sub>i</sub>沿着Z轴方向向曲面投影,则投影点为(x<sub>i</sub>,y<sub>i</sub>,ax<sub>i</sub><sup>2</sup>+by<sub>i</sub><sup>2</sup>+cx<sub>i</sub>y<sub>i</sub>+dx<sub>i</sub>+ey<sub>i</sub>+f);对于满足z=z(x,y)的特殊参数曲面,令<maths num="0005"><![CDATA[<math><mrow><mi>p</mi><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>z</mi></mrow><mrow><mo>&PartialD;</mo><mi>x</mi></mrow></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0006"><![CDATA[<math><mrow><mi>q</mi><mo>=</mo><mfrac><mrow><mo>&PartialD;</mo><mi>z</mi></mrow><mrow><mo>&PartialD;</mo><mi>y</mi></mrow></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0007"><![CDATA[<math><mrow><mi>r</mi><mo>=</mo><mfrac><mrow><msup><mo>&PartialD;</mo><mn>2</mn></msup><mi>z</mi></mrow><msup><mrow><mo>&PartialD;</mo><mi>x</mi></mrow><mn>2</mn></msup></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0008"><![CDATA[<math><mrow><mi>s</mi><mo>=</mo><mfrac><mrow><msup><mo>&PartialD;</mo><mn>2</mn></msup><mi>z</mi></mrow><mrow><mo>&PartialD;</mo><mi>x</mi><mo>&PartialD;</mo><mi>y</mi></mrow></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0009"><![CDATA[<math><mrow><mi>t</mi><mo>=</mo><mfrac><mrow><msup><mo>&PartialD;</mo><mn>2</mn></msup><mi>z</mi></mrow><mrow><mo>&PartialD;</mo><msup><mi>y</mi><mn>2</mn></msup></mrow></mfrac></mrow></math>]]></maths>若有:E=1+p<sup>2</sup>,F=pq,G=1+q<sup>2</sup><maths num="0010"><![CDATA[<math><mrow><mi>L</mi><mo>=</mo><mfrac><mi>r</mi><msqrt><mn>1</mn><mo>+</mo><msup><mi>p</mi><mn>2</mn></msup><mo>+</mo><msup><mi>q</mi><mn>2</mn></msup></msqrt></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0011"><![CDATA[<math><mrow><mi>M</mi><mo>=</mo><mfrac><mi>s</mi><msqrt><mn>1</mn><mo>+</mo><msup><mi>p</mi><mn>2</mn></msup><mo>+</mo><msup><mi>q</mi><mn>2</mn></msup></msqrt></mfrac><mo>,</mo></mrow></math>]]></maths><maths num="0012"><![CDATA[<math><mrow><mi>N</mi><mo>=</mo><mfrac><mi>t</mi><msqrt><mn>1</mn><mo>+</mo><msup><mi>p</mi><mn>2</mn></msup><mo>+</mo><msup><mi>q</mi><mn>2</mn></msup></msqrt></mfrac></mrow></math>]]></maths>则主曲率值满足方程:(EG-F<sup>2</sup>)k<sup>2</sup>-(LG-2MF+NE)k+(LN-M<sup>2</sup>)=0解k<sub>1</sub>,k<sub>2</sub>是曲面上该点的两个主曲率;乘积k<sub>1</sub>k<sub>2</sub>叫做高斯曲率,一般以K表示,均值<img file="FDA00001790000600034.GIF" wi="200" he="105" />叫做平均曲率,以H表示;分别用平均曲率、高斯曲率、最大主曲率、最小主曲率、主曲率绝对值较大值作为曲率估计指标;按照上述方法遍历求出每个点云的曲率估计值,均提取5%的最大曲率点作为特征点,对比观察提取效果,则用主曲率绝对值较大值效果最好;因为对于某一点来说,当它有一个方向变化很剧烈时从理解上是有条件成为特征点的,而对于另一个不同方向均比较大的点来说,在数值上可能其平均曲率高斯曲率会更大,但从特征提取的方面考虑,应选择能够更准确的反应结构变化的指标;步骤六:特征点筛选:重复上述5个步骤分别求出点云中每个点的曲率估计值,设定合适阈值,曲率估计值大于阈值的点作为线特征点,实现线特征提取。
地址 100191 北京市海淀区学院路37号