一种误差可控的细分曲面图像矢量化方法与流程

文档序号:11515781阅读:440来源:国知局
一种误差可控的细分曲面图像矢量化方法与流程

本发明涉及利用细分曲面技术进行图像矢量化的领域,尤其是指一种误差可控的细分曲面图像矢量化方法,目的是将光栅图像转换为满足误差要求的矢量表示。



背景技术:

在计算机中,图像有两种典型的表示方式,一种是光栅图像,也称为位图、点阵图像,一种是矢量图像,也称矢量图形、矢量表示。与光栅图像相比,矢量图形具有很多优点,如存储量小,易编辑,分辨率无关等。随着显示设备多样化的发展和分辨率的提高,矢量图像的优势日益凸显。图像矢量化的目的就是将点阵图像转换为矢量图像。

近年来,学者们提出很多不同的图像矢量化算法。各种不同的几何图元被提出用来表示矢量图,包括直线、曲线、三角网格、参数曲面、细分曲面、扩散曲线等。然而,由于图像具有复杂的特征曲线和丰富的颜色变化,现有的这些矢量表示方式都存在共同的难点,一个是如何用较少的图元很好地表示出原图像,一个是该矢量表示的可编辑性。细分曲面具有良好的光顺性、适合表示任意复杂拓扑的物体、可编辑性强等诸多优点。文献[liaoz,hoppeh,forsythd,etal.asubdivision-basedrepresentationforvectorimageediting[j].ieeetransactionsonvisualizationandcomputergraphics,2012,18(11):1858-1867.]中,liao等人提出基于分段光滑细分曲面表示的矢量图编辑算法。该矢量图表示方式具有强大的可编辑能力,而且可以实现多分辨率,一定条件下,当几何图元的数目增加时,分辨率越高,反之越低。但该算法也存在一些问题,首先该方法通过分裂亚像素边缘来建模图像边缘两侧颜色值的不连续,但是采用的亚像素边缘提取不够准确,得到的两侧的颜色值不准确,而且其矢量化结果过度依赖于基网格,不能做到误差可控。因此本发明对该框架的方法进行研究和改进,做到一定范围内的误差控制。



技术实现要素:

本发明的目的在于克服liao等人提出的细分曲面表示的图像矢量化算法的不足,提出了一种误差可控的细分曲面图像矢量化方法,对矢量化结果做到一定范围内的误差控制,满足用户的误差要求。

为实现上述目的,本发明所提供的技术方案为:一种误差可控的细分曲面图像矢量化方法,包括以下步骤:

1)检测图像边缘特征

图像边缘是最显著的图像特征,为了在构造保持图像特征的基网格,使用图像边缘线段检测方法来提取图像的一个像素宽的特征线,其步骤为:

①高斯滤波:用高斯核卷积图像来抑制图像噪声和平滑图像;

②计算梯度幅值和边缘方向图:首先使用梯度算子分别计算出像素点的水平和垂直梯度,然后算出图像梯度幅值图,与此同时,比较像素水平和垂直梯度的大小,确定该像素点的边缘方向,如果水平梯度较大,则认为通过该像素是个垂直方向边缘,反之亦然;

③提取锚点:锚点可以被认为是边缘结束的地方,即在水平和垂直方向特征变化剧烈的像素点,这里选择局部梯度极值作为锚点,通过比较像素点与其相邻像素点的梯度值来判断该像素点是否是锚点,对于一个水平方向的像素点,将其与左右相邻的像素点比较,如果该像素点的梯度值比左右相邻像素梯度值大指定阈值,则认为该像素点为锚点;

④连接锚点形成线段:根据梯度幅值和边缘方向图来连接相邻锚点,每次从还未被检测过的锚点开始,观察穿过该锚点的边缘方向,如果是水平边缘,通过向左和向右行进开始连接过程,如果垂直边缘通过锚点,通过向上和向下行进进行连接过程,在移动期间,仅考虑三个直接邻居像素,并且选择具有最大梯度值的那个邻居像素,当遇到梯度幅值为0的像素点或遇到之前已经检测过的边缘像素时,该次处理过程停止;

2)构造基于图像特征的初始网格,并在网格中标记图像特征

在2d图像平面上建立像素分辨率的初始三角网格m。首先建立初始网格顶点,图像中的每个像素点对应网格中的一个顶点,并在顶点的属性中记录像素点的颜色值;然后以行和列的方式连接网格顶点形成矩形网格,根据图像特征线将网格中的每个矩形网格划分成两个三角网格。

