背景技术
由于电视字幕具有独立的表意功能,作为一种必备的电视节目要素,电视字幕是一种重要的电视图文的展现形式。随着电视频道、节目内容的细分,各个部门的分工也更加专业化,对于不同类型节目的制作,以单一类型的字幕系统已很难满足要求。另外,电视节目的日益多样性和电视观众欣赏、鉴赏水平的不断提高,也要求电视字幕的应用模式必然朝着多样性的方向发展。
从广义的角度来说,电视字幕所处理的字幕对象可以分为图形和文字两个部分。图形包括各种规则形状的图形、由基本图形元素组成的复合图形和任意不规则图形,文字包括世界上各种语种的文字。
从计算机展现的角度来说,字幕对象渲染的最终目的是根据图形化的矢量信息和图像纹理,采用数字图像处理的相关算法,得到由32位RGBA表示的像素组成的一帧图像。因此将字幕对象归一化为一种图形表达形式,有利于数字图像处理算法的统一化。
从计算机图形学的角度来说,可以将所有类型的字幕对象视为由一系列直线和曲线组成的图形。计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。
在计算机图形学中,Bezier曲线是一种重要的多项式参数曲线。平面中的任意N(N>=2)个点都可以构成一个Bezier曲线。这N个点称为Bezier曲线的控制顶点,N个点组成的多边形称为Bezier曲线的控制多边形。在字幕渲染技术中,可以使用Bezier曲线来表达所有字幕对象的矢量信息,将字幕对象的原始矢量轮廓转化为二次Bezier曲线,并将一个内部自相交Bezier封闭曲线分成多个封闭轮廓,根据交点将一条Bezier线段分割成若干条首尾相连的线段,在字幕矢量轮廓中确定每一条Bezier线段的内边/外边属性,根据内边/外边属性对字幕矢量轮廓进行规并整理,最终得到若干不相交的封闭轮廓。然后,将字幕对象的矢量轮廓离散化为直线段,计算字幕对象的多边形矢量轮廓的属性,进一步根据多边形的方向和加边类型,创建出用来加内边和外边的多边形矢量轮廓。
当针对字幕对象的矢量信息进行上述处理后,对字幕进行渲染,渲染引擎创建像素空间掩码矩阵模型,该模型为一个二维矩阵模型,对应最终渲染后的像素空间,矩阵中每个像素点包括以下属性数据:①一个像素到边界的最短距离Border,②一个像素到最外侧边的侧边方向的距离Side,③经过一个像素的所有边界围成的多边形的面积Area,④一个像素的类型Type,⑤一个像素是否已经进行了反走样处理的标志bAntialiasing。
由于在将字幕对象的原始矢量轮廓(Bezier封闭曲线)离散化成由直线段组成的封闭多边形之后,可以将原来的像素空间放大512倍,即一个像素被分成了512份。像素的坐标空间由原来的(0,0,1,1)浮点数坐标空间转换为(0,0,512,512)整数坐标空间。此时的一个像素被表示成了一个正方形区域,其初始面积为512×512。以上的Border、Side、Area的值都是在512×512的坐标空间中,因此,可以将以上这些数据当作一个像素的掩码。
像素空间掩码矩阵的像素类型一般分为边界像素、轮廓内像素和轮廓外像素,边界像素是指字幕对象的矢量轮廓线段经过的像素,轮廓内像素是指包含在字幕对象的多边形矢量轮廓内的像素,轮廓外像素是指位于字幕对象的多边形矢量轮廓外的像素。确定像素空间掩码矩阵的像素类型能够为字幕渲染提供可靠的依据,保证对原始图像的每个像素的色彩进行准确的赋值。
发明内容
本发明的目的是针对上述基于像素空间掩码矩阵模型的字幕渲染技术的实现原理,提供一种像素空间掩码矩阵的像素类型的确定方法,该方法能够方便准确的判断像素空间掩码矩阵中各像素所属的类型,为字幕渲染提供保障。
本发明的技术方案如下:一种像素空间掩码矩阵的像素类型的确定方法,包括如下步骤:
(1)针对像素空间掩码矩阵中的所有像素,分别计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边形的面积Area;
(2)根据步骤(1)所计算的面积值,确定边界像素;
(3)针对每个非边界像素,向像素右侧水平进行扫描,对扫描中所跨越的字幕对象的多边形矢量轮廓边界线段进行计数;
(4)根据步骤(3)的最终计数结果,确定轮廓内像素或轮廓外像素。
进一步,如上所述的像素空间掩码矩阵的像素类型的确定方法,步骤(1)中计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边形面积的方法如下:
(a)遍历字幕对象的多边形矢量轮廓,针对字幕对象的N个封闭多边形,取出一个多边形Q[i];
(b)遍历多边形Q[i]中的每条边,针对Q[i]中的M条边,取出一条边L[j];
(c)根据边L[j]前后两个端点的坐标,确定边L[j]经过的像素,设L[j]经过了F个像素,分别是C[0]、C[1]、......、C[F-1],F≥1;
(d)从L[j]开始,遍历Q[i]中的所有M条边,分别是L[j]到L[M-1],L[0]到L[j-1],将经过像素C[k]的边与像素C[k]的正方形边界的交点坐标计算出来;
(e)根据步骤(d)计算出来的交点坐标,由经过像素C[k]的边以及像素C[k]的正方形边界构成一个多边形,并将该多边形存放在一个临时数组中,如果临时数组中已经存在一个相同的多边形,就直接转至步骤(f);否则,根据多边形的顶点坐标和个数,采用多边形面积计算公式计算出边L[j]对像素C[k]的面积贡献的值A[j],并累加到像素C[k]原来的像素面积Area值中;
(f)重复步骤(d),直到计算完边L[j]对所有经过像素的面积贡献的值;
(g)重复步骤(b),直到处理完多边形Q[i]中的每条边;
(h)重复步骤(a),直到处理完字幕对象中的每个多边形。
进一步,如上所述的像素空间掩码矩阵的像素类型的确定方法,在步骤(2)中,如果所述的面积值小于512×512,则该像素为边界像素。
进一步,如上所述的像素空间掩码矩阵的像素类型的确定方法,在步骤(3)中,针对扫描中所跨越的字幕对象的多边形矢量轮廓边界线段,确定线段的起点P0和终点P1,并得到起点和终点在Y轴上的坐标P0.y和P1.y,扫描的计数原则为:如果P1.y>P0.y,则计数器加1;如果P1.y<P0.y,则计数器减1;如果P1.y=P0.y,则计数器不变。
更进一步,如上所述的像素空间掩码矩阵的像素类型的确定方法,在步骤(3)中,确定字幕对象的多边形矢量轮廓边界线段的起点P0和终点P1时,先确定多边形矢量轮廓为顺时针多边形轮廓或逆时针多边形轮廓。
进一步,如上所述的像素空间掩码矩阵的像素类型的确定方法,在步骤(4)中,如果最终计数结果为0,则该像素为轮廓外像素;如果最终计数结果不为0,则该像素为轮廓内像素。
本发明的有益效果如下:在对字幕对象的原始Bezier矢量轮廓离散化为多边形之后,一个像素被分成512份。像素的坐标空间由原来的(0,0,1,1)浮点数坐标空间转换为(0,0,512,512)整数坐标空间。此时的一个像素被表示成了一个正方形区域,其初始面积为512×512。本发明通过计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边形的面积来确定边界像素;通过向像素右侧水平扫描,并对扫描中所跨越的字幕对象的多边形矢量轮廓边界线段进行计数的方式来确定非边界像素类型,从而能够准确的对各种像素做出判断,以此来表示轮廓边界位置和轮廓内部区域,为进一步的纹理贴图、色彩填充和反走样处理提供基础。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的描述。
由于目前的用于电视节目制作的字幕系统中字幕渲染普遍存在渲染效率低下、边缘锯齿效应、小字模糊不清晰、文字笔画粗细不均匀、渐变效果不真实、无法实现多边多影渲染效果、无法实现艺术字效果等一系列技术上和应用上的问题,因此,可以通过将字幕对象的矢量信息转化为一个基于等高线的像素掩码矩阵,在此基础上进行字幕渲染的技术来加以解决,这一技术称作基于曲线轮廓的封闭环域和像素掩码矩阵的字幕渲染方法(具体内容可参见同期申请的专利)。
上述方法的关键步骤首先是有限封闭环域的生成。有限封闭环域为有限个内环、外环(内、外环方向相反)定义的一个多连通闭区域,内环必须在一个外环内。一个输入图元由一个或多个封闭轮廓组成,轮廓以首尾连结的二次Bezier曲线表示。对封闭轮廓进行曲线相交检测,通过裁减曲线、并归轮廓,生成有限环域的内外环。
曲线的相交检测利用外接矩形检测选取可能相交曲线对以提高效率,然后递归法对可能相交的Bezier曲线对二分法分割进行局部曲线段的包围盒检测,当分割的曲线段满足直线拟和精度时,用直线规则求交点,根据交点分割相交曲线对。计算交点相连的曲线的方向进行内、外环分类测试,裁减不满足内、外环属性的曲线,即删除被一个外环包含却与外环方向一致的曲线或者被内环包含的与内环方向一致的曲线。连接首尾端点重合的曲线,生成封闭的内外环。
算法的思想基于某一渲染区(渲染基元为一个象素)的渲染属性取决于其相对于环域的位置,即以环域为0距线,通过计算渲染基元相对0距线的距离得到像素掩码矩阵,由像素掩码矩阵的等高线划分不同的渲染区。渲染区的灵活划分,可以实现多层图元渲染;不同的距离计算方式得到不同的等高线,从而实现不同的区域边界导角特性;像素掩码矩阵做深度信息等转换,实现浮雕等立体效果。
因此,算法的另一关键步骤就是像素掩码矩阵中各个属性的计算。离散化曲线环域,根据离散化的轮廓点链的前进方向标记距离映射图中各基元的符号(例如,外环逆时针,则左为正右为负,点链经过的基元为零)。通过对点链中各点的方向矢量及其前后点的方向角平分线方向矢量围成的有限区域范围内计算渲染基元的距离,在映射图中记录各基元的绝对值最小的距离值。
基于上述原理,在将一个字幕对象的Bezier曲线矢量轮廓离散化为多边形矢量G之后,进一步根据多边形的方向和加边类型,创建出用来加内边的多边形矢量G1和用来加外边的多边形矢量G2。然后,就可以对字幕对象进行后续渲染。首先要创建一个二维矩阵模型,这个模型对应最终渲染后的像素空间,如图4a所示,填充了色彩以后的像素空间色彩矩阵如图4b所示,每个像素的色彩值包括RGBA四个分量。
像素空间掩码矩阵中每个像素点包括以下属性数据:
(1).一个像素到边界的最短距离Border。该值在加内边、外边时使用。根据方角边、尖角边、圆角边的不同类型,这个距离有不同的意义。
(2).一个像素到最外侧边的侧边方向的距离Side。该值在加侧边时使用。
(3).经过一个像素的所有边界围成的多边形的面积Area。该值在对边界像素进行反走样贴图时使用。因此首先要区分内部像素和边界像素:对于内部像素来说,该值为固定的值(512*512);对于边界像素而言,该值是一个小于等于512*512的值,表示通过该像素的边与该像素矩形(高和宽均为512)围成多边形的面积。
(4).一个像素的类型Type。该值用来表示一个像素是侧边边界、外边边界、内边边界、内部像素。
(5).一个像素是否已经进行了反走样处理的标志bAntialiasing。使用这个布尔变量以避免对同一个像素进行多次的反走样处理。
以上的Border、Side、Area的值都是在512*512的坐标空间中,因此,可以将以上这些数据当作一个像素的掩码。
如图1所示,像素空间掩码矩阵的像素类型的确定方法包括如下步骤:
(1)针对像素空间掩码矩阵中的所有像素,分别计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边形的面积Area;
(2)根据步骤(1)所计算的面积值,确定边界像素;
(3)针对每个非边界像素,向像素右侧水平进行扫描,对扫描中所跨越的字幕对象的多边形矢量轮廓边界线段进行计数;
(4)根据步骤(3)的最终计数结果,确定轮廓内像素或轮廓外像素。
步骤(1)中计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边形面积的方法如下:
(a)遍历字幕对象的多边形矢量轮廓,针对字幕对象的N个封闭多边形,取出一个多边形Q[i];
(b)遍历多边形Q[i]中的每条边,针对Q[i]中的M条边,取出一条边L[j];
(c)根据边L[j]前后两个端点的坐标,确定边L[j]经过的像素,设L[j]经过了F个像素,分别是C[0]、C[1]、......、C[F-1],F≥1;
(d)从L[j]开始,遍历Q[i]中的所有M条边,分别是L[j]到L[M-1],L[0]到L[j-1],将经过像素C[k]的边与像素C[k]的正方形边界的交点坐标计算出来;
(e)根据步骤(d)计算出来的交点坐标,由经过像素C[k]的边以及像素C[k]的正方形边界构成一个多边形,并将该多边形存放在一个临时数组中,如果临时数组中已经存在一个相同的多边形,就直接转至步骤(f);否则,根据多边形的顶点坐标和个数,采用多边形面积计算公式计算出边L[j]对像素C[k]的面积贡献的值A[j],并累加到像素C[k]原来的像素面积Area值中;
(f)重复步骤(d),直到计算完边L[j]对所有经过像素的面积贡献的值;
(g)重复步骤(b),直到处理完多边形Q[i]中的每条边;
(h)重复步骤(a),直到处理完字幕对象中的每个多边形。
步骤(e)中多边形面积计算公式为:
B=0.5×fabs(Y[0]×(X[N-1]-X[1])+Y[N-1]×(X[N-2]-X[0]))
其中,多边形的N个顶点的坐标为:(X[0],Y[0])--(X[N-1],Y[N-1])。
正如上文所介绍的,面积Area值小于512×512,则该像素为边界像素。对于非边界像素,要根据该像素是位于字幕轮廓内部或者轮廓外部来确定是内点还是外点。在上述方法的步骤(3)中,针对扫描中所跨越的字幕对象的多边形矢量轮廓边界线段,确定线段的起点P0和终点P1,并得到起点和终点在Y轴上的坐标P0.y和P1.y,扫描的计数原则为:如果P1.y>P0.y,则计数器加1;如果P1.y<P0.y,则计数器减1;如果P1.y=P0.y,则计数器不变。因此,在确定字幕对象的多边形矢量轮廓边界线段的起点P0和终点P1时,先需要确定多边形矢量轮廓为顺时针多边形轮廓或逆时针多边形轮廓。
由于字幕对象的多边形矢量轮廓是由字幕对象的曲线矢量轮廓离散化为直线段以后得到的,因此,曲线矢量轮廓的顺时针或逆时针方向即为多边形矢量轮廓的顺时针或逆时针方向。判断一条封闭曲线G的顺时针/逆时针方向,只需要取出G中任意一条Bezier线段,判断其方向即可。具体处理步骤如下:
第一步,取出这个封闭曲线G中的一条曲线段B,假设B的三个控制点分别为P[0]、P[1]、P[2];
第二步,根据线段B的起始控制点P[0]和结束控制点P[2]构成直线的矢量,确定是在水平方向还是在垂直方向上的进行判断,如果abs(P[2].y-P[0].y)>abs(P[2].x-P[0].x),则将根据水平方向进行判断处理,否则,将根据垂直方向进行判断;
第三步,如果根据水平方向来判断,则确定B的方向值为d,d的计算方法为:如果P[2].y>P[0].y,则d=1,如果P[2].y<P[0].y,则d=-1,如果P[2].y=P[0].y,则d=0;
第四步,求出P[0]与P[2]的中点Q;
第五步,假设H为沿Q点的y坐标构成的水平直线,以Q点为起点向右侧方向,计算与H相交的所有其它Bezier线段,假设有M条线段与H相交,这些线段为B[0],B[1],......,B[M-1];
第六步,计算B[i]的方向d[i],计算方法与第一步中计算B的方法相同;
第七步,d’为d[i]的总和,即d’=d[0]+d[1]+......+d[M-1];
第八步,根据d和d’计算封闭曲线G方向属性a,计算公式如下:
封闭曲线G方向属性a=d*(1-2*abs(d’)),如果a>0,表示封闭曲线G为顺时针方向,否则为逆时针方向。
在步骤(4)中,如果最终计数结果为0,则该像素为轮廓外像素;如果最终计数结果不为0,则该像素为轮廓内像素。
具体的实例如图2和图3所示,根据上述方法,图2中像素A的跨越边界计数为1,因此像素A为轮廓内像素,图3中像素B的跨越边界计数为0,因此像素B为轮廓外像素。
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。