基于正则化条件的代数b-样条曲线的光栅化方法

文档序号:6367606阅读:126来源:国知局
专利名称:基于正则化条件的代数b-样条曲线的光栅化方法
技术领域
本发明涉及计算机代数曲线曲面造型技术,特别涉及一种基于正则化条件的代数B-样条曲线的光栅化方法。
背景技术
计算机辅助几何设计始兴于20世纪60年代,在计算机发展的影响下,为了利用计算机更高效地进行设计,人们开始寻找研究曲线或曲面的表示方法。随着计算机技术的发展,代数B-样条曲线更多的应用于曲线表示中。使用代数B-样条曲线表示方法的优点在于,代数B-样条曲线的控制系数具有几何意义,在编辑的过程中可以直观地通过改变控制系数控制曲线的形状。1989年,MIT的Patrikalakis教授和Kriezis将分段连续的B-样条基函数引入 到代数曲面的表示,提出了代数B-样条曲面。其二维表现形式是代数B-样条曲线。/O,y) = TjTj B11Nlk (X)Njl (y) = 0
;=0 ^=OX — [x0,X1 X2*** xk+m],y — [y〇,yi,y2…yL+n]代数B-样条曲线是代数B-样条曲线研究的基础,上式中,n、m分别为x、y方向上的控制系数的个数,k、l分别为x、y方向上的次数。Bu是代数B-样条曲线的控制系数,Ni,k(x)和Uy)是基于X、Y节点向量的B-样条基函数。代数B-样条曲线的节点向量和控制系数能很的反映曲线的特征。节点向量对曲线的影响对于次数相同的曲线,节点向量之间的距离反映了控制系数所能够影响的区域。原始节点向量差值越大,对应的控制系数影响的区域越大。对于重节点的情况,控制系数对相邻区域影响减少。当重节点次数等于曲线的次数,两边的控制系数相互不影响,可以把曲线分为两个代数B-样条曲线。因此,通过重节点插入算法,能够把代数B-样条曲线转化为分段代数B6zier曲线。控制系数对曲线的影响如果角点的控制系数为零,由端点插值性可以保证曲线通过该角点。如果对于n次的代数B-样条曲线,某方向上连续n+1个控制系数都大于零或者小于零,说明该n+1个控制系数对应的节点向量上没有曲线通过。对于某个控制系数B,如果B的绝对值越大,会使得曲线越远离所对应的控制节点,反之B绝对值越小,曲线越接近于控制节点。代数B-样条曲线具有良好的几何性质。变差缩减性对于给定的方向,沿该方向的直线与曲线的交点不多于控制系数在此方向上的变号次数。局部编辑能力对于给定的节点向量,每个控制系数所影响的区域为n+1个节点向量区间,n为曲线在该方向的次数,代数曲线中控制系数具有明显的几何意义,便于对曲面的直观编辑。光滑性在节点的区间内,曲线的光滑性为n,在没有重节点的节点上光滑性为n-1。代数B-样条曲线本质上也是代数曲线,只是在表现形式上有所不同。只是基函数不一样,所以可以实现幂基多项式表示的代数曲线和Bernstein基表示的代数B-样条曲线之间的互换。代数B-样条曲线也可以看成是二维标量场的零值等线。代数B-样条曲线在平面点云重建研究工作中有着独特的优势不需要对无序点云参数化,容易估算点到曲线的距离,方便加入各种约束条件优化结果。实际的应用中,快速高精度绘制代数B-样条曲线也是研究者关注的问题。现有技术中,主要针对幂基多项式的代数曲线绘制方法,运用求解曲线的子结式的方法精确的计算曲线上的特征点,这类算法实现效率较慢,不能有效的对曲线分段绘制,无法满足实时绘制的要求。