图像颜色不连续性与至少两个具有非常不同颜色强度的相邻像素相关联,单独的图像边缘线不足以表示图像颜色的不连续性。因此本发明提出使用双特征线来表示图像颜色的不连续。该策略首先使用等值线追踪算法找出图像特征两侧的距离一像素的平行线段,然后通过比较两侧的图像梯度选择平均梯度大的线段作为另一特征线,并对受影响的三角网格进行重新三角化。

接下来,对初始网格的边和顶点的类型进行标记,从而在后续的网格简化、细分等操作中对不同的类型进行不同的处理以保持重要的图像特征。本发明将网格的边分为三种类型:边界边、平滑边、折痕边,将网格的顶点分为四种类型:边界点、平滑点、折痕点、角点。将图像的双特征线标记为折痕边,将图像矩阵边界的边标记为边界边,其他边为平滑边。对于网格顶点,如果顶点只与平滑边缘连接,则该顶点标记为平滑点;折痕顶点与两条邻接的折痕边连接;边界点与两条邻接的边界边连接;图像特征线端点、特征线交叉点标记为角点。为了固定矩形图像边界,四个角被标记为角点。

3)简化初始网格,构造保持图像特征的基网格

采用qem简化算法来简化图像初始网格,得到基网格mb,将网格的颜色属性看成高度场来计算二次误差代价,并且在简化过程中使用细分曲线来拟合图像特征线段来保持图像特征;

在上一步骤中,根据图像特征对网格的顶点和边做了分类。为了保持图像的形状和特征,对于不同的特征采取不同的处理方式:①角点不允许被折叠;②边界点只能与其邻接的同边界的两个边界点折叠;③折痕点只能与其邻接的同折痕边的两个折痕点折叠;④滑点可以折叠到特征点。

此外,为了得到一个高质量的保持图像特征的基网格,改进qem算法的边折叠代价,在边折叠代价中加入特征边形变代价qfeature、三角形正则性代价qre、面积代价qarea,并赋予它们相应的权重,用qqem表示qem代价,则能够把边折叠的代价表示为:

cost(v1,v2)=αqqem(v1,v2)+βqfeature(v1,v2)+γqre(v1,v2)+δqarea(v1,v2)(1)

式中,权重α,β,γ,δ由用户指定,边折叠顺序按照cost(v1,v2)从小到大进行。需要特别说明的是,为了保证简化后二维网格的质量,除了在计算qem代价时,将网格m的颜色属性看成高度场,在计算其他代价时,考虑的都只是二维图像网格,不考虑颜色属性。其中qem代价qqem、特征边形变代价qfeature、三角形正则性代价qre、面积代价qarea的定义如下:

qem代价qqem:用二次误差代价来计算边的二次误差代价,其衡量的是三维空间点到平面的距离,而网格m是个二维网格,所以将网格m的颜色属性看成高度场,分别用rgb的值作为高度,则每条边可计算出三个代价,将其和作为该边的二次误差代价qqem;

特征边形变代价qfeature:qem代价没有考虑到模型的尖锐特征,不能反映图像的特征,定义qfeature为折叠前的特征点到其邻接的两个特征点连线的距离,用来衡量特征边折叠结果与折叠点的偏离程度,qfeature值越小,表明偏离越小,如果折叠的边是非特征边,则qfeature值为0;

三角形正则性代价qre:在边折叠代价中加入三角形正则性代价是为了减少狭长的三角面片的出现,三角形的正则性被用来表示其接近正三角形的程度,能够用r(t)=cos(∠a)+cos(∠b)+cos(∠c)来度量三角形t=δabc的正则性,令re(t)=3-2r(t),则0≤re(t)≤1,re(t)的值越小,表明该三角形的正则性越高,则定义三角面片集合t的正则性为:

re(t)=maxre(t)(2)

把qre定义为边折叠前后,相关三角面片的正则性增量,则边折叠的正则性代价定义为:

其中,表示顶点的邻接三角面片;

面积代价qarea:三角形正则性代价qre反映了三角面片的形状,没有反映面片大小,因此,在总代价中加入面积代价来约束面片的面积,把面积代价qarea定义为边折叠后新顶点所有邻接面的面积总和,则边折叠的面积代价定义为:

其中,area(t)表示三角形t的面积。

其中,网格简化算法的主要步骤如下:

①设置边折叠代价公式(1)中的各项权值;

②将网格m的颜色属性看成高度场,计算网格所有边的qem代价qqem;

③计算所有可折叠边的折叠代价,根据折叠代价将其放入最小堆中,根据公式(1)计算出每条边对应的两条半边的折叠代价,则边的折叠代价取两个半边代价的小值,并记录折叠方向;

