根据内外边属性对字幕对象矢量轮廓进行归并整理的方法

文档序号:7927639阅读:123来源:国知局
专利名称:根据内外边属性对字幕对象矢量轮廓进行归并整理的方法
技术领域
本发明属于广电行业电视节目制播机构的字幕编播技术领域,具体涉及一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法。

背景技术
在字幕编播领域中,字幕对象可分为文字和图形两个部分。文字包括世界上各种语种的文字,图形包括各种规则形状的图形、由基本图形元素组成的复合图形和任意不规则图形。从计算机图形学的角度来说,可以将所有类型的字幕对象视为由一系列直线和曲线组成的图形。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上看,图形主要分为两类一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等;另一类是明暗图,也就是通常所说的真实感图形。
字幕渲染是计算机图形学、计算机数字图像处理与电视台的节目制作业务相结合的技术。从计算机数字图像处理的角度来说,对字幕对象的渲染包括两个方面第一,基于像素或子像素的一系列静态处理,如图象增强、二值化处理、边缘检测、模糊处理、浮雕、边缘反走样、亮度贴图、材质贴图、防抖动、椭圆变形、多边形变形、勾边、增亮、锐化、柔化、凸起、彩色铅笔、油画龟裂、交叉影线、剪样、玻璃、边缘增亮、墨水轮廓画、瓷砖、信纸、拼缀物、塑料包装、水波纹、海绵、喷涂笔、着色玻璃、高斯模糊等特效;第二,基于关键帧的一系列动态处理,包括水波、旗飘、螺旋、扭曲、三维投影、火焰、球变、三维形变、弯曲、幻影、卷页、折叠、礼花、百叶窗、碎裂、水波、波动、划像、转球、螺旋、旗飘、波动虚影、蝶变、流光、凸镜、万花筒、激光、飞光、魔幻螺旋、运动模糊、径向模糊、波浪、波浪倒影、回旋等特效。
字幕的渲染效果是衡量一个字幕系统的重要指标,特别是在反走样处理、小字的细节处理、立体边的处理、虚边、虚影、真实三维视觉感、三维字倒角、纹理、光照的处理等方面。
在现有的字幕系统中,字幕渲染存在着以下问题 第一,将文本字幕与图形字幕的渲染区别开来,而且不同的图形元素也使用不同性质的几何矢量来描述。这个问题在实现和应用两个方面给字幕系统带来了很多的不利。从实现的角度来说,会导致一个字幕系统中存在多个完全不同的渲染引擎和渲染流程,而且如果要支持一种新的字幕对象,则需要定义并实现新的渲染引擎,从而造成字幕系统的功能扩展性存在很大的局限性。从应用的角度来说,带来两方面致命的问题一方面,不同类型的字幕对象最终展现的效果不一致,例如两个不同类型的字幕对象同样是加了2个像素的全边,但由于经过了不同的渲染引擎,最终的处理结果可能是不同的,在进行字幕创作时给使用者带来了诸多不便;另一方面,在字幕系统中针对字幕对象的操作不得不进行特定的限制,例如,有的字幕对象支持几何旋转、几何缩放,有的则不支持,有的字幕对象支持任意角度的加边、加影,有的则只支持固定角度的加边、加影,有的甚至不支持。所有这些问题都会影响字幕系统的普遍适用性和功能完备性。
第二,字幕渲染引擎的核心算法都是基于浮点运算,例如三角函数运算、反三角函数运算、除法运算、幂运算、开方运算等。这会导致两方面的问题一方面,由于最终处理结果要求的是整数型的像素值,因此在渲染引擎算法的不同阶段会进行取整运算,这就会造成计算上的累计误差,导致最终的字幕效果在局部细节上存在缺陷,例如笔画多的文字模糊不清晰、笔画粘连等;另一方面,这些浮点运算都是占用大量机器指令的数学运算,大大降低了整个字幕系统的工作效率,影响到字幕制作和播出的时效性,特别是在高清晰度电视字幕的制作中,由于其数据量是标清的5倍,这一点表现的更加明显。
第三,作为字幕渲染重要指标之一的边缘反走样的效果不甚理想,甚至无法达到实用的程度。这是因为现有的字幕系统在进行反走样处理时,完全依赖当前像素空间的图像处理方法,没有字幕几何矢量信息的参与,也就无法实现基于子像素的处理,使得现有的字幕系统的最终渲染效果出现比较明显的边缘锯齿效应,影响字幕展现的效果。
由于上述同样的原因,在对字幕对象进行基于滤镜管道的图像处理时,也会影响字幕的最终效果。现有的字幕系统的渲染流程通常是先进行面边影的贴图,得到一个图像,然后将这个图像放入滤镜管道中,再进行一系列的图像处理。但是由于没有字幕几何矢量信息的参与,滤镜管道的处理会破坏前者反走样后的效果。也就是说,在本来就不理想的边缘处理上累积了新的边缘锯齿效应。
由于上述同样的原因,对于稍微复杂一些的图形元素的字幕对象,在图形拐点处出现振荡效应,导致图形轮廓不平滑。例如常用的圆角矩形对象,由四个角的圆弧与四条直线组成,在圆弧与直线相接的地方,就会出现凸凹不平的现象。
第四,一个字幕对象在进行渐变色渲染时,应该是按照这个物体的矢量轮廓进行径向的渐变色彩处理,但是在现有的字幕系统中,对渐变色的渲染处理是将渐变色放到一个内存块中,在渲染时,还是采取了对应像素贴图的方法。这就使得现有的字幕系统无法实现真正意义上的渐变色的渲染效果。
第五,现有的字幕系统无法实现增加多个外边、多个内边、多个侧面立体边、多个影子。简单的面、边、影的叠加的字幕展现已经无法满足电视节目制作对字幕系统的要求。
第六,现有的字幕系统的渲染都不是基于Bezier曲线轮廓,但是由于TrueType字库中的字模都是使用Bezier曲线来描述的,所以就需要将从字库中提取出来的Bezier曲线转换成另外一种形式的矢量,由于不同矢量表达式之间的信息不对称性,在转换过程中会出现信息的损失,从而使得笔画的形状变形,导致笔画粗细不均匀,影响字型展现的美观。
第七,现有的字幕系统无法将文字字幕对象转换为图形字幕对象,从而无法实现字符变形、字符倒影、字符反转、曲线摆放、艺术字等功能,无法满足高级的字幕应用需求。
第八,现有的字幕系统无法实现多种不同类型的加边方式,如尖角边、圆角边、方角边等,这在一定程度上影响了字幕应用的广泛性。
第九,现有的字幕系统无法实现对任意形状不规则图形的支持,从而无法应对日益重要的地理信息描述、气象预报、综合资讯等类型的字幕制作。
贝塞尔(Bezier)曲线是计算机图形学中一种重要的多项式参数曲线。平面中的任意N(N>=2)个点都可以构成一个Bezier曲线,这N个点称为Bezier曲线的控制点,N个点组成的多边形称为Bezier曲线的控制多边形。N次Bezier曲线的参数方程如下 t∈
其中,P0、P1、...、Pn是Bezier曲线的控制点。
由此,一次Bezier曲线的参数表达式为 B(t)=P0+(P1-P0)t=(1-t)P0+tP1,t∈
一次Bezier曲线就是线性Bezier曲线,实际上是两个控制点P0和P1之间的直线段。
二次Bezier曲线的参数表达式为 B(t)=(1-t)2P0+2t(1-t)P1+t2P2,t∈
三次Bezier曲线的参数表达式为 B(t)=P0(1-t)3+3P1t(1-t)2+3P2t2(1-t)+P3t3,t∈
P0、P1、P2、P3四个点在平面或在三维空间中定义了三次Bezier曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2,这两个点只提供方向信息。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的长度。
Bezier曲线具有如下特性。
(1)无限可分性一条Bezier曲线可在任意点切割成两条或任意多条子曲线,每一条子曲线仍是Bezier曲线。
(2)对称性保持Bezier曲线全部控制点Pi的坐标位置不变,只是将控制点Pi的排序颠倒,曲线形状保持不变。这个性质说明Bezier曲线在起点处有什么几何性质,在终点处也有相同的几何性质。
(3)凸包性Bezier曲线位于其控制点的凸包之内。
(4)几何不变性Bezier曲线位置和形状与其特征多边形顶点的位置有关,它不依赖坐标系的选择。
(5)变差缩减性平面内任意直线与曲线的交点个数不多于该直线与其特征多边形的交点个数。
(6)端点切矢量Bezier曲线的起点、终点与相应的特征多边形的起点、终点重合。其起点和终点处的切线方向和特征多边形的第一条边及最后一条边的走向一致。
鉴于上述Bezier曲线的特性,如果将不同类型的字幕对象均转换为二次Bezier曲线,则有利于提高字幕的渲染效果,满足字幕的高级应用以及解决现有字幕渲染方法存在的问题。在将不同类型的字幕对象转换为二次Bezier曲线后,在某些应用场合下,会出现一个封闭二次Bezier曲线内部自相交的情况,例如自绘曲线、字幕对象经过旋转或者某些多语种字体中。因此需要对这种情况进行处理,删除或者分割封闭二次Bezier曲线内部包含的闭合环路。不仅如此,在一个字幕对象包含的多个封闭轮廓之间也可能存在相交的情况,需要根据交点将一条二次贝塞尔线段分割成多条二次贝塞尔线段,然后再根据二次贝塞尔线段的内外边属性对封闭轮廓进行规并整理,否则会影响字幕对象的渲染效果和效率。


