发明名称 三维扫描的点云孔洞填补方法
摘要 本发明公开了一种基于三角域贝塞尔曲面的三维扫描的点云孔洞填补方法,它包括实物模型、三维数据采集、数据预处理、曲线曲面重构与分析、曲面拟合、CAD模型建模、数据编程加工、零件、测量数据库、CAD模拟库环节。本发明采用曲面拟合的方法能得到一张精确拟合孔洞周围散乱点集的曲面,从而在曲面上取点补孔时能保证较高的拟合精度。
申请公布号 CN1858801A 申请公布日期 2006.11.08
申请号 CN200610085328.3 申请日期 2006.06.08
申请人 东南大学 发明人 达飞鹏;朱春红
分类号 G06T15/00(2006.01) 主分类号 G06T15/00(2006.01)
代理机构 南京经纬专利商标代理有限公司 代理人 陆志斌
主权项 1、一种基于三角域贝塞尔曲面的三维扫描的点云孔洞填补方法,其特征在于:第一步:在点云孔洞周围且在屏幕坐标平面内设定一个三角形ABC,该三角形ABC的区域范围能使点云孔洞及其周围的点向屏幕坐标平面的投影落入三角形ABC内,并将投影落入三角形ABC内的点作为补孔时拟合曲面的点Ps(s=0,1,…,m-1),根据拟合曲面的点Ps在三角形ABC平面的投影Ps’位置计算其曲面参数化坐标(us,vs,ws),us=(ΔAPs’B面积)/(ΔABC面积)、vs=(ΔAPs’C面积)/(ΔABC面积)、ws=(ΔB Ps’C面积)/(ΔABC面积),将拟合曲面的点Ps(s=0, 1,…,m-1)的坐标及其曲面参数化坐标(us,vs,ws)代入n次Bezier曲面方程并用最小二乘法得到n次Bezier曲面的控制点,从而得到初步拟合的曲面S(u,v,w);第二步:求出各个拟合曲面的点Ps(s=0,1,…,m-1)到曲面的距离向量d(u,v,w)及曲面分别对对应点参数方向的偏微分Su(u,v,w),Sv(u,v,w),Sw(u,v,w),令:<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> 拟合曲面的点Ps的参数化坐标为(us,vs,ws),以(us,vs,ws)为初始估计值,根据牛顿迭代法求解以上方程组,有:HσT=κT 式中:σ=(δu,δv,δw),其中,δu,δv,δw为曲面u,v,w三个方向上的迭代步长。κ=-(f(us,vs,ws),g(us,vs,ws),h(us,vs,ws))<math> <mrow> <mi>H</mi> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msub> <mi>f</mi> <mi>u</mi> </msub> </mtd> <mtd> <msub> <mi>f</mi> <mi>v</mi> </msub> </mtd> <mtd> <msub> <mi>f</mi> <mi>w</mi> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>g</mi> <mi>u</mi> </msub> </mtd> <mtd> <msub> <mi>g</mi> <mi>v</mi> </msub> </mtd> <mtd> <msub> <mi>g</mi> <mi>w</mi> </msub> </mtd> </mtr> <mtr> <mtd> <msub> <mi>h</mi> <mi>u</mi> </msub> </mtd> <mtd> <msub> <mi>h</mi> <mi>v</mi> </msub> </mtd> <mtd> <msub> <mi>h</mi> <mi>w</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>uu</mi> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mi>v</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>u</mi> </msub> <mo>+</mo> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>uv</mi> </msub> </mtd> <mtd> <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> <msub> <mi>S</mi> <mi>uw</mi> </msub> </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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>vw</mi> </msub> </mtd> <mtd> <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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>vv</mi> </msub> </mtd> <mtd> <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> <msub> <mi>S</mi> <mi>vw</mi> </msub> </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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>wu</mi> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mi>v</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>w</mi> </msub> <mo>+</mo> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>wv</mi> </msub> </mtd> <mtd> <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> <msub> <mi>S</mi> <mi>ww</mi> </msub> </mtd> </mtr> </mtable> </mfenced> </mrow> </math> 式中,d=d(us,vs,ws);fu,fv,fw,gu,gv,gw,hu,hv,hw分别表示在点(us,vs,ws)处相应的向量对u,v,w的一阶偏导数;Suu,Suv,Suw,Svv,Svu,Svw,Sww,Swu,Swv 是曲面S(u,v,w)在点(us,vs,ws)处分别对u,v,w的二阶偏导数。则可得:<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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>uu</mi> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mi>v</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>u</mi> </msub> <mo>+</mo> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>uv</mi> </msub> </mtd> <mtd> <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> <msub> <mi>S</mi> <mi>uw</mi> </msub> </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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>vw</mi> </msub> </mtd> <mtd> <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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>vv</mi> </msub> </mtd> <mtd> <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> <msub> <mi>S</mi> <mi>vw</mi> </msub> </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> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>wu</mi> </msub> </mtd> <mtd> <msub> <mi>S</mi> <mi>v</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>w</mi> </msub> <mo>+</mo> <mi>d</mi> <mo>&CenterDot;</mo> <msub> <mi>S</mi> <mi>wv</mi> </msub> </mtd> <mtd> <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> <msub> <mi>S</mi> <mi>ww</mi> </msub> </mtd> </mtr> </mtable> </mfenced> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <mi>&delta;u</mi> </mtd> </mtr> <mtr> <mtd> <mi>&delta;v</mi> </mtd> </mtr> <mtr> <mtd> <mi>&delta;w</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> 根据三角Bezier曲面的定义可知δu+δv+δw=0,即δw=-δu-δv,因此得到如下迭代方程组:<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> </mtd> <mtd> <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>vw</mi> </msub> <mo>)</mo> </mrow> </mtd> <mtd> <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> </mtd> <mtd> <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> 其中,δu,δv为曲面u,v两个方向上的迭代步长。Suu,Suv,Suw,Svv,Svu,Suw,Sww,Swu,Swv是曲面S(u,v,w)在点(us,vs,ws)处分别对u,v,w的二阶偏导数,迭代求解直到<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> ε为预置曲面拟合精度,从而得到最终确定的三角Bezier曲面S′(u,v,w);第三步:在所述的三角Bezier曲面S′(u,v,w)上取线,再在线上取点,用于填补点云孔洞。
地址 210096江苏省南京市四牌楼2号