④从堆中取出最小折叠代价的边,判断其折叠后相关面是否会反生翻转,若会,则给该边的代价加一个惩罚值,更新其在堆中的位置;若不会反生翻转,则判断该边是否是特征边,若是特征边,拟合调整特征点的位置并判断其折叠后拟合误差是否符合要求,若不符合,则不折叠该边,将其从堆中删除;否则就完成该边的折叠操作,重新计算相关边的折叠代价并更新它们在堆中的位置;

⑤若达到简化的要求或最小堆为空,则转到⑥,否则转到④;

⑥删除网格中的独立顶点,更新网格,输出基网格。

虽然在网格简化过程中考虑了面片正则性、面积等因素,但是仍不能保证能得到一个高质量基网格,因此使用最简单的laplacian算子对网格进行几何优化:

其中n(v)和|n(v)|分别表示顶点v的1邻域的所有顶点集合和个数。网格中顶点的新位置由vnew=v+λδv迭代式给出,其中λ取值为0.3。

为了保持图像的特征,对网格特征顶点进行特殊处理:首先,角点不进行移动,对于边界顶点和特征点v,设(va,v)和(v,vb)为v所在的两条特征边,则v只根据va和vb的位置进行调整,即laplacian算子定义为:

需要说明的是,网格优化能够在网格简化的过程中进行,也能够在网格简化结束后进行,如果网格优化会造成面片翻转,则暂时不进行优化。

4)误差可控的loop细分曲面拟合求得控制网格

经过网格的简化和优化得到反映图像特征的基网格后,提出带误差控制的loop细分曲面拟合来对图像颜色进行拟合,在计算控制网格的过程中进行误差控制,用户可以通过指定重构图像的误差来获得满足需求的矢量图像。该过程主要包括三个部分:控制网格的计算、误差控制以及自适应细分,具体如下:

4.1)控制网格的计算。

为了增加拟合目标的数据量,我们首先对基网格mb进行一次1-4细分得到网格然后使用网格对原图像进行采样得到mr,将mr作为我们拟合的目标。像素点的颜色值在图像特征区域有着显著的变化,为了采样到准确的颜色值,我们对不同的网格特征采用不同的采样方式得到顶点的颜色值:对于折痕顶点,它的目标颜色为它所在的图像特征线上和它位置最接近的像素点的颜色值;对于角点,它在简化过程和细分过程中的位置都没有移动,所以它的目标颜色为顶点坐标确定的图像像素点的颜色值;对于平滑顶点,其颜色由其周围的像素点进行双线性插值得到。

在网格简化过程中已经拟合了网格的特征顶点位置,为了计算方便,这里只拟合网格顶点的颜色。因此所要计算的控制网格mc和基网格mb具有相同的拓扑结构。因此,对控制网格mc进行一次loop细分后获得的网格和mr具有相同的拓扑关系。根据loop极限模版求网格的极限得到细分极限曲面ms,拟合目标就是:

mr=ms(7)

设基网格mb和目标网格mc的顶点数分别为n和m,分别用mc、mr、ms表示网格mc、mr、ms的顶点颜色构成的向量。则根据带尖锐特征的loop细分模版和极限模版,存在有细分矩阵sm×n和极限矩阵lm×m使得:所以可以将loop细分拟合方程(7)表示为:

lm×msm×nmc=mr(8)

令zm×n=lm×msm×n,方程组(8)可以变换为:

zm×ntzm×nmc=zm×ntmr(9)

通过求解线性方程组(9)就可以得到控制网格mc。因为这里拟合的是网格顶点的颜色,所以mc和mr的大小分别为n×3和m×3,rgb三种颜色可以分开求解。

4.2)误差控制。

将每个像素点的重构误差定义为重构图像与原图像对应像素点颜色值的欧式距离,而将整个图像的重构误差e定义为所有像素点重构误差的均值,每个基网格面片的重构误差ef定义为该面片光栅化后所对应的所有像素点重构误差的均值。

在上一步骤中,通过loop细分曲面拟合求得控制网格,使其对应的细分曲面尽可能接近原图像。但是控制网格的顶点数目依赖于网格简化,如果简化过度,使得控制网格顶点数目过少,自由度过大,就可能导致重构图像与原图像在某些区域存在较大的重构误差,因此本发明通过对误差较大的区域进行自适应细分来控制图像的重构误差,使得用户可以得到指定误差的重构图像。

对于重构误差的计算,首先根据带尖锐特征的loop细分规则和极限规则估计控制网格的极限曲面,计算出极限曲面上每个像素点的颜色值,即光栅化矢量表示。然后根据每个像素点所在的基网格面片,计算基网格每个面片的重构误差ef。最后计算整个重构图像的误差e。通过以上分析,本发明的误差可控的控制网格的求取的主要流程如下:

①备份基网格mb,使用loop曲面拟合方法计算控制网格mc;