发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法。该方法能够使相交的封闭轮廓进行规并整理后,互不相交,从而提高字幕渲染效率,增强字幕渲染效果。
为达到以上目的,本发明采用的技术方案是一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,包括以下步骤 (1)确定字幕对象所有封闭轮廓中每条二次贝塞尔线段的内外边属性; (2)将属性为内边的二次贝塞尔线段删除; (3)根据交点重构字幕对象的封闭轮廓; (4)计算步骤(3)中获得的所有封闭轮廓以及所有封闭轮廓中每条二次贝塞尔线段的外接矩形; (5)标记步骤(3)中获得的所有封闭轮廓的方向。
如上所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,步骤(1)中确定二次贝塞尔线段的内外边属性的方法为判断二次贝塞尔线段上任意一点在字幕对象所有封闭轮廓中是内点还是外点;如果是内点,则包含该点的二次贝塞尔线段为内边;如果是外点,则包含该点的二次贝塞尔线段为外边。
如上所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其中,所述的二次贝塞尔线段上任意一点为二次贝塞尔线段的中点。
如上所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其中,判断二次贝塞尔线段的中点在字幕对象所有封闭轮廓中是内点还是外点的方法包括以下步骤假设二次贝塞尔线段为B,B的三个控制点分别为P
、P[1]、P[2],中点为Q; ①确定B的方向值d如果P[2].y>P
.y,则d=1;如果P[2].y<P
.y,则d=-1;如果P[2].y=P
.y,则d=0;所述的P
.y和P[2].y分别表示P
和P[2]的纵坐标; ②计算B的中点Q; ③判断abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,则以Q点为起点,沿水平方向作一射线H;如否,则以Q点为起点沿竖直方向作一射线H;计算字幕对象所有封闭轮廓中与H相交的除B之外的所有二次贝塞尔线段,假设有M条二次贝塞尔线段与H相交,分别为B
、B[1]至B[M-1];所述的P
.x和P[2].x分别表示P
和P[2]的横坐标,所述的abs函数为取绝对值函数; ④分别计算B[i]的方向值d[i],方法与步骤①中计算d值的方法相同;所述的i=0、1、.....、M-1; ⑤计算d[i]的和值d′d′=d
+d[1]+......+d[M-1]; ⑥根据d和d′计算B的内外边属性值a;如果a=0,则B为内边;如果a=1,则B为外边; 所述的a=1-abs(SIGN(d+d′)*SIGN(d′)),所述的SIGN(x)定义为(x==0)?0((x>0)?1-1))。
如上所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,步骤(1)中,当确定了一个封闭轮廓中的一条二次贝塞尔线段的内外边属性后,则该封闭轮廓该条二次贝塞尔线段之后的二次贝塞尔线段的内外边属性与其相同,直到遇到一个交点为止。
如上所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,步骤(4)中计算封闭轮廓中的二次贝塞尔线段和封闭轮廓的外接矩形的方法为 假设二次贝塞尔线段的三个控制顶点分别为P0、P1和P2,P0点的横坐标为P0.x,纵坐标为P0.y;P1点的横坐标为P1.x,纵坐标为P1.y;P2点的横坐标为P2.x,纵坐标为P2.y;计算由P0、P1和P2构成的三角形的外接矩形T,T即为该二次贝塞尔线段的外接矩形,公式如下 T.left=min(P0.x,P1.x,P2.x), T.right=max(P0.x,P1.x,P2.x), T.top=min(P0.y,P1.y,P2.y), T.bottom=max(P0.y,P1.y,P2.y); 其中,T.left表示外接矩形左边框的横坐标,T.right表示外接矩形右边框的横坐标,T.top表示外接矩形上边框的纵坐标,T.bottom表示外接矩形下边框的纵坐标;min函数表示取所有参数中的最小值,max函数表示取所有参数中的最大值; 将封闭轮廓中所有的二次贝塞尔线段的外接矩形进行合并,便得到该封闭轮廓的外接矩形。
如上所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,步骤(5)中所述的方向包括顺时针方向和逆时针方向,将顺时针方向标记为1,逆时针方向标记为-1;标记封闭轮廓方向的方法为首先从封闭轮廓中取出任意一条二次贝塞尔线段B,计算封闭轮廓的方向属性b的值,b=d*(1-2*abs(d′));如果b>0,则该封闭曲线为顺时针方向,否则为逆时针方向。
采用本发明所述的方法,通过对相交的封闭轮廓进行规并整理,使得封闭轮廓之间互不相交,从而提高了字幕的渲染效率,增强了字幕的渲染效果。