发明内容
本发明提供了一种基于正则化条件的代数B-样条曲线的光栅化方法,用简单的剖分方法,把代数B-样条曲线保拓扑的剖分为分段的简单曲线。该方法能够在像素精度内准确的绘制没有奇异点的像素曲线,同时给出了保拓扑的光栅化结果。 一种基于正则化条件的代数B-样条曲线的光栅化方法,包括如下步骤(I)输入待绘制的代数B-条样曲线及其相关信息;曲线的相关信息包括该曲线的节点向量以及控制系数;如没有特殊说明,本文中的曲线即指代数B-条样曲线。(2)将该曲线分片处理,转化为分段代数B6zier曲线,即用代数Bernstein多项式表示输入曲线分片处理后的每个曲线段;(3)根据屏幕空间参数,确定需显示的曲线段;(4)对需显示的曲线段,以细分的方式剖分该曲线段所对应的区域,得到每个子区域曲线的控制系数;检测每个子区域是否满足正则条件;对检测出的不满足正则条件的子区域,继续以细分的方式剖分,直到剖分后的子区域满足正则条件或者区域面积小于一个
像素;(5)对满足正则条件或虽不满足正则条件但区域面积小于一个像素的子区域,绘制该子区域的曲线并在屏幕显示。本发明首先将代数B-样条曲线转化为分片代数Bernstein多项式曲线,然后并行剖分每一段代数Bernstein多项式曲线,直至每一段子曲线满足正则化条件。该方法不仅可以将曲线界定至简单区域中,进而进行像素精度求精;而且可以将特征点逐步求精至像素精度,避免了时间空间复杂度很高的特征点计算。该方法实现了具有复杂拓扑的代数B-样条曲线的实时光栅化绘制;本发明的方法不同于现有技术中幂基多项式曲线的绘制方法,完全避免了求解特征点所需要的数值计算。在把代数B-样条曲线转化为分片代数Bezier曲线以后,利用Bernstein多项式所具有的凸包性,极大程度地加快了区间检测算法。本发明的方法所用的细分算法简单,且利于并行计算,计算的过程均可采用GPU,并实现加速。 下面介绍本发明的优选技术方案。进一步地,步骤⑵中,假设所述的曲线为X和y方向上双n次代数B-样条曲线;所述的将该曲线分片处理,包括步骤对于处在该曲线X或7方向上两端的节点向量进行节点插入,使其重节点数为n+1,
对于处在该曲线X或y方向上两端之间的节点向量进行节点插入,使其重节点数为n ;将每个非零的节点向量区间的曲线段分别转化为一个独立的代数B6zier曲线。更进一步地,步骤(2)中,所述的代数Bernstein多项式的表示形式为/(X,y) = ZZPvNr (X)N)(y) = 0① 0 0式①中,k、l分别为Bernstein多项式在x和y方向上的次数!Pij为Bernstein多项式的控制系数;<00、<(>0为X和y方向上的Bernstein基函数;i以及j分别表示为该二维矩阵的行数以及列数。作为优选,步骤⑷中,所述的以细分的方式剖分该曲线段所对应的区域,得到每个子区域曲线的控制系数,包括步骤将该曲线段所对应的区域细分为8*8的均匀子区域,通过插值计算的方法得到每个子区域的控制系数。进一步地,所述的插值计算的方法为de Casteljau算法。更进一步地,所述的de Casteljau算法,基于如下递推式Pn+i,m+i = (l-t)pn,m+tpnjm+1②通过式②可以得到新的控制系数
区间的控制系数可以表示为(Pu,P1,!,...,Pnin), [t,l]区间的控制系数可以表示为(PnWP1^n,...,P(l,n)。n为该方向的次数,m为中间递推变量,t为控制系数的分割点。优选地,所述的检测该区域是否满足正则条件,包括步骤检测Bernstein多项式的控制系数在x和y方向上的改变次数若X和y方向系数改变次数都为0,即所有的系数同号,区域内没有曲线,直接跳出;若X和y方向系数改变次数不全为0,但改变的次数都小于2,则对Bernstein多项式控制系数进行差分检测以判断是否满足正则条件;若存在X或y方向系数改变次数大于1,则不满足正则条件。进一步地,所述的对Bernstein多项式控制系数进行差分检测以判断是否满足正则条件,包括步骤将该Bernstein多项式在x或y方向上相邻的控制系数相减,检测所得到的差分结果是否同号若得到的所有差分结果同号,说明该区域满足正则化条件。若得到的所有差分结果不同号,说明该区域不满足正则化条件。优选地,步骤(5)中,所述的绘制该子区域的曲线,包括步骤对于满足正则条件的子区域,用扫描线对曲线进行采样;求出扫描线与该区域代数B6zier多项式曲线的交点,用B6zier点插入算法计算曲线上交点的坐标信息;对于不满足正则化条件且区域面积小于一个像素的子区域,计算该区域代数Bezier多项式曲线的边界点;结合反走样技术,绘制曲线。具体地,所述的结合反走样技术,绘制曲线,包括步骤
以预先设定半径的圆表示所述的交点以及边界点,计算该圆所覆盖像素面积的百分比,得到像素的灰度值。更为具体地,所述的圆的半径可预先设定为2 5个像素。上述技术方案基于的技术原理如下一、关于正则化条件。对于给定的代数B6zier曲面片,如果在某一定义域C内在x或y方向上的控制系数符号改变次数为0或者1,而且在该方向上相邻系数的差分不变号,那么称该函数在该定义域内为X或y方向上满足正则条件具体地,对于一维Bernstein多项式表示的曲线,正则定义可以理解为在曲线定义域为[a,b]的区间上,Bernstein多项式的系数最多只改变一次符号,其导函数的系数符号不变号。导函数的系数表示为A = I1(Pw-Pi),其中n是多项式次数,(Pci,Pl,...,pn)为原来曲线的控制系数,Ovr1,... ,Iv1)为曲线导数的控制系数。所以导函数的系数符号由相邻的两个控制系数的差值所决定的。一维情况的导函数的系数符号不变号,当且仅当原 始的Bernstein多项式为单调非递增数列。对于二维Bernstein多项式,代数B6zier曲线必须满足在定义域D内,曲线在x、y方向上均为正则,才能说代数B6zier曲线在该定义域D内满足正则化条件。综上,满足正则化条件的代数B6zier曲线,其拓扑由曲线和定义域D边界的交点决定。二、关于代数B6zier曲线的控制系数。若代数B6zier曲线在某一区域内满足正则条件,则说明该曲线的Bernstein多项式函数在该区域内在X和y方向上单调。因此,在该区域内的代数B6zier曲线最多只有一条曲线,且y相对于X是单调的。从上述进一步可知,如果该代数B6zier曲线的控制系数在x或y方向上改变次数为1,则该区域内必有一条曲线,否则该区域内没有任何曲线。三、关于曲线绘制过程的采样点。对于满足正则条件的子区域,所述的采样点即为上述技术方案中扫描线与该区域代数B6zier多项式曲线的交点。在该区域曲线的控制系数符号有改变的情况下,可以通过Bernstein多项式的凸包性质确定曲线和该区域的边界有且只有两个交点。在这个区域内,由这两个交点所连成的直线段也是曲线在该区域内的多边形化结果,并且Bernstein多项式对于x和y方向都是单调的;因此区域内的必然只有一条简单曲线,扫描线和该简单曲线最多只有一个交点。四、关于曲线绘制过程的反走样技术。曲线在理论上是没有宽度的,在绘制过程中,曲线本身不会覆盖像素的任何面积,只会经过像素。为了增强绘制曲线的效果,一般都把曲线理解为带有一定宽度。在曲线绘制过程,为了减少锯齿状现象,需要对带有线宽的曲线做反走样。通过计算带有线宽的曲线对像素区域的影响,有区别的显示不同像素的颜色值,从视觉上消除锯齿的效果。最简单的处理方法是计算出曲线覆盖像素面积的百分比,从而决定像素的灰度值。本发明的技术效果如下一、区间检测简单。利用正则化条件,检测在某个区域内是否有曲线通过,细分的结果能够保证只有一个简单曲线段通过该区域。正则化条件检测的过程中只有加减运算,保证了区域优化结果的收敛性。二、能够准确计算相互靠近的曲线。对于相互靠近的曲线,在正则化条件检测中会把该区域压缩到一个像素大小,最后通过B6zier插入算法计算曲线上点。这样避免了跟踪相互靠近曲线而带来的跟踪错误,也不用在子像素范围内跟踪曲线。三、算法并行计算。
由于Bernstein多项式表示的代数B6zier曲线具有统一形式的控制系数。随着硬件设备的快速发展,该算法细分过程能够在GPU上并行运算,保证实时绘制的要求。


图I为本发明方法的流程示意图;图2为本发明应用于4-4次代数B-样条曲线的效果示意图;图3为本发明应用于3-4次代数B-样条曲线的效果示意图;图4为本发明应用于3-3次代数B-样条曲线的效果示意图。
具体实施例方式本实施例基于的技术手段是把输入的曲线分片处理,在只有一条曲线段且Bernstein多项式保证单调性的区域,直接用扫描线的方法绘制。对于不满足上述条件的区域,用细分的方式剖分区域,直到最后的区域小于一定的范围(一般都是一个像素)。为了检测出Bernstein多项式单调性的区域,这里采用的是约束条件比较强而算法复杂度不高的正则化条件检测。剖分的过程包括把每个代数Bernstein多项式曲线的区域细分为8*8的子区间;通过de Casteljau算法确定对应区域的控制系数,对要绘制子区域做正则条件检测。整个算法流程在GPU上实现,利用并行处理所有细分计算和绘制过程,达到实时编辑的优点。如图I所示的一种基于正则化条件的代数B-样条曲线的光栅化方法,包括如下步骤(I)输入待绘制的代数B-条样曲线及其相关信息;曲线的相关信息包括该曲线的节点向量以及控制系数。具体地,在本实施例中,输入待绘制的代数B-条样曲线可用式al表示
n mf(x, = X Z BuN>,k (x)Nj,i (y) = 0……al
j=0 z=0x、y 方向上的节点向量设为 X = [x0, X1, X2…xk+m]以及 Y = [y0, Y1, y2***y1+n] ;n、m分别为x、y方向上的控制系数的个数,k、I分别为x、y方向上的次数;BU是代数B-样条曲线的控制系数,Ux)和NM(y)是基于X、Y节点向量的B-样条基函数;由于Bij在储存形式上均二维矩阵,其下标i、j分别表示为二维矩阵的行数以及列数。(2)将该曲线分片处理,转化为分段代数B6zier曲线,即用如式a2的代数Bernstein多项式表示输入曲线分片处理后的每个曲线段
权利要求
1.一种基于正则化条件的代数B-样条曲线的光栅化方法,包括如下步骤 (1)输入待绘制的代数B-条样曲线及其相关信息;曲线的相关信息包括该曲线的节点向量以及控制系数; (2)将该曲线分片处理,转化为分段代数B6zier曲线,即用代数Bernstein多项式表示输入曲线分片处理后的每个曲线段; (3)根据屏幕空间参数,确定需显示的曲线段; (4)对需显示的曲线段,以细分的方式剖分该曲线段所对应的区域,得到每个子区域曲线的控制系数;检测每个子区域是否满足正则条件;对检测出的不满足正则条件的子区域,继续以细分的方式剖分,直到剖分后的子区域满足正则条件或者区域面积小于一个像素; (5)对满足正则条件或虽不满足正则条件但区域面积小于一个像素的子区域,绘制该子区域的曲线并在屏幕显示。
2.如权利要求I所述的代数B-样条曲线的光栅化方法,其特征在于,步骤(2)中,假设所述的曲线为X和y方向上双n次代数B-样条曲线;所述的将该曲线分片处理,包括步骤 对于处在该曲线X或y方向上两端的节点向量进行节点插入,使其重节点数为n+1, 对于处在该曲线X或y方向上两端之间的节点向量进行节点插入,使其重节点数为n ; 将每个非零的节点向量区间的曲线段分别转化为一个独立的代数B6zier曲线。
3.如权利要求I所述的代数B-样条曲线的光栅化方法,其特征在于,步骤(2)中,所述的代数Bernstein多项式的表示形式为
4.如权利要求I所述的代数B-样条曲线的光栅化方法,其特征在于,步骤(4)中,所述的以细分的方式剖分该曲线段所对应的区域,得到每个子区域曲线的控制系数,包括步骤 将该曲线段所对应的区域细分为8*8的均匀子区域,通过插值计算的方法得到每个子区域的控制系数。
5.如权利要求4所述的代数B-样条曲线的光栅化方法,其特征在于,所述的插值计算的方法为de Casteljau算法。
6.如权利要求5所述的代数B-样条曲线的光栅化方法,其特征在于,所述的deCasteljau算法,基于如下递推式Pn+l,m+l = (1_t)Pn, m+tPn, m+1② 通过式②可以得到新的控制系数
区间的控制系数可以表示为(Pu,Pia,...,Pn,n),[t, I]区间的控制系数可以表示为(pn,n, Pdn, , pQ,n)。n为该方向的次数,m为中间递推变量,t为控制系数的分割点。
7.如权利要求I所述的代数B-样条曲线的光栅化方法,其特征在于,步骤(4)中,所述的检测该区域是否满足正则条件,包括步骤 检测Bernstein多项式的控制系数在x和y方向上的改变次数 若X和y方向系数改变次数都为O,即所有的系数同号,区域内没有曲线,直接跳出; 若X和y方向系数改变次数不全为O,但改变的次数都小于2,则对Bernstein多项式控制系数进行差分检测以判断是否满足正则条件; 若存在X或y方向系数改变次数大于1,则不满足正则条件。
8.如权利要求7所述的代数B-样条曲线的光栅化方法,其特征在于,所述的对Bernstein多项式控制系数进行差分检测以判断是否满足正则条件,包括步骤 将该Bernstein多项式在x或y方向上相邻的控制系数相减,检测所得到的差分结果是否同号 若得到的所有差分结果同号,说明该区域满足正则化条件。
若得到的所有差分结果不同号,说明该区域不满足正则化条件。
9.如权利要求I所述的代数B-样条曲线的光栅化方法,其特征在于,步骤(5)中,所述的绘制该子区域的曲线,包括步骤 对于满足正则条件的子区域,用扫描线对曲线进行采样;求出扫描线与该区域代数Bezier多项式曲线的交点,用B6zier点插入算法计算曲线上交点的坐标信息; 对于不满足正则化条件且区域面积小于一个像素的子区域,计算该区域代数B6zier多项式曲线的边界点; 结合反走样技术,绘制曲线。
10.如权利要求9所述的代数B-样条曲线的光栅化方法,其特征在于,所述的结合反走样技术,绘制曲线,包括步骤 以预先设定半径的圆表示所述的交点以及边界点,计算该圆所覆盖像素面积的百分t匕,得到像素的灰度值。
全文摘要
本发明公开了一种基于正则化条件的代数B-样条曲线的光栅化方法,包括步骤输入待绘制的代数B-条样曲线及其相关信息;将该曲线分片处理,转化为分段代数Bézier曲线;根据屏幕空间参数,确定需显示的曲线段;对需显示的曲线段,以细分的方式剖分该曲线段所对应的区域,得到每个子区域曲线的控制系数;检测每个子区域是否满足正则条件;对满足正则条件或虽不满足正则条件但区域面积小于一个像素的子区域,绘制该子区域的曲线并在屏幕显示。本发明可以将曲线界定至简单区域中,进行像素精度求精;可以将特征点逐步求精至像素精度,避免了时间空间复杂度很高的特征点计算;还实现了具有复杂拓扑的代数B-样条曲线的实时光栅化绘制。
文档编号G06F17/50GK102663184SQ20121009740
公开日2012年9月12日 申请日期2012年4月1日 优先权日2012年4月1日
发明者冯结青, 黄锦基 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1