②根据细loop分规则和极限规则估计控制网格mc的极限曲面ms;

③对于原光栅图像每个像素点的颜色值i(i),根据重心坐标计算出极限曲面ms上对应像素点的颜色值i′(i),计算像素点误差ei,并找到该像素点对应的基网格面片。然后计算基网格mb每个面片内所有像素点的平均误差ef,最后计算整个图像的平均重构误差e;

④如果平均重构误差e小于用户指定的平均误差阈值ε,则终止算法,输出控制网格mc;否则找出基网格中mb前k个最大平均误差的面片集合,并标记这些面片为需要进行自适应细分;其中k≥1由用户指定,一般来说,k越大,平均误差下降越快。

⑤对被标记的基网格面片进行自适应细化求得新的基网格mb,然后再转到步骤①,继续整个过程,直到得到指定误差的重构图像。

4.3)自适应细分

自适应细分允许只对感兴趣的区域进行细分。在误差控制中,我们需要对被标记为不满足误差要求的面片进行自适应细分来局部增加控制顶点的数目,从而减少误差。为了避免新网格产生裂缝,我们必须对被标记的面片和其邻面都进行细分。对于被标记的网格面片,我们对其进行1-4细分,对于没被标记的面片,我们根据其邻面被标记的情况来进行细分:①如果该面片具有0个被标记的邻面,则不对其进行细分;②如果该面片具有1个被标记的邻面,则对其进行1-2细分;③如果该面片具有2个被标记的邻面,则对其进行1-3细分;④如果该面片具有3个被标记的邻面,则对其进行1-4细分。我们对基网格的所有面片用上述细分模式进行细分后,就完成一次自适应细分,形成新的基网格。

5)光栅化矢量表示

由于目前的显示设备大多数只支持光栅图像的显示,为了在这些显示设备中显示前面步骤得到的矢量表示mc,我们需要渲染控制网格mc面片和它们相关的颜色信息到一个离散的光栅图像,也将该过程称为矢量表示光栅化。

矢量表示是基于细分曲面,所以要先求得对应的细分曲面,再将其离散化成光栅图像。本发明的光栅化流程为:

①根据带尖锐特征的loop细分规则对控制网格mc做r次细分得一个细化的网格mr,r=2,3…;

②根据带尖锐特征的loop极限规则将mr的顶点都移到对应的极限位置,从而得到逼近的分段细分曲面ms;

③由于ms是个分段线性曲面,曲面上的任一点颜色值都可以用该点所在三角面片的三个顶点颜色值进行线性表示。本发明使用重心坐标来计算三个顶点的权重。对于整个极限曲面网格ms,渲染流程:循环遍历ms的每个面片;对于每个三角面片,找出这个面片的包围盒;对于包围盒里面的每个整数像素点,判断该点是否属于该三角面片,如果是,求出它的重心坐标;最后根据重心坐标算该像素点的颜色值。在遍历网格全部三角面之后,即可以将对应的光栅图像素点的颜色全部填满,从而实现光栅图像的生成。

本发明与现有技术相比,具有如下优点与有益效果:

1.本发明提出采用等值线追踪算法得到初始特征线段其中一侧的线段,然后和初始特征线形成双特征线,进而使用双特征线来建模图像特征两侧颜色的不连续,可以较好地捕捉到两侧的颜色值。

2.针对图像网格的特点,本发明改进了qem简化算法的代价的计算方法,对简化后的网格进行拓扑和几何上的优化,得到更能反映图像特征的基网格,且网格质量比较好。

3.对于矢量表示的初始重构结果的误差不能满足用户需求,本发明可以衡量出矢量化的重构图像与原图像误差,通过对基网格进行自适应细分以达到一定范围内的指定误差,做到误差可控,具有实际应用价值。

附图说明

图1为本发明的整个方法流程图。

图2为本发明的初始网格构造示意图。

图3为本发明的等值线追踪示意图。

图4为本发明的网格简化流程图。

图5为本发明的误差可控的loop细分曲面拟合流程图。

图6为本发明的自适应细分模式示意图。

图7为本发明的一个实例lena的矢量化过程及结果:(a)原始图像;(b)图像特征;(c)双特征线;(d)-(f)分别表示1%、2%、3%顶点数的控制网格;(g)-(i)分别表示(d)-(f)的重构结果。

图8为本发明的更多的实例的矢量化结果展示图,从左到右分别表示原始图像、2%顶点数的控制网格、重构图像。

图9为本发明的两个实例在不同的重构误差下的重构结果:第一行分别为原图像和2%顶点比例的基网格,第二、三、四行分别为不同的重构误差下得到重构图像和重构误差。

图10为本发明的图9(a)例子的误差控制过程平均误差变化趋势图。

图11为本发明的图9(b)例子的误差控制过程平均误差变化趋势图。

具体实施方式

下面结合具体实施例对本发明作进一步说明。

如图1所示,对于一张给定的要进行矢量化的光栅图像i,本实施例所述的细分曲面的图像矢量化方法的步骤如下:

1)检测图像边缘特征,得到一个像素宽的特征线段

1)检测图像边缘特征

图像边缘是最显著的图像特征,为了在构造保持图像特征的基网格,使用图像边缘线段检测方法来提取图像的一个像素宽的特征线,其步骤为:

①高斯滤波:用高斯核卷积图像来抑制图像噪声和平滑图像;

②计算梯度幅值和边缘方向图:首先使用梯度算子分别计算出像素点的水平和垂直梯度,然后算出图像梯度幅值图,与此同时,比较像素水平和垂直梯度的大小,确定该像素点的边缘方向,如果水平梯度较大,则认为通过该像素是个垂直方向边缘,反之亦然;

③提取锚点:锚点可以被认为是边缘结束的地方,即在水平和垂直方向特征变化剧烈的像素点,这里选择局部梯度极值作为锚点,通过比较像素点与其相邻像素点的梯度值来判断该像素点是否是锚点,对于一个水平方向的像素点,将其与左右相邻的像素点比较,如果该像素点的梯度值比左右相邻像素梯度值大指定阈值,则认为该像素点为锚点;

④连接锚点形成线段:根据梯度幅值和边缘方向图来连接相邻锚点,每次从还未被检测过的锚点开始,观察穿过该锚点的边缘方向,如果是水平边缘,通过向左和向右行进开始连接过程,如果垂直边缘通过锚点,通过向上和向下行进进行连接过程,在移动期间,仅考虑三个直接邻居像素,并且选择具有最大梯度值的那个邻居像素,当遇到梯度幅值为0的像素点或遇到之前已经检测过的边缘像素时,该次处理过程停止。

2)构造基于图像特征的初始网格,并在网格中标记图像特征

在2d图像平面上建立像素分辨率的初始三角网格m。首先建立初始网格顶点,图像中的每个像素点对应网格中的一个顶点,并在顶点的属性中记录像素点的颜色值;然后以行和列的方式连接网格顶点形成矩形网格,根据图像特征线将网格中的每个矩形网格划分成两个三角网格,如图2的(a)所示。

图像颜色不连续性与至少两个具有非常不同颜色强度的相邻像素相关联,单独的图像边缘线不足以表示图像颜色的不连续性。因此本发明提出使用双特征线来表示图像颜色的不连续。该策略首先使用等值线追踪算法找出图像特征两侧的距离一像素的平行线段,如图2的(b)所示。然后通过比较两侧的图像梯度选择平均梯度大的线段作为另一特征线,并对受影响的三角网格进行重新三角化,如图2的(c)所示。

寻找图像特征线的等值线,首先在网格上对图像的特征边和特征顶点进行标记。对于每条特征线,将特征线上的顶点标为+,非特征线上的顶点标为-。如果一条边的两个顶点标号相异,则等值线会穿过这条边。我们使用半边结构来进行三角网格的等值线追踪,该过程与二维的行进三角形算法类似,如图3所示,对于每条特征线一侧的一像素等值线追踪的过程描述如下:

①首先根据特征线的前两个顶点找到其中一侧的第一个等值点,将其添加进等值线段中,如图3的v1顶点,进而找到对应的第一条半边he1,然后判断当前的半边是否属于第一个面,根据第二条半边与特征线第一个点和第二个点连线的夹角判断当前半边的方向是否是正确的,进而确定第一个搜索三角形f1;

②在三角形的相关边上寻找第二条存在等值点的半边,即边的两个顶点标号相异。如图3的半边he2,从而找到第二个等值点,如果该等值点和前一个等值点一样,则不添加进等值线段中,如果不一样,则添加。

③根据半边结构和当前半边he2找到下一个搜索三角形的第一条存在等值点的半边he3,进而确定下一个搜索三角形f2;

④递归执行②和③,直至搜索三角形中不包含等值点。

接下来,对初始网格的边和顶点的类型进行标记,从而在后续的网格简化、细分等操作中对不同的类型进行不同的处理以保持重要的图像特征。本发明将网格的边分为三种类型:边界边、平滑边、折痕边,将网格的顶点分为四种类型:边界点、平滑点、折痕点、角点。将图像的双特征线标记为折痕边,将图像矩阵边界的边标记为边界边,其他边为平滑边。对于网格顶点,如果顶点只与平滑边缘连接,则该顶点标记为平滑点;折痕顶点与两条邻接的折痕边连接;边界点与两条邻接的边界边连接;图像特征线端点、特征线交叉点标记为角点。为了固定矩形图像边界,四个角被标记为角点。

3)简化初始网格,构造保持图像特征的基网格

主要采用qem简化算法来简化图像初始网格,得到基网格mb。将网格的颜色属性看成高度场来计算二次误差代价,并且在简化过程中使用细分曲线来拟合图像特征线段来保持图像特征。

在上一步骤中,我们根据图像特征对网格的顶点和边做了分类。为了保持图像的形状和特征,对于不同的特征采取不同的处理方式:①角点不允许被折叠;②边界点只能与其邻接的同边界的两个边界点折叠;③折痕点只能与其邻接的同折痕边的两个折痕点折叠;④滑点可以折叠到特征点。

此外,为了得到一个高质量的保持图像特征的基网格,改进了qem算法的边折叠代价。在边折叠代价中加入了特征边形变代价qfeature、三角形正则性代价qre、面积代价qarea,并赋予它们相应的权重。用qqem表示qem代价,则可以把边折叠的总折叠代价表示为:

cost(v1,v2)=αqqem(v1,v2)+βqfeature(v1,v2)+γqre(v1,v2)+δqarea(v1,v2)(1)

其中,权重α,β,γ,δ由用户指定,边折叠顺序按照cost(v1,v2)从小到大进行。

需要说明的是,为了保证简化后二维网格的质量,除了在计算qem代价时,将网格m的颜色属性看成高度场,在计算其他代价时,考虑的都只是二维图像网格,不考虑颜色属性。在实验中权重α,β,γ,δ分别取1、10、3、10。计算出各项的代价:

qem代价qqem:将网格m的颜色属性看成高度场,分别用rgb的值作为高度,则每条边可计算出三个代价,将其和作为该边的二次误差代价qqem。

特征边形变代价qfeature:定义qfeature为折叠前的特征点到其邻接的两个特征点连线的距离,用来衡量特征边折叠结果与折叠点的偏离程度,qfeature值越小,表明偏离越小。如果折叠的边是非特征边,则qfeature值为0。

三角形正则性代价qre:在边折叠代价中加入三角形正则性代价是为了减少狭长的三角面片的出现。三角形的正则性被用来表示其接近正三角形的程度,可以用r(t)=cos(∠a)+cos(∠b)+cos(∠c)来度量三角形t=δabc的正则性。令re(t)=3-2r(t),则0≤re(t)≤1,re(t)的值越小,表明该三角形的正则性越高。则可以定义三角面片集合t的正则性为:

re(t)=maxre(t)(2)

把qre定义为边折叠前后,相关三角面片的正则性增量。则边折叠的正则性代价定义为:

其中,表示顶点的邻接三角面片。

面积代价qarea:三角形正则性代价qre反映了三角面片的形状,没有反映面片大小。如果qre的权重γ比较大时,可能导致网格面片的大小相差很大。因此,在总代价中加入面积代价来约束面片的面积。把面积代价qarea定义为边折叠后新顶点所有邻接面的面积总和。则边折叠的面积代价定义为:

其中,area(t)表示三角形t的面积;

根据以上分析,如图4所示,网格简化算法的主要步骤为:

①设置边折叠代价公式(1)中的各项权值;

②将网格m的颜色属性看成高度场,计算网格所有边的qem代价qqem;

③计算所有可折叠边的折叠代价,根据折叠代价将其放入最小堆中。根据公式(1)计算出每条边对应的两条半边的折叠代价,则边的折叠代价取两个半边代价的小值,并记录折叠方向;

④从堆中取出最小折叠代价的边,首先判断其折叠后相关面是否会反生翻转,若会,则给该边的代价加一个惩罚值,更新其在堆中的位置;若不会反生翻转,则判断该边是否是特征边,若是特征边,拟合调整特征点的位置并判断其折叠后拟合误差是否符合要求,若不符合,则不折叠该边,将其从堆中删除;否则就完成该边的折叠操作,重新计算相关边的折叠代价并更新它们在堆中的位置。

⑤若达到简化的要求或最小堆为空,则转到⑥,否则转到④。

⑥删除网格中的独立顶点,更新网格,输出基网格。

虽然在网格简化过程中考虑了面片正则性、面积等因素,但是仍不能保证能得到一个高质量基网格。因此本发明使用最简单的laplacian算子对网格进行几何优化:

网格中顶点的新位置由vnew=v+λδv迭代式给出,其中λ取值为0.3。

为了保持图像的特征,对网格特征顶点进行特殊处理。首先,角点不进行移动;对于边界顶点和特征点v,设(va,v)和(v,vb)为v所在的两条特征边,则v只根据va和vb的位置进行调整,即laplacian算子定义为:

需要说明的是,网格优化可以在网格简化的过程中进行,也可以在网格简化结束后进行。如果网格优化会造成面片翻转,则暂时不进行优化。

4)误差可控的loop细分曲面拟合求得控制网格

经过网格的简化和优化得到反映图像特征的基网格后,本发明提出带误差控制的loop细分曲面拟合来对图像颜色进行拟合,在计算控制网格的过程中进行误差控制,用户可以通过指定重构图像的误差来获得满足需求的矢量图像。该过程主要包括三个部分:控制网格的计算、误差控制以及自适应细分。

4.1)控制网格的计算

为了增加拟合目标的数据量,我们首先对基网格mb进行一次1-4细分得到网格然后使用网格对原图像进行采样得到mr,将mr作为我们拟合的目标。像素点的颜色值在图像特征区域有着显著的变化,为了采样到准确的颜色值,我们对不同的网格特征采用不同的采样方式得到顶点的颜色值:对于折痕顶点,它的目标颜色为它所在的图像特征线上和它位置最接近的像素点的颜色值;对于角点,它在简化过程和细分过程中的位置都没有移动,所以它的目标颜色为顶点坐标确定的图像像素点的颜色值;对于平滑顶点,其颜色由其周围的像素点进行双线性插值得到。

在网格简化过程中已经拟合了网格的特征顶点位置,为了计算方便,这里只拟合网格顶点的颜色。因此所要计算的控制网格mc和基网格mb具有相同的拓扑结构。因此,对控制网格mc进行一次loop细分后获得的网格和mr具有相同的拓扑关系。根据loop极限模版求网格的极限得到细分极限曲面ms,拟合目标就是:

mr=ms(7)

设基网格mb和目标网格mc的顶点数分别为n和m,分别用mc、mr、ms表示网格mc、mr、ms的顶点颜色构成的向量。则根据带尖锐特征的loop细分模版和极限模版,存在有细分矩阵sm×n和极限矩阵lm×m使得:所以可以将loop细分拟合方程(7)表示为:

lm×msm×nmc=mr(8)

令zm×n=lm×msm×n,方程组(8)可以变换为:

zm×ntzm×nmc=zm×ntmr(9)

通过求解线性方程组(6)就可以得到控制网格mc。因为这里拟合的是网格顶点的颜色,所以mc和mr的大小分别为n×3和m×3,rgb三种颜色可以分开求解。

4.2)误差控制

将每个像素点的重构误差定义为重构图像与原图像对应像素点颜色值的欧式距离,而将整个图像的重构误差e定义为所有像素点重构误差的均值,每个基网格面片的重构误差ef定义为该面片光栅化后所对应的所有像素点重构误差的均值。

在上一步骤中,通过loop细分曲面拟合求得控制网格,使其对应的细分曲面尽可能接近原图像。但是控制网格的顶点数目依赖于网格简化,如果简化过度,使得控制网格顶点数目过少,自由度过大,就可能导致重构图像与原图像在某些区域存在较大的重构误差,因此本发明通过对误差较大的区域进行自适应细分来控制图像的重构误差,使得用户可以得到指定误差的重构图像。

对于重构误差的计算,首先根据带尖锐特征的loop细分规则和极限规则估计控制网格的极限曲面,计算出极限曲面上每个像素点的颜色值,即光栅化矢量表示。然后根据每个像素点所在的基网格面片,计算基网格每个面片的重构误差ef。最后计算整个重构图像的误差e。通过以上分析,如图5所示,本发明的误差可控的控制网格的求取的主要流程如下:

①备份基网格mb,使用loop曲面拟合方法计算控制网格mc;

②根据细loop分规则和极限规则估计控制网格mc的极限曲面ms;

③对于原光栅图像每个像素点的颜色值i(i),根据重心坐标计算出极限曲面ms上对应像素点的颜色值i′(i),计算像素点误差ei,并找到该像素点对应的基网格面片。然后计算基网格mb每个面片内所有像素点的平均误差ef,最后计算整个图像的平均重构误差e;

④如果平均重构误差e小于用户指定的平均误差阈值ε,则终止算法,输出控制网格mc;否则找出基网格中mb前k个最大平均误差的面片集合,并标记这些面片为需要进行自适应细分;其中k≥1由用户指定,一般来说,k越大,平均误差下降越快。

⑤对被标记的基网格面片进行自适应细化求得新的基网格mb,然后再转到步骤①,继续整个过程,直到得到指定误差的重构图像。

4.3)自适应细分

自适应细分允许只对感兴趣的区域进行细分。在误差控制中,我们需要对被标记为不满足误差要求的面片进行自适应细分来局部增加控制顶点的数目,从而减少误差。为了避免新网格产生裂缝,我们必须对被标记的面片和其邻面都进行细分。对于被标记的网格面片,我们对其进行1-4细分,如图6中标记为1的面片所示。对于没被标记的面片,我们根据其邻面被标记的情况来进行细分:①如果该面片具有0个被标记的邻面,如图6中标记为5的面片所示,则不对其进行细分;②如果该面片具有1个被标记的邻面,如图6中标记为4的面片所示,则对其进行1-2细分;③如果该面片具有2个被标记的邻面,如图6中标记为3的面片所示,则对其进行1-3细分;④如果该面片具有3个被标记的邻面,如图6中标记为2的面片所示,则对其进行1-4细分。我们对基网格的所有面片用上述细分模式进行细分后,就完成一次自适应细分,形成新的基网格。

5)光栅化矢量表示

由于目前的显示设备大多数只支持光栅图像的显示,为了在这些显示设备中显示前面步骤得到的矢量表示mc,我们需要渲染控制网格mc面片和它们相关的颜色信息到一个离散的光栅图像,也将该过程称为矢量表示光栅化。

我们先求得对应的细分曲面,再将其离散化成光栅图像。光栅化流程为:

①根据带尖锐特征的loop细分规则对控制网格mc做r次细分得一个细化的网格mr,r=2,3…;

②根据带尖锐特征的loop极限规则将mr的顶点都移到对应的极限位置,从而得到逼近的分段细分曲面ms。

③由于ms是个分段线性曲面,曲面上的任一点颜色值都可以用该点所在三角面片的三个顶点颜色值进行线性表示。本发明使用重心坐标来计算三个顶点的权重。对于整个极限曲面网格ms,渲染流程:循环遍历ms的每个面片;对于每个三角面片,找出这个面片的包围盒;对于包围盒里面的每个整数像素点,判断该点是否属于该三角面片,如果是,求出它的重心坐标;最后根据重心坐标算该像素点的颜色值。在遍历网格全部三角面之后,即可以将对应的光栅图像素点的颜色全部填满,从而实现光栅图像的生成。

综上所述,本发明方法对于给定的要进行矢量化的光栅图像,可以得到质量良好且保持原图像特征的矢量表示。图7为本发明的一个实例lena的矢量化过程及结果:(a)为原始图像;(b)为检测出的图像特征;(c)为使用等值线追踪算法得到的双特征线;(d)-(f)分别表示1%、2%、3%顶点数的控制网格;(g)-(i)分别表示(d)-(f)的重构结果。图8为本发明的更多的实例的矢量化结果展示图,从左到右分别表示原始图像、2%顶点数的控制网格、重构图像。从图中可以本发明方法可以得到质量良好的矢量表示,且网格的顶点数目越多,得到的矢量表示越接近原图像。

本发明方法对于矢量表示的初始重构结果误差不能满足用户需求的情况,可以衡量出矢量化的重构图像与原图像误差,通过对基网格进行自适应细分以达到一定范围内的指定误差,做到误差可控,具有实际应用价值。图9为本发明的两个实例在不同的重构误差下的重构结果:第一行分别为原图像和2%顶点比例的基网格,第二、三、四行分别为不同的重构误差下得到重构图像和重构误差。从图中可以看出,第二行的重构图像在图像的边缘存在较大的误差,通过本发明方法的迭代地自适应细分误差控制后,图像较大误差的区域得到了改善,从而得到满足平均误差需求的重构结果,能够很好地表示原图像。说明了对于同一简化比例的基网格,本发明方法能矢量化出满足一定范围内不同误差需求的结果。

本发明的误差控制算法具有收敛性。如果重构图像不满足误差需求,本发明方法每次迭代选择前k个平均误差最大的基网格面片进行自适应细分,从而增加最终控制网格上的顶点数目。理论上,随着控制网格上顶点数目的增加,重构误差会越来越小,最终收敛于某个小值。图10、图11分别为本发明的图9(a)例子和图9(b)例子的误差控制过程平均误差变化趋势图。从图中可以看出:①随着迭代次数的增加,重构图像的误差整体上逐渐减少,说明了本发明的误差控制算法具有收敛性;②随着每次迭代细分的面片数量k的增加,平均误差减少的速度也随之增加,可以在越少的迭代次数中达到指定误差阈值。但是如果k过大,一些误差小的基网格面片也会被细化,使得面片、顶点数量增加迅速,造成冗余。因此,用户可以根据能接受的误差指定相应的每次迭代细分的面片数量k,减少迭代次数。

以上所述之实施例子只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1