图1是具体实施方式
中将椭圆图元转换成由三次Bezier线段组成的封闭轮廓示意图; 图2是具体实施方式
中将波浪旗飘图元转换成由三次Bezier线段组成的封闭轮廓示意图; 图3是具体实施方式
中将心形图元转换成三次Bezier线段组成的封闭轮廓示意图; 图4一次Bezier线段转换成二次贝塞尔线段示意图,4a为转换前的一次Bezier线段示意图,4b为转换后的二次Bezier线段示意图; 图5三次Bezier线段转换成两条二次Bezier线段示意图,5a一种三次Bezier线段转换前后的对比示意图,5b是另一种三次Bezier线段转换前后的对比示意图; 图6是具体实施方式
中存在相邻二次贝塞尔线段自相交情况的封闭轮廓处理前后效果示意图; 图7是具体实施方式
中存在非相邻二次贝塞尔线段自相交情况的封闭轮廓处理前后效果示意图; 图8是具体实施方式
中二次贝塞尔线段的外接矩形示意图; 图9是具体实施方式
中二次贝塞尔线段中点示意图; 图10是具体实施方式
中存在非相邻二次贝塞尔线段自相交情况的封闭轮廓两次处理前后效果示意图; 图11是具体实施方式
中根据交点分割字幕对象矢量轮廓中二次贝塞尔曲线的方法流程图; 图12是具体实施方式
中计算字幕对象矢量轮廓中所有的二次贝塞尔线段与其他二次贝塞尔线段的交点的方法流程图; 图13是本发明所述的方法流程图; 图14是具体实施方式
中确定一条二次贝塞尔线段内外边属性示意图。

具体实施例方式 下面结合具体实施方式
和附图对本发明进行详细描述。
本发明所述的方法主要应用于在将不同类型的字幕对象转换为由二次Bezier线段组成的包括一个或多个封闭轮廓的矢量轮廓信息时,不同的封闭轮廓之间存在相交的二次贝塞尔线段的字幕渲染中。
将不同类型的字幕对象转换为由二次Bezier线段组成的包括一个或多个封闭轮廓的矢量轮廓信息可以采用如下方法。
由于字幕对象的类型包括文字字幕、基本图形字幕和复合字幕(包括文字和基本图形的字幕),因此针对不同类型的字幕对象需要进行不同的处理。
如果字幕对象的类型为文字字幕,则可以直接使用操作系统的TrueType字库,无需转换。其方法主要包括以下步骤 ①根据文字字幕对象的字体名称,使用操作系统提供的API(CreateFont)创建逻辑字体对象F; ②使用操作系统提供的API(SelectObject),将逻辑字体对象F设置到操作系统的资源描述表中,并保存操作系统原来的逻辑字体; ③根据当前字符的Unicode编码,使用操作系统提供的API(GetGlyphOutline),从操作系统的当前资源描述表中获取当前字符的矢量轮廓信息在TrueType字库中占用的内存字节数B; ④根据当前字符占用的内存字节数B,分配内存P; ⑤根据当前字符的Unicode编码和占用的内存P,再次使用操作系统提供的API(GetGlyphOutline),从操作系统当前资源描述表中获取当前字符的矢量轮廓信息G,并恢复操作系统原来的逻辑字体。
如果字幕对象的类型为基本图形字幕,则将其转换成由若干条三次贝塞尔线段组成的封闭轮廓的矢量轮廓信息,主要是根据基本图形的几何参数确定每条贝塞尔线段上的控制点坐标,具体包括以下步骤 ①根据基本图形字幕的几何形状,将基本图形字幕划分成多条曲线段,所述的曲线段包括直线段、正玄或余玄曲线段、圆弧段和椭圆弧段; ②根据基本图形字幕的外接矩形、每条曲线段的参数方程计算出每条曲线段转换成三次贝塞尔线段后的起始控制点和结束控制点的坐标; ③对每条三次贝塞尔线段,根据起始控制点和结束控制点的坐标和三次贝塞尔参数方程,分别计算t=1/3和t=2/3处的另外两个控制点的坐标。
以基本图形字幕的几何形状为椭圆形为例,如图1所示。首先,根据椭圆形与其外接矩形的四个交点P100、P103、P106和P109将其分成四条Bezier线段,分别为从P100到P103、从P103到P106、从P106到P109和从P109到P100。从P100到P103的三次Bezier曲线的四个控制点分别为P100、P101、P102和P103,从P103到P106的三次Bezier曲线的四个控制点分别为P103、P104、P105和P106,从P106到P109的三次Bezier曲线的四个控制点分别为P106、P107、P108和P109,从P109到P100的三次Bezier曲线的四个控制点分别为P109、P110、P111和P100。
然后,根据椭圆图元的外接矩形的四个顶点坐标计算出椭圆中心点的坐标(a,b)、横轴半径ra和纵轴半径rb。每条三次贝塞尔线段的各个控制点坐标的计算公式如下 令PinA=ra*0.55179445,PinB=rb*0.55179445。
P100.x=a,P100.y=b+rb; P101.x=a+PinA;P101.y=b+rb; P102.x=a+ra;P102.y=b+PinB; P103.x=a+ra;P103.y=b; P104.x=a+ra;P104.y=b-PinB; P105.x=a+PinA;P105.y=b-rb; P106.x=a;P106.y=b-rb; P107.x=a-PinA;P107.y=b-rb; P108.x=a-ra;P108.y=b-PinB; P109.x=a-ra;P109.y=b; P110.x=a-ra;P110.y=b+PinB; P111.x=a-PinA;P111.y=b+rb。
其中,P100.x表示P100点的横坐标,P100.y表示P100点的纵坐标。本实施方式中,其他类似的表示方式的含义与P100相同。
以基本图形字幕的几何形状为波浪旗飘形为例,如图2所示。首先,根据两条曲线段与两条直线段的四个交点P200、P203、P206和P209将其分成四条曲线段,分别为从P200到P203、从P203到P206、从P206到P209和从P209到P200。将每条曲线段转换成三次贝塞尔曲线后,从P200到P203的三次Bezier线段的四个控制点分别为P200、P201、P202和P203,从P203到P206的三次Bezier线段的四个控制点分别为P203、P204、P205和P206,从P206到P209的三次Bezier线段的四个控制点分别为P206、P207、P208和P209,从P209到P200的三次Bezier线段的四个控制点分别为P209、P210、P211和P200。
已知波浪旗飘形图元的外接矩形的四点坐标,可以计算出该图元外接矩形的宽度和高度,分别为W2和H2。此外,根据已知的调节波浪旗飘图元的水平和垂直幅度的参数fx和fy,可以计算出来P200点的坐标为(a,b),a=fx*W,b=fy*H。
每条三次贝塞尔线段上控制点坐标的计算过程包括以下步骤。
①基于正玄曲线方程,根据P200点坐标计算出P203点坐标。
P203.x=W2; P203.y=b+b*0.9*sin((W2-a)*2*PI/W2)。
②以P200点为起点,以P203点为终点,根据三次Bezier曲线方程,分别计算t=1/3和t=2/3处的P201点和P202点的坐标。
P201.x=((m1*c2-m2*c1)-(a1*c2-a2*c1)*P200.x-(d1*c2-c1*d2)*P203.x)/(b1*c2-b2*c1)。
P202.x=((m1*b2-m2*b1)-(a1*b2-a2*b1)*P200.x-(d1*b2-d2*b1)*P203.x)/(c1*b2-c2*b1)。
其中,m1=a+(W2-a)/3,m2=a+(W2-a)*2/3;t1=1.0/3,t2=2.0/3; a1=(1-t1)*(1-t1)*(1-t1); b1=3*t1*(1-t1)*(1-t1); c1=3*t1*t1*(1-t1); d1=t1*t1*t1; a2=(1-t2)*(1-t2)*(1-t2); b2=3*t2*(1-t2)*(1-t2); c2=3*t2*t2*(1-t2); d2=t2*t2*t2。
P201.y=((n1*c2-n2*c1)-(a1*c2-a2*c1)*P200.y-(d1*c2-c1*d2)*P203.y)/(b1*c2-b2*c1)。
P202.y=((n1*b2-n2*b1)-(a1*b2-a2*b1)*P200.y-(d1*b2-d2*b1)*P203.y)/(c1*b2-c2*b1)。
其中,n1=b-b*0.9*sin((W2-a)*2*PI/(3*W2)), n2=b-b*0.9*sin((W2-a)*2*PI*2/(3*W2))。
③基于正玄曲线方程,根据P200点坐标计算出P206点坐标。
P206.x=W2-a; P206.y=H2-b-b*0.9*sin((W2-a)*2*PI/W2) ④计算P209点坐标。
P209.x=0; P209.y=H2-b ⑤以P206点为起点,以P209点为终点,根据三次Bezier曲线方程,分别计算t=1/3和t=2/3处的P207点和P208点坐标,计算方法与计算P201点、P202点的坐标相同。
⑥P204点坐标等于P203点坐标,P205点坐标等于P206点坐标,P210点坐标等于P209点坐标,P211点坐标等于P200点坐标。之所以要重复这几个点,是为了使得该字幕对象的封闭矢量轮廓信息中的每条Bezier线段都是三次Bezier曲线。实际上,由控制点P203、P204、P205、P206形成的三次Bezier曲线,以及由控制点P209、P210、P211、P200形成的三次Bezier曲线是一条直线段。
以基本图形字幕的几何形状为心形为例,如图3所示。已知心形图元的外接矩形的四点坐标,可以计算出该图元的宽度和高度,分别为W3和H3。首先将该图元分成8条曲线段,分别为从P300到P303、从P303到P306、从P306到P309、从P309到P312、从P312到P315、从P315到P318、P318到P320,从P320到P300。将每条曲线段转换成三次贝塞尔线段后各个控制点坐标的计算过程包括以下步骤。
①首先根据心形图元的形状特点,计算点P300、P303、P306和P309的坐标。
P300.x=0.73*W3+0.27*W3*cos(A), P300.y=0.25*H3-0.25*H3*sin(A); P303.x=0.73*W3+0.27*W3*cos(PI/3+A), P303.y=0.25*H3-0.25*H3*sin(PI/3+A); P306.x=0.73*W3+0.27*W3*cos(2*PI/3+A), P306.y=0.25*H3-0.25*H3*sin(2*PI/3+A); P309.x=0.73*W3+0.27*W3*cos(PI+A), P309.y=0.25*H3-0.25*H3*sin(PI+A)。
其中PI和A为常数,PI=3.1415926,A=-0.5535442。
②利用三次Bezier参数方程,以P300点为起点,以P303点为终点,分别计算t=1/3和t=2/3处的P301点和P302点的坐标。三次Bezier曲线的矩阵形式如下 t∈
t∈
t∈
将上面矩阵展开后,得到 X(t)=A0+A1*t+A2*t2+A3*t3 Y(t)=B0+B1*t+B2*t2+B3*t3 其中,A0=X0;A1=-3X0+3X1;A2=3X0-6X1+3X2;A3=-X0+3X1-3X2+X3;B0=Y0;B1=-3Y0+3Y1;B2=3Y0-6Y1+3Y2;B3=-Y0+3Y1-3Y2+Y3。
由于P300点和P303点的坐标X0、X3、Y0、Y3已知,P301点的t值为1/3,P302点的t值为2/3,因此可以列出一个如下四元一次方程组 X1=A0+A1*(1/3)+A2*(1/3)2+A3*(1/3)3 Y1=B0+B1*(1/3)+B2*(1/3)2+B3*(1/3)3 X2=A0+A1*(2/3)+A2*(2/3)2+A3*(2/3)3 Y2=B0+B1*(2/3)+B2*(2/3)2+B3*(2/3)3 解该方程组,即可得到P301和P302点的坐标X1、X2、Y1、Y2的值。
③利用三次Bezier参数方程,以P303点为起点,以P306点为终点,分别计算t=1/3和t=2/3处的P304点和P305点的坐标。方法与第③步中求P301、P302的坐标相同,不再赘述。
④利用三次Bezier参数方程,以P306点为起点,以P309点为终点,分别计算t=1/3和t=2/3处的P307点和P308点的坐标。方法与第③步中求P301、P302的坐标相同,不再赘述。
⑤根据心形图元的左右对称性,可以得到P311、P312、P313、P314、P315、P316、P317和P318的坐标。
⑥P320点的坐标为(W/2,H)。
⑦P323、P324点的坐标等于P300点,P319点的坐标等于P318点,P321、P322点的坐标等于P320点。
最后,得到8条三次贝塞尔线段组成的矢量轮廓信息。这8条三次贝塞尔线段如下 第一条线段由控制点(P300、P301、P302、P303)形成的三次贝塞尔线段; 第二条线段由控制点(P303、P304、P305、P306)形成的三次贝塞尔线段; 第三条线段由控制点(P306、P307、P308、P309)形成的三次贝塞尔线段; 第四条线段由控制点(P309、P310、P311、P312)形成的三次贝塞尔线段; 第五条线段由控制点(P312、P313、P314、P315)形成的三次贝塞尔线段; 第六条线段由控制点(P315、P316、P317、P318)形成的三次贝塞尔线段; 第七条线段由控制点(P318、P319、P320、P321)形成的三次贝塞尔线段(由于P318、P319的坐标相同,P320、P321的坐标相同,因此这条线段实际上是一条直线段); 第八条线段由控制点(P321、P322、P323、P324)形成的三次贝塞尔线段(由于P321、P322的坐标相同,P323、P324的坐标相同,因此这条线段实际上是一条直线段)。
对于其他类型的基本图形字幕对象,可以按照同样的思想,将其转换为由一次、二次或者三次Bezier线段组成的封闭轮廓。
当字幕对象的类型为复合字幕时,将其转换成矢量轮廓信息的方法包括以下步骤 ①根据复合字幕对象的数据结构,将其拆分为M(M为正整数)个基本字幕对象。基本字幕对象就是指文字字幕对象或者基本图形字幕对象。
②分别使用上述“文字字幕对象”和“基本图形字幕对象”的处理方法得到这M个基本字幕对象的矢量轮廓信息。
③根据M个基本字幕对象的相对空间坐标,将步骤②中得到的M个矢量轮廓信息组合在一起,形成该复合字幕对象的最终矢量轮廓信息。
将字幕对象经过上述转换后,还需要根据字幕对象的旋转、变形参数,将变换后的矢量轮廓信息进行空间几何变换。
假设字幕对象的旋转角度为A,基本字幕对象的控制点个数为n(n为正整数),分别为P
至P[n-1],则对一个基本字幕对象进行空间几何变换的过程包括以下步骤。
a.根据基本字幕对象的外接矩形的四个顶点坐标计算基本字幕对象的中心点Q的坐标。
b.按照如下公式修正旋转后的P[i](0≤i≤n,i为正整数)的坐标 x=P[i].x-Q.x, y=P[i].y-Q.y, P[i].x=Q.x+x*cos(A)-y*sin(A), P[i].y=Q.y+x*sin(A)+y*cos(A); 其中,P[i].x和P[i].y分别为P[i]点横、纵坐标,Q.x和Q.y分别为Q点的横、纵坐标。
在将不同类型的字幕对象转换为由一次、二次或三次Bezier曲线组成的封闭轮廓后,为了使渲染引擎在算法处理上的一致性,降低算法的复杂度,优化算法的效率,还需要将不同次数的Bezier线段统一转换为二次Bezier线段。
将一次Bezier线段转换为二次Bezier线段的原理为将一次Bezier线段的前后两个控制点R0和R1作为二次Bezier线段的第一和第三个控制点,R0和R1的中点作为二次Bezier线段的第二个控制点。
图4是一次Bezier线段转换为二次贝塞尔线段示意图,4a为转换前的一次Bezier线段,4b为转换后的二次Bezier线段。其中,P40=R40,P42=R41,P41=(R40和R41的中点),即P41.x=(R40.x+R41.x)/2;P41.y=(R40.y+R41.y)/2。
将三次Bezier线段转换为二次Bezier线段的原理为将一条三次Bezier线段转换成两条二次Bezier线段。
图5中的5a和5b分别是将三次Bezier线段转换为两条二次Bezier线段的两种情况示意图。假设一个三次Bezier线段的控制点分别为R50、R51、R52、R53。Q1是R50和R51的中点,Q2是R52和R53的中点,Q3是R51和R52的中点,Q4是Q1和Q3的中点,Q5是Q2和Q3的中点,Q6是Q4和Q5的中点,Q7是Q4和Q5构成的直线与R0和R1构成直线的交点,Q8是Q4和Q5构成的直线与R52和R53构成直线的交点。
根据R50、R51、R52、R53四点的坐标以及Bezier参数方程计算出Q1、Q2、Q3、Q4、Q5、Q6、Q7、Q8的坐标如下 Q1.x=(R50.x+R51.x)/2,Q1.y=(R50.y+R51.y)/2; Q2.x=(R52.x+R53.x)/2,Q2.y=(R52.y+R53.y)/2; Q3.x=(R51.x+R52.x)/2,Q3.y=(R51.y+R52.y)/2; Q4.x=(Q1.x+Q3.x)/2,Q4.y=(Q1.y+Q3.y)/2; Q5.x=(Q2.x+Q3.x)/2,Q5.y=(Q2.y+Q3.y)/2; Q6.x=(Q4.x+Q5.x)/2,Q6.y=(Q4.y+Q5.y)/2; Q7.x=(3*Q1.x+3*Q4.x-R0.x-Q6.x)/4, Q7.y=(3*Q1.y+3*Q4.y-R0.y-Q6.y)/4; Q8.x=(3*Q2.x+3*Q5.x-R3.x-Q6.x)/4, Q8.y=(3*Q2.y+3*Q5.y-R3.y-Q6.y)/4。
将原来的三次Bezier线段在Q6点处分成两条二次Bezier线段,一条Bezier线段的三个控制点分别为R50,Q7,Q6,另一条Bezier线段的三个控制点分别为Q6,Q8,R53。
在由二次Bezier曲线组成的封闭轮廓的矢量轮廓信息中,可能存在自相交的二次Bezier线段,即封闭轮廓内含一个或多个闭合环路,如图6、图7和图10所示。为了增强字幕的渲染效果,提高渲染效率,需要对这种情况进行处理,删除或者分割闭合环路。
处理自相交的二次贝塞尔曲线的方法为首先判断封闭轮廓G中是否存在二次贝塞尔线段自相交的情况,如果存在,则继续判断是相邻二次贝塞尔线段自相交还是非相邻二次贝塞尔线段自相交,如果是相邻二次贝塞尔线段自相交,则将封闭轮廓G中内含的包括相邻二次贝塞尔线段自相交的闭合环路删除;如果是非相邻的二次贝塞尔线段自相交,则将封闭轮廓G和其内含的包括非相邻二次贝塞尔线段自相交的闭合环路分割成多个封闭轮廓。
判断封闭轮廓G中是否存在二次贝塞尔线段自相交的方法为假设G中有M个二次贝塞尔线段,分别是B
、B[1]、B[2]至B[M-1];依次取出G中每个二次贝塞尔线段B[j],判断B[j]与G中的其它二次贝塞尔线段是否相交,如果相交,则G存在自相交情况;否则,不存在自相交情况。
判断两条二次贝塞尔线段是否相交的方法为首先计算两条二次贝塞尔线段的外接矩形;然后判断两条二次贝塞尔线段的外接矩形是否存在交集,如果存在,则这两条二次贝塞尔线段相交,如果不存在,则这两条二次贝塞尔线段不相交。
参照图8,计算一条二次贝塞尔线段的外接矩形的方法为假设二次贝塞尔线段的三个控制点分别为P0、P1和P2,P0点的横坐标为P0.x,纵坐标为P0.y;P1点的横坐标为P1.x,纵坐标为P1.y;P2点的横坐标为P2.x,纵坐标为P2.y;计算由P0、P1和P2构成的三角形的外接矩形T,T即为该二次贝塞尔线段的外接矩形,公式如下 T.left=min(P0.x,P1.x,P2.x), T.right=max(P0.x,P1.x,P2.x), T.top=min(P0.y,P1.y,P2.y), T.bottom=max(P0.y,P1.y,P2.y); 其中,T.left表示外接矩形左边框的横坐标,T.right表示外接矩形右边框的横坐标,T.top表示外接矩形上边框的纵坐标,T.bottom表示外接矩形下边框的纵坐标;min函数表示取所有参数中的最小值,max函数表示取所有参数中的最大值。
如果封闭轮廓G中存在二次贝塞尔线段自相交的情况,则判断是相邻二次贝塞尔线段自相交还是非相邻二次贝塞尔线段自相交的方法为如果B[j]与相邻线段B[j+1]相交,则是相邻二次贝塞尔线段自相交,否则是非相邻二次贝塞尔线段自相交。
参照图6,如果是相邻二次贝塞尔线段自相交,则将封闭轮廓G中内含的包括自相交的相邻二次贝塞尔线段的闭合环路删除的方法为 假设G中有M个二次贝塞尔线段,分别是B
、B[1]、B[2]至B[M-1],两条自相交的相邻二次贝塞尔线段分别为B[j]和B[j+1];首先计算B[j]和B[j+1]的交点S;然后将B[j]的起始控制点与S相连构成一条新的二次贝塞尔线段B[j′],将S与B[j+1]的结束控制点相连构成一条新的二次贝塞尔线段B[j+1′],B[j′]、B[j+1′]与封闭轮廓G中原来的二次贝塞尔线段B
到B[j-1]、B[j+2]到B[M-1]构成了一个新的封闭轮廓G′,令G=G′;最后删除S与B[j]的结束控制点构成的封闭轮廓。图6中(6a)为处理前的封闭轮廓G,(6b)为处理后的封闭轮廓G,(6c)为删除的封闭轮廓。
参照图7,如果是非相邻二次贝塞尔线段自相交,则将封闭轮廓G和其内含的包括自相交的非相邻二次贝塞尔线段的闭合环路分割成多个封闭轮廓的方法为 假设两条自相交的非相邻二次贝塞尔线段分别为B[j]和B[k],j<k;首先计算B[j]和B[k]的交点S;然后将B[j]的起始控制点与S相连构成一条新的二次贝塞尔线段B[j′],并将S与B[k]的结束控制点相连构成一条新的二次贝塞尔线段B[k′],B[j′]、B[k′]与封闭轮廓G中原来的线段B
到B[j-1]、B[k+1]到B[M-1]构成了一个新的封闭轮廓G′,令G=G′;最后将S与B[j]的结束控制点和B[k]的起始控制点相连,形成了两条新的二次贝塞尔线段,将这两条新的二次贝塞尔线段与B[j+1]到B[k-1]中所有的二次贝塞尔线段构成了一个新的封闭轮廓G″,将G″加入到字幕对象矢量轮廓信息表。
计算字幕对象矢量轮廓信息中两条二次Bezier曲线交点的方法,从理论上来说,可以根据两条二次Bezier曲线的联合参数方程计算。但这种方法是不可取的,因为不但计算量巨大,而且都是基于浮点数的运算,算法的效率会比较低。因此,本实施方式采用“二分迭代法”。该方法的核心思想为如果两条二次Bezier线段相交,那么根据中点将这两条二次Bezier线段分别分成两条二次Bezier线段,得到4条二次Bezier线段;然后再按照同样的方法,处理这4条线段,直到最终每条线段的起始控制点和结束控制点的空间直线距离小于某一个值(通常情况下,这个值为

),最终可以归结为计算两条直线段的交点。该方法具体包括以下步骤 (I)假设两条相交的二次贝塞尔线段分别为B[j]和B[k],将B[j]和B[k]分别进行如下处理 ①计算二次贝塞尔线段的起始控制点与结束控制点之间的空间直线距离L,

其中,x0、y0为起始控制点横、纵坐标,x1和y1为结束控制点横、纵坐标; ②判断L是否大于M,如果大于,则计算二次贝塞尔线段的中点,将二次贝塞尔线段在中点处划分成两条二次贝塞尔线段,所述的
③重复步骤①至步骤②,直到划分后的每条二次贝塞尔线段的起始控制点与结束控制点之间的空间直线距离L小于或等于M; (II)将B[j]和B[k]经过步骤(I)处理后,假设最终相交的两条二次贝塞尔线段分别为B[j′]和B[k′],计算B[j′]的起始控制点和结束控制点构成的直线与B[k′]的起始控制点和结束控制点构成的直线的交点。
本实施方式中,计算二次贝塞尔线段的中点的方法为假设二次贝塞尔线段的三个控制点分别为P0、P1和P2,函数表达式为 B(t)=(1-t)2P0+2t(1-t)2P1+t2P2 t∈
; 令t=0.5,计算二次贝塞尔曲线方程上的一点,该点便是二次贝塞尔线段的中点,其坐标的计算公式为B=(P0+2*P1+P2)/4。
如图9所示,R1是直线(P0,P1)的中点,R2是直线(P1,P2)的中点,R3是直线(P2,P0)的中点,Q是直线(R1,R2)与直线(R3,P1)的交点。Q点便是二次Bezier曲线(P0,P1,P2)的中点。
R1点横坐标R1.x=(P0.x+P1.x)/2,R1点纵坐标R1.y=(P0.y+P1.y)/2;R2点横坐标R2.x=(P1.x+P2.x)/2,R2点纵坐标R2.y=(P1.y+P2.y)/2。其中,P0.x、P0.y为P0点横、纵坐标;P1.x、P1.y为P1点横、纵坐标;P2.x、P2.y为P2点横、纵坐标。
Q点的横坐标Q.x=(R1.x+R2.x)/2=(P0.x+2*P1.x+P2.x)/4,Q点的纵坐标Q.y=(R1.y+R2.y)/2=(P0.y+2*P1.y+P2.y)/4。
当封闭轮廓G中非相邻二次贝塞尔线段自相交的情况处理后,分割后的封闭轮廓仍有可能存在自相交的情况。如图10所示,(10a)所示的封闭轮廓经过处理后,将其分割成(10b)、(10c)和(10d)所示的封闭轮廓,其中(10c)所示的封闭轮廓仍然存在自相交的情况,因此需要重复上述步骤对(10c)所示的封闭轮廓进行再处理,直到分割后的所有封闭轮廓中没有自相交的情况发生。(10c)所示的封闭轮廓经过再处理后,分割成(10c1)和(10c2)两个封闭轮廓。
在字幕对象的矢量轮廓信息中,不同的封闭轮廓之间可能存在相交的情况,为了有利于字幕对象的后续渲染,增强字幕对象的最终渲染效果,需要对这种情况进行处理,在交点处将一条二次Bezier线段分割成多条二次Bezier线段。
图11出示了本发明所述的根据交点分割字幕对象矢量轮廓中二次贝塞尔曲线的方法,包括以下步骤 (1)计算字幕对象矢量轮廓中所有的二次贝塞尔线段与其他二次贝塞尔线段的交点; (2)在每条二次贝塞尔线段的交点处,将该二次贝塞尔线段分割; 假设一条二次贝塞尔线段B的三个控制点分别是P
、P[1]、P[2],在B上有n个交点,分别为S
到S[n-1],每个交点对应的贝塞尔参数方程中的t值分别是S
.t到S[n-1].t; 首先在S
点处将线段B分成两条线段B1和B1′; B1的三个控制点分别为P
、Q
、S
,P
和S
的坐标已知,Q
的坐标为 Q
.x=(1-t)*P
.x+t*P[1].x, Q
.y=(1-t)*P
.y+t*P[1].y; B1′的三个控制点分别为S
、R
、P[2],S
和P[2]的坐标已知,R
的坐标为 R
.x=(1-t)*P[1].x+t*P[2].x, R
.y=(1-t)*P[1].y+t*P[2].y; 其中,Q
.x表示Q
点的横坐标,Q
.y表示Q
点的纵坐标,R
.x表示R
点横坐标,R
.y表示R
点纵坐标;t=(S
.t-P
.t)/(P[2].t-P
.t),P
.t为P
点对应的贝塞尔参数方程中的t值,P[2].t为P[2]点对应的贝塞尔方程中的t值; 然后在S[1]点处将线段B1′分成两条线段B2和B2′,方法与步骤①相同; 以此类推,最后在S[n-1]点处将线段Bn-1′分成两条线段Bn和Bn′;最终得到N+1条分割后的线段。
图12出示了计算字幕对象矢量轮廓中所有的二次贝塞尔线段与其他二次贝塞尔线段的交点的方法流程,包括以下步骤 ①遍历字幕对象矢量轮廓中所有的封闭轮廓,取出一个与已取不同的封闭轮廓G[i]; ②遍历G[i]中所有的二次Bezier线段,取出一个与已取不同的二次贝塞尔线段B[j]; ③遍历该字幕对象矢量轮廓中除B[j]之外的所有二次贝塞尔线段,取出一个与已取不同的二次贝塞尔线段B[k]; ④判断B[j]与B[k]的外接矩形是否存在交集,如果不存在,则转至步骤③;如果存在,则计算B[j]与B[k]之间的交点。
计算B[j]与B[k]之间的交点与上述计算自相交的二次贝塞尔线段的交点的原理相同,此处不再赘述。
图13出示了本发明所述的根据二次贝塞尔线段的内外边属性对字幕对象矢量轮廓进行规并整理的方法流程,主要包括以下步骤。
(1)确定字幕对象所有封闭轮廓中每条二次贝塞尔线段的内外边属性。
确定一条二次贝塞尔线段的内边/外边属性,只需要确定该条二次贝塞尔线段上的任意一个点在整个字幕对象的矢量轮廓信息中是内点还是外点即可,通常情况下可以使用该条线段的中点。如果该线段的中点是内点,则该条线段为内边;如果是外点,则该条线段为外边。
判断二次贝塞尔线段的中点在字幕对象所有封闭轮廓中是内点还是外点的方法包括以下步骤。
假设二次贝塞尔线段为B,B的三个控制点分别为P
、P[1]、P[2],中点为Q。
①确定B的方向值d如果P[2].y>P
.y,则d=1;如果P [2].y<P
.y,则d=-1;如果P[2].y=P
.y,则d=0。其中,P
.y和P[2].y分别表示P
和P[2]的纵坐标。
②计算B的中点Q坐标。
③判断abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,则以Q点为起点,沿水平方向向右作一射线H;如否,则以Q点为起点沿竖直方向向上作一射线H。本实施方式中,假设沿水平方向向右作一射线H,如图14所示。计算字幕对象所有封闭轮廓中与H相交的除B之外的所有二次贝塞尔线段,假设有M条二次贝塞尔线段与H相交,分别为B
、B[1]至B[M-1]。其中,P
.x和P[2].x分别表示P
和P[2]的横坐标,abs函数为取绝对值函数。
④分别计算B[i]的方向值d[i],方法与步骤①中计算d值的方法相同。其中,i=0、1、......、M-1。
⑤计算d[i]的和值d′d′=d
+d[1]+......+d[M-1]。
⑥根据d和d′计算B的内外边属性值a a=1-abs(SIGN(d+d′)*SIGN(d′))。其中,SIGN(x)定义为(x==0)?0((x>0)?1-1)),即如果x=0,则SIGN(x)=0;如果x>0,则SIGN(x)=1;如果x<0,则SIGN(x)=-1。
如果a=0,则B为内边;如果a=1,则B为外边。
当确定了一个封闭轮廓中的一条二次贝塞尔线段的内外边属性后,则该封闭轮廓该条二次贝塞尔线段之后的二次贝塞尔线段的内外边属性与其相同,直到遇到一个交点为止。
利用上述方法可以确定所有封闭轮廓中包含的每条二次贝塞尔线段的内外边属性。
(2)将属性为内边的二次贝塞尔线段删除。
当确定了矢量轮廓信息中所有的封闭轮廓中包含的每条二次贝塞尔线段的内外边属性后,删除所有标记为内边的二次贝塞尔线段的方法为在每条二次贝塞尔线段中,都有一个边界属性变量表示内边/外边属性,遍历矢量轮廓信息中所有的二次贝塞尔线段,将边界属性为内边的二次贝塞尔线段从封闭轮廓中删除即可。
(3)根据交点重构字幕对象的封闭轮廓。
删除属性为内边的二次贝塞尔线段后,需要对所有的封闭轮廓重新进行规并,即根据交点将二次贝塞尔线段连接起来,重新构建每个封闭轮廓。重新构建的封闭轮廓一定是互为不相交的封闭轮廓。
规并一个字幕对象的具体方法包括以下步骤 a.从所有封闭轮廓中取出一个与已取不同的封闭轮廓G1; b.判断G1的最后一条二次贝塞尔线段的结束点坐标与第一条二次贝塞尔线段的起始点坐标的差值是否小于等于阀值T,通常T取0.00001,如是,则G1不需要处理,重复步骤a至步骤b,直到所有的封闭轮廓被处理完毕; c.取出与G1相邻的下一个封闭轮廓G2; d.判断G1的曲线尾与G2的曲线头或者G1的曲线头与G2的曲线尾是否重合,即判断G1的最后一条二次贝塞尔线段的结束点坐标与G2的第一条二次贝塞尔线段的起始点坐标的差值或者G1的第一条二次贝塞尔线段的起始点坐标与G2的最后一条二次贝塞尔线段的结束点坐标的差值是否小于等于阀值T,如是,则将G1、G2合并,并从矢量轮廓中删除G2; e.取出与G2相邻的下一个封闭轮廓G2′,令G2=G2′,重复步骤d,直到G2为最后一个封闭轮廓或者G2与C1相等; f.重复步骤a至步骤e,直到所有的封闭轮廓被处理完毕。
上述过程用伪代码描述如下 G1=矢量轮廓中第一个封闭轮廓; while(G1!=NULL)//遍历矢量轮廓中所有的封闭轮廓 { while(G1需要重新处理) { G2=G1.Next;//G2是与G1相邻的下一个封闭轮廓 while(G2!=NULL&&G2!=G1) {if(G2需要重新处理){ if(G1的曲线尾与G2的曲线头重合) {//将G1和G2首尾相连G1.Tail.Next=G2.Head;G1.Head.Prev=G2.Tail;G2.Tail.Next=G1.Head;G2.Head.Prev=G1.Tail;G1.Tail=G2.Tail;G′=G2;G2=G2.Prev;从封闭轮廓链表中删除G′; } elseif(G1的曲线头与G2的曲线尾重合) {//将G1和G2首尾相连G2.Tail.Next=G1.Head;G2.Head.Prev=G1.Tail;G1.Tail.Next=G2.Head;G1.Head.Prev=G2.Tail;G1.Head=G2.Head;G′=G2;G2=G2.Prev;从封闭轮廓链表中删除G′; }}G2=G2.Next; }}G1=G1.Next; } (4)计算步骤(3)中获得的所有封闭轮廓以及所有封闭轮廓中每条二次贝塞尔线段的外接矩形,方法同上,此处不再赘述。
(5)标记步骤(3)中获得的所有封闭轮廓的方向,包括顺时针方向和逆时针方向。顺时针方向标记为1,逆时针标记为-1。判断一条封闭曲线G的方向,只需要取出G中任意一条二次贝塞尔线段,判断其方向即可。具体处理步骤如下 ①从封闭轮廓G中任取一条二次贝塞尔线段为B,假设B的三个控制点分别为P
、P[1]、P[2],中点为Q; ②确定B的方向值d如果P[2].y>P
.y,则d=1;如果P[2].y<P
.y,则d=-1;如果P[2].y=P
.y,则d=0; ③计算B的中点Q; ④判断abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,则以Q点为起点,沿水平方向作一射线H;如否,则以Q点为起点沿竖直方向作一射线H;计算字幕对象所有封闭轮廓中与H相交的除B之外的所有二次贝塞尔线段,假设有M条二次贝塞尔线段与H相交,分别为B
、B[1]至B[M-1]; ⑤分别计算B[i]的方向值d[i],方法与步骤①中计算d值的方法相同;其中,i=0、1、......、M-1; ⑥计算d[i]的和值d′d′=d
+d[1]+......+d[M-1]; ⑦计算B的方向属性b的值,b=d*(1-2*abs(d′));如果b>0,则封闭轮廓G为顺时针方向,否则为逆时针方向。
本发明所述的方法并不限于上述具体实施方式
,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
权利要求
1.一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,包括以下步骤
(1)确定字幕对象所有封闭轮廓中每条二次贝塞尔线段的内外边属性;
(2)将属性为内边的二次贝塞尔线段删除;
(3)根据交点重构字幕对象的封闭轮廓;
(4)计算步骤(3)中获得的所有封闭轮廓以及所有封闭轮廓中每条二次贝塞尔线段的外接矩形;
(5)标记步骤(3)中获得的所有封闭轮廓的方向。
2.如权利要求1所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其特征在于,步骤(1)中确定二次贝塞尔线段的内外边属性的方法为判断二次贝塞尔线段上任意一点在字幕对象所有封闭轮廓中是内点还是外点;如果是内点,则包含该点的二次贝塞尔线段为内边;如果是外点,则包含该点的二次贝塞尔线段为外边。
3.如权利要求2所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其特征在于所述的二次贝塞尔线段上任意一点为二次贝塞尔线段的中点。
4.如权利要求3所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其特征在于,判断二次贝塞尔线段的中点在字幕对象所有封闭轮廓中是内点还是外点的方法包括以下步骤假设二次贝塞尔线段为B,B的三个控制点分别为P
、P[1]、P[2],中点为Q;
①确定B的方向值d如果P[2].y>P
.y,则d=1;如果P[2].y<P
.y,则d=-1;如果P[2].y=P
.y,则d=0;所述的P
.y和P[2].y分别表示P
和P[2]的纵坐标;
②计算B的中点Q;
③判断abs(P[2].y-P
.y)是否大于abs(P[2].x-P
.x),如是,则以Q点为起点,沿水平方向作一射线H;如否,则以Q点为起点沿竖直方向作一射线H;计算字幕对象所有封闭轮廓中与H相交的除B之外的所有二次贝塞尔线段,假设有M条二次贝塞尔线段与H相交,分别为B
、B[1]至B[M-1];所述的P
.x和P[2].x分别表示P
和P[2]的横坐标,所述的abs函数为取绝对值函数;
④分别计算B[i]的方向值d[i],方法与步骤①中计算d值的方法相同;所述的i=0、1、......、M-1;
⑤计算d[i]的和值d′d′=d
+d[1]+......+d[M-1];
⑥根据d和d′计算B的内外边属性值a;如果a=0,则B为内边;如果a=1,则B为外边;
所述的a=1-abs(SIGN(d+d′)*SIGN(d′)),所述的SIGN(x)定义为(x==0)?0((x>0)?1-1))。
5.如权利要求4所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其特征在于步骤(1)中,当确定了一个封闭轮廓中的一条二次贝塞尔线段的内外边属性后,则该封闭轮廓该条二次贝塞尔线段之后的二次贝塞尔线段的内外边属性与其相同,直到遇到一个交点为止。
6.如权利要求1所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其特征在于,步骤(4)中计算封闭轮廓中的二次贝塞尔线段和封闭轮廓的外接矩形的方法为
假设二次贝塞尔线段的三个控制顶点分别为P0、P1和P2,P0点的横坐标为P0.x,纵坐标为P0.y;P1点的横坐标为P1.x,纵坐标为P1.y;P2点的横坐标为P2.x,纵坐标为P2.y;计算由P0、P1和P2构成的三角形的外接矩形T,T即为该二次贝塞尔线段的外接矩形,公式如下
T.left=min(P0.x,P1.x,P2.x),
T.right=max(P0.x,P1.x,P2.x),
T.top=min(P0.y,P1.y,P2.y),
T.bottom=max(P0.y,P1.y,P2.y);
其中,T.left表示外接矩形左边框的横坐标,T.right表示外接矩形右边框的横坐标,T.top表示外接矩形上边框的纵坐标,T.bottom表示外接矩形下边框的纵坐标;min函数表示取所有参数中的最小值,max函数表示取所有参数中的最大值;
将封闭轮廓中所有的二次贝塞尔线段的外接矩形进行合并,便得到该封闭轮廓的外接矩形。
7.如权利要求4所述的一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,其特征在于,步骤(5)中所述的方向包括顺时针方向和逆时针方向,将顺时针方向标记为1,逆时针方向标记为-1;标记封闭轮廓方向的方法为首先从封闭轮廓中取出任意一条二次贝塞尔线段B,计算封闭轮廓的方向属性b的值,b=d*(1-2*abs(d′));如果b>0,则该封闭曲线为顺时针方向,否则为逆时针方向。
全文摘要
本发明公开了一种根据内外边属性对字幕对象矢量轮廓进行归并整理的方法,属于广电行业电视节目制播机构的字幕编播技术领域。该方法首先确定字幕对象所有封闭轮廓中每条二次贝塞尔线段的内外边属性,将属性为内边的二次贝塞尔线段删除;然后根据交点重构字幕对象的封闭轮廓;再计算所有封闭轮廓中每条二次贝塞尔线段的外接矩形;最后标记所有封闭轮廓的方向。采用本发明所述的方法,能够使得封闭轮廓之间互不相交,从而提高了字幕的渲染效率,增强了字幕的渲染效果。
文档编号H04N5/278GK101764944SQ20081022586
公开日2010年6月30日 申请日期2008年11月4日 优先权日2008年11月4日
发明者吴正斌, 袁慧晶 申请人:新奥特(北京)视频技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1