发明名称 三维扫描的点云孔洞填补方法
摘要 本发明公开了一种能够提供曲面拟合精确度的三维扫描的点云孔洞填补方法。在点云孔洞周围选择作为初步拟合曲面时需要的坐标点P<SUB>s</SUB>,用最小二乘法拟合选定的坐标点P<SUB>s</SUB>,得到初步拟合曲面S(u,v,w)。根据牛顿迭代法为基础的逼近方法,进一步优化拟合曲面,提高拟合精度。在拟合的曲面上基于曲率的等参数取线,再在线上等参数取点,求得填补空洞的点,达到对孔洞的光滑拟合填充。本发明采用曲面拟合的方法能得到一张精确拟合孔洞周围散乱点集的曲面,能保证一定的光顺性和保形性。
申请公布号 CN1885349A 申请公布日期 2006.12.27
申请号 CN200610088244.5 申请日期 2006.07.05
申请人 东南大学 发明人 达飞鹏;朱春红
分类号 G06T17/00(2006.01) 主分类号 G06T17/00(2006.01)
代理机构 南京经纬专利商标代理有限公司 代理人 陆志斌
主权项 1、一种三维扫描的点云孔洞填补方法,其特征在于:第一步:在点云孔洞周围且在屏幕坐标平面内设定一个三角形ABC,该三角形ABC的区域范围能使点云孔洞及其周围的点向屏幕坐标平面的投影落入三角形ABC内,并将投影落入三角形ABC内的点作为补孔时拟合曲面的点P<sub>s</sub>(s=0,1,…,m-1),根据拟合曲面的点P<sub>s</sub>在三角形ABC平面的投影P<sub>s</sub>’位置计算其曲面参数化坐标(u<sub>s</sub>,v<sub>s</sub>,w<sub>s</sub>),u<sub>s</sub>=(ΔAP<sub>s</sub>’B面积)/(ΔABC面积)、v<sub>s</sub>=(ΔAP<sub>s</sub>’C面积)/(ΔABC面积)、w<sub>s</sub>=(ΔBP<sub>s</sub>’C面积)/(ΔABC面积),将拟合曲面的点P<sub>s</sub>(s=0,1,…,m-1)的坐标及其曲面参数化坐标(u<sub>s</sub>,v<sub>s</sub>,w<sub>s</sub>)代入n次Bezier曲面方程并用最小二乘法得到n次Bezier曲面的控制点,从而得到初步拟合的曲面S(u,v,w);第二步:求出各个拟合曲面的点P<sub>s</sub>(s=0,1,…,m-1)到曲面的距离向量d(u,v,w)及曲面分别对对应点参数方向的偏微分S<sub>u</sub>(u,v,w),S<sub>v</sub>(u,v,w),S<sub>w</sub>(u,v,w),令:<maths num="001"><![CDATA[ <math><mfenced open='{' close=''><mtable><mtr><mtd><mi>f</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>&CenterDot;</mo><msub><mi>S</mi><mi>u</mi></msub><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><mn>0</mn></mtd></mtr><mtr><mtd><mi>g</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>&CenterDot;</mo><msub><mi>S</mi><mi>v</mi></msub><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><mn>0</mn></mtd></mtr><mtr><mtd><mi>h</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>&CenterDot;</mo><msub><mi>S</mi><mi>w</mi></msub><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><mn>0</mn></mtd></mtr></mtable></mfenced></math>]]></maths>根据牛顿迭代法,得到如下迭代方程组:<maths num="002"><![CDATA[ <math><mrow><mfenced open='[' close=']'><mtable><mtr><mtd><msup><mrow><mo>|</mo><mo>|</mo><msub><mi>S</mi><mi>u</mi></msub><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mo>-</mo><msub><mi>S</mi><mi>w</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>u</mi></msub><mo>+</mo><mi>d</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>S</mi><mi>uu</mi></msub><mo>-</mo><msub><mi>S</mi><mi>uw</mi></msub><mo>)</mo></mrow><msub><mi>S</mi><mi>v</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>u</mi></msub><mo>-</mo><msub><mi>S</mi><mi>w</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>u</mi></msub><mo>+</mo><mi>d</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>S</mi><mi>uv</mi></msub><mo>-</mo><msub><mi>S</mi><mi>uw</mi></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>S</mi><mi>u</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>v</mi></msub><mo>-</mo><msub><mi>S</mi><mi>w</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>v</mi></msub><mo>+</mo><mi>d</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>S</mi><mi>vu</mi></msub><mo>-</mo><msub><mi>S</mi><mi>uw</mi></msub><mo>)</mo></mrow><msup><mrow><mo>|</mo><mo>|</mo><msub><mi>S</mi><mi>v</mi></msub><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mo>-</mo><msub><mi>S</mi><mi>w</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>v</mi></msub><mo>+</mo><mi>d</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>S</mi><mi>vv</mi></msub><mo>-</mo><msub><mi>S</mi><mi>vw</mi></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>S</mi><mi>u</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>w</mi></msub><mo>-</mo><msup><mrow><mo>|</mo><mo>|</mo><msub><mi>S</mi><mi>w</mi></msub><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mo>+</mo><mi>d</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>S</mi><mi>wu</mi></msub><mo>-</mo><msub><mi>S</mi><mi>ww</mi></msub><mo>)</mo></mrow><msub><mi>S</mi><mi>v</mi></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mi>w</mi></msub><mo>-</mo><msup><mrow><mo>|</mo><mo>|</mo><msub><mi>S</mi><mi>w</mi></msub><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mo>+</mo><mi>d</mi><mo>&CenterDot;</mo><mrow><mo>(</mo><msub><mi>S</mi><mi>wv</mi></msub><mo>-</mo><msub><mi>S</mi><mi>ww</mi></msub><mo>)</mo></mrow></mtd></mtr></mtable></mfenced><mfenced open='[' close=']'><mtable><mtr><mtd><mi>&delta;u</mi></mtd></mtr><mtr><mtd><mi>&delta;v</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mo>-</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>f</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>s</mi></msub><mo>,</mo><msub><mi>v</mi><mi>s</mi></msub><mo>,</mo><msub><mi>w</mi><mi>s</mi></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mi>g</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>s</mi></msub><mo>,</mo><msub><mi>v</mi><mi>s</mi></msub><mo>,</mo><msub><mi>w</mi><mi>s</mi></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mi>h</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>s</mi></msub><mo>,</mo><msub><mi>v</mi><mi>s</mi></msub><mo>,</mo><msub><mi>w</mi><mi>s</mi></msub><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,δu,δv为u,v两个方向上的迭代步长,S<sub>uu</sub>,S<sub>uv</sub>,S<sub>uw</sub>,S<sub>vv</sub>,S<sub>vu</sub>,S<sub>vw</sub>,S<sub>ww</sub>,S<sub>wu</sub>,S<sub>wv</sub>是曲面S(u,v,w)在点(u<sub>s</sub>,v<sub>s</sub>,w<sub>s</sub>)处分别对u,v,w的二阶偏导数,迭代求解直到<maths num="003"><![CDATA[ <math><mrow><mn>1</mn><mo>/</mo><mi>m</mi><munderover><mi>&Sigma;</mi><mrow><mi>s</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>m</mi><mo>-</mo><mn>1</mn></mrow></munderover><mo>|</mo><mo>|</mo><mi>d</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>s</mi></msub><mo>+</mo><mi>&delta;u</mi><mo>,</mo><msub><mi>v</mi><mi>s</mi></msub><mo>+</mo><mi>&delta;v</mi><mo>,</mo><msub><mi>w</mi><mi>s</mi></msub><mo>+</mo><mi>&delta;w</mi><mo>)</mo></mrow><mo>-</mo><mi>d</mi><mrow><mo>(</mo><msub><mi>u</mi><mi>s</mi></msub><mo>,</mo><msub><mi>v</mi><mi>s</mi></msub><mo>,</mo><msub><mi>w</mi><mi>s</mi></msub><mo>)</mo></mrow><mo>|</mo><mo>|</mo><mo>&le;</mo><mi>&epsiv;</mi><mo>,</mo></mrow></math>]]></maths>ε为预置曲面拟合精度,从而得到最终确定的三角Bezier曲面S’(u,v,w);第三步:在所述的三角Bezier曲面S’(u,v,w)上基于曲率的等参数取线,再在线上等参数取点,用于填补点云孔洞,在求曲率的过程中首先需对三维点云进行删格划分,该删格划分为构造一个点云数据的最小外接正方体,其两两垂直的3条边分别与笛卡儿坐标系的3个坐标轴平行,沿三个坐标轴方向划分成边长为L空间六面体立方删格,其次在拟合曲面的点P<sub>s</sub>的27个邻近子包围盒内求出其k个邻近点,然后设拟合曲面的点P<sub>s</sub>和其k个邻近点组成集合K(P<sub>s</sub>),S(P<sub>s</sub>)为拟合曲面的点P<sub>s</sub>的k个邻近点最小二乘拟合平面,令P为拟合曲面的点P<sub>s</sub>的k个邻近点集合K(P<sub>s</sub>)的形心,称为拟合曲面的点P<sub>s</sub>的中心点,该中心点为:<maths num="004"><![CDATA[ <math><mrow><mover><mi>P</mi><mo>&OverBar;</mo></mover><mo>=</mo><mfrac><mn>1</mn><mrow><mo>(</mo><mi>k</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mfrac><munder><mi>&Sigma;</mi><mrow><msub><mi>P</mi><mi>s</mi></msub><mo>&Element;</mo><mi>K</mi><mrow><mo>(</mo><msub><mi>P</mi><mi>s</mi></msub><mo>)</mo></mrow></mrow></munder><msub><mi>P</mi><mi>s</mi></msub></mrow></math>]]></maths>设拟合曲面的点P<sub>s</sub>的第j个邻近点到最小二乘平面S(P<sub>s</sub>)的距离为d<sub>j</sub>,到P的距离为λ<sub>j</sub>,那么对拟合曲面的点P<sub>s</sub>的第j个点存在函数f<sub>j</sub>(P<sub>s</sub>),该函数f<sub>j</sub>(P<sub>s</sub>)为:<maths num="005"><![CDATA[ <math><mrow><msub><mi>f</mi><mi>j</mi></msub><mrow><mo>(</mo><msub><mi>P</mi><mi>s</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><msub><mi>d</mi><mi>j</mi></msub><msub><mi>&lambda;</mi><mi>j</mi></msub></mfrac></mrow></math>]]></maths>那么拟合曲面的点P<sub>s</sub>的曲率函数可以表示为<maths num="006"><![CDATA[ <math><mrow><mi>f</mi><mrow><mo>(</mo><msub><mi>P</mi><mi>s</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mn>1</mn><mi>k</mi></mfrac><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></munderover><msub><mi>f</mi><mi>j</mi></msub><mrow><mo>(</mo><msub><mi>P</mi><mi>s</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths>根据曲率函数f(P<sub>s</sub>)求出,拟合曲面的点P<sub>s</sub>的平均曲率<img file="A2006100882440003C2.GIF" wi="92" he="66" />同理求出整个点云的平均曲率<img file="A2006100882440003C3.GIF" wi="96" he="58" />令d为整个点云的平均点距,则取点间隔<maths num="007"><![CDATA[ <math><mrow><mi>&Delta;&omega;</mi><mo>=</mo><mover><msub><mi>&rho;</mi><mn>0</mn></msub><mo>&OverBar;</mo></mover><mo>&times;</mo><mover><mi>d</mi><mo>&OverBar;</mo></mover><mo>/</mo><mover><msub><mi>&rho;</mi><mi>s</mi></msub><mo>&OverBar;</mo></mover><mo>,</mo></mrow></math>]]></maths>在Bezier曲面片上取点时,首先在曲面一个参数方向上以Δω等间隔取等参数曲线,再对每一条等参数曲线在另一个参数方向上以Δω等间隔取点,求得填补孔洞的点。
地址 210096江苏省南京市四牌楼2号
您可能感兴趣的专利