发明名称 基于B样条曲面的三维扫描的点云孔洞填补方法
摘要 一种能够提供曲面拟合精确度的基于B样条曲面的三维扫描的点云孔洞填补方法:首先在点云孔洞周围选择做为初步拟合曲面时需要的坐标点P<SUB>s</SUB>;其次通过基面投影法对拟合曲面时需要的坐标点P<SUB>s</SUB>进行参数化;然后用最小二乘法拟合选定的坐标点P<SUB>s</SUB>,得到初步拟合的B样条曲面S(u,v,);经过初步拟合后,点集P<SUB>s</SUB>与曲面S(u,v,)的距离误差还比较大,因此需要进一步修正曲面的控制顶点,改变曲面形状,使曲面S(u,v,)进一步逼近点集。基于此,根据以牛顿迭代法为基础的逼近方法,优化拟合的曲面,提高拟合精度;最后在拟合的曲面上基于曲率的等参数取线,再在线上等参数取点,得到填补孔洞的点,实现对孔洞的光滑填补。
申请公布号 CN1945626A 申请公布日期 2007.04.11
申请号 CN200610041318.X 申请日期 2006.08.14
申请人 东南大学 发明人 达飞鹏;朱春红
分类号 G06T5/00(2006.01);G06T15/00(2006.01) 主分类号 G06T5/00(2006.01)
代理机构 南京经纬专利商标代理有限公司 代理人 陆志斌
主权项 1、一种基于B样条曲面的三维扫描的点云孔洞填补方法,其特征在于:第一步:在点云孔洞周围且在屏幕坐标平面内设定一个四边形ABCD,该四边形ABCD的区域范围能使点云孔洞及其周围的点向屏幕坐标平面的投影落入四边形ABCD内,并将投影落入四边形ABCD内的点做为补孔时拟合曲面的点P<sub>s</sub>(s=0,1,…,t),根据基面投影法计算拟合曲面的点P<sub>s</sub>的曲面参数化坐标(u<sub>s</sub>,v<sub>s</sub>),该基面B(u,v)构造为:B(u,v)=(1-u)(1-v)P<sub>00</sub>+(1-u)vP<sub>01</sub>+u(1-v)P<sub>10</sub>+uvP<sub>11</sub>(u,v)∈[0,1;0,1]其中P<sub>00</sub>,P<sub>01</sub>,P<sub>10</sub>,P<sub>11</sub>分别为四边形ABCD的四个顶点A,B,C,D的坐标,将拟合曲面的点P<sub>s</sub>(s=0,1,…,t)向基面B(u,v)投影,该投影过程为:设给定拟合曲面的点P<sub>s</sub>的参数化坐标初始值为(u<sub>s</sub>,v<sub>s</sub>)(0≤u<sub>s</sub>,v<sub>s</sub>≤1),定义修正量为(δu<sub>s</sub>,δv<sub>s</sub>),那么拟合曲面的点P<sub>s</sub>与基面B(u,v)上的点B(u<sub>s</sub>+δu<sub>s</sub>,v<sub>s</sub>+δv<sub>s</sub>)间的距离D<sub>s</sub>为:‖D<sub>s</sub>‖=‖B(u<sub>s</sub>+δu<sub>s</sub>,v<sub>s</sub>+δv<sub>s</sub>)-P<sub>s</sub>‖将基面B(u,v)上的点B(u<sub>s</sub>+δu<sub>s</sub>,v<sub>s</sub>+δv<sub>s</sub>)在拟合曲面的点P<sub>s</sub>的曲面参数化坐标(u<sub>s</sub>,v<sub>s</sub>)处一阶Taylor展开后代入上式得:‖D<sub>s</sub>‖≈‖B(u<sub>s</sub>,v<sub>s</sub>)+B<sub>u</sub>δu<sub>s</sub>+B<sub>v</sub>δv<sub>s</sub>-P<sub>s</sub>‖式中,B<sub>u</sub>,B<sub>v</sub>是基面B(u,v)在拟合曲面的点P<sub>s</sub>的曲面参数化坐标(u<sub>s</sub>,v<sub>s</sub>)处分别对u,v的一阶偏导数,目标函数为<img file="A2006100413180002C1.GIF" wi="145" he="95" />欲使<img file="A2006100413180002C2.GIF" wi="122" he="94" />最小,可以使<img file="A2006100413180002C3.GIF" wi="107" he="92" />最小,那么:<maths num="001"><![CDATA[ <math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mo>&PartialD;</mo><msup><msub><mi>D</mi><mi>s</mi></msub><mn>2</mn></msup><mo>/</mo><mo>&PartialD;</mo><mi>&delta;</mi><msub><mi>u</mi><mi>s</mi></msub><mo>=</mo><mn>0</mn></mtd></mtr><mtr><mtd><mo>&PartialD;</mo><msup><msub><mi>D</mi><mi>s</mi></msub><mn>2</mn></msup><mo>/</mo><mo>&PartialD;</mo><mi>&delta;</mi><msub><mi>v</mi><mi>s</mi></msub><mo>=</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>,</mo><mrow><mo>(</mo><mi>s</mi><mo>=</mo><mn>0,1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>得到:<maths num="002"><![CDATA[ <math><mrow><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>B</mi><mi>u</mi></msub><mo>&CenterDot;</mo><msub><mi>B</mi><mi>u</mi></msub></mtd><mtd><msub><mi>B</mi><mi>v</mi></msub><mo>&CenterDot;</mo><msub><mi>B</mi><mi>u</mi></msub></mtd></mtr><mtr><mtd><msub><mi>B</mi><mi>u</mi></msub><mo>&CenterDot;</mo><msub><mi>B</mi><mi>v</mi></msub></mtd><mtd><msub><mi>B</mi><mi>v</mi></msub><mo>&CenterDot;</mo><msub><mi>B</mi><mi>v</mi></msub></mtd></mtr></mtable></mfenced><mfenced open='[' close=']'><mtable><mtr><mtd><mi>&delta;</mi><msub><mi>u</mi><mi>s</mi></msub></mtd></mtr><mtr><mtd><mi>&delta;</mi><msub><mi>v</mi><mi>s</mi></msub></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>h</mi><mi>s</mi></msub><mo>&CenterDot;</mo><msub><mi>B</mi><mi>u</mi></msub></mtd></mtr><mtr><mtd><msub><mi>h</mi><mi>s</mi></msub><mo>&CenterDot;</mo><msub><mi>B</mi><mi>v</mi></msub></mtd></mtr></mtable></mfenced><mo>,</mo><mrow><mo>(</mo><mi>s</mi><mo>=</mo><mn>0,1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中,符号″·″表示为向量之间的点积,符号″‖‖″表示为向量的模,h<sub>s</sub>=P<sub>s</sub>-B(u<sub>s</sub>,v<sub>s</sub>)。根据推导出的公式,解出δu<sub>s</sub>和δv<sub>s</sub>,然后将修改后的值u<sub>s</sub>=u<sub>s</sub>+δu<sub>s</sub>和v<sub>s</sub>=v<sub>s</sub>+δv<sub>s</sub>代入此式,以δu<sub>s</sub>、δv<sub>s</sub>为迭代步长求解,直到|δu<sub>s</sub>|和|δv<sub>s</sub>|均小于给定的迭代终值ε,一般经过2~3次迭代即可求出拟合曲面的点P<sub>s</sub>的参数化坐标(u<sub>s</sub>,v<sub>s</sub>),将拟合曲面的点P<sub>s</sub>(s=0,1,…,t)的坐标及其曲面参数化坐标(u<sub>s</sub>,v<sub>s</sub>)代入B样条曲面方程并用最小二乘法确定出曲面的控制顶点,得到初步拟合的B样条曲面S(u,v);第二步:求出各个拟合曲面的点P<sub>s</sub>(s=0,1,…,t)到曲面S(u,v)的距离向量d(u,v)=S(u,v)-P<sub>s</sub>,及曲面分别对对应点参数方向的偏微分S<sub>u</sub>(u,v),S<sub>v</sub>(u,v),令:<maths num="003"><![CDATA[ <math><mfenced open='{' close=''><mtable><mtr><mtd><mi>f</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</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></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></mrow><mo>=</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</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></mrow><mo>=</mo><mn>0</mn></mtd></mtr></mtable></mfenced></math>]]></maths>根据牛顿迭代法,得到如下迭代方程组:<maths num="004"><![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><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></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>vu</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></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></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></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,δu,δv为u,v两个方向上的迭代步长,S<sub>uu</sub>,S<sub>uv</sub>,S<sub>vv</sub>,S<sub>vu</sub>是曲面S(u,v)在点(u<sub>s</sub>,v<sub>s</sub>)处分别对u,v的二阶偏导数,迭代求解直到<maths num="005"><![CDATA[ <math><mrow><mn>1</mn><mo>/</mo><mi>t</mi><munderover><mi>&Sigma;</mi><mrow><mi>s</mi><mo>=</mo><mn>0</mn></mrow><mi>t</mi></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></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></mrow><mo>|</mo><mo>|</mo><mo>&le;</mo><mi>&gamma;</mi></mrow></math>]]></maths>γ为预置曲面拟合精度,从而得到最终确定的B样条曲面S′(u,v);第三步:在所述的B样条曲面S′(u,v)上基于曲率的等参数取线,再在线上等参数取点,用于填补点云孔洞,在求曲率的过程中首先需对三维点云进行删格划分,该删格划分为构造一个点云数据的最小外接正方体,其两两垂直的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="006"><![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="007"><![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="008"><![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="A2006100413180004C4.GIF" wi="69" he="54" />同理求出整个点云的平均曲率<img file="A2006100413180004C5.GIF" wi="71" he="54" />令d为整个点云的平均点距,则取点间隔<maths num="009"><![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>在B样条曲面上取点时,首先在曲面一个参数方向上以Δω等间隔取等参数曲线,再对每一条等参数曲线在另一个参数方向上以Δω等间隔取点,得到填补孔洞的点。
地址 210096江苏省南京市四牌楼2号