发明内容
本发明的目的是针对上述基于曲线轮廓封闭环域和像素空间掩码的字幕渲染技术的实现原理,提供一种基于像素空间掩码矩阵的纹理贴图方法,从而实现在贴图半径内部对原始图像的每个像素色彩的准确赋值。
本发明的技术方案如下:一种基于像素空间掩码矩阵的纹理贴图方法,包括如下步骤:
(1)建立与原始图像具有相同维数的像素空间掩码矩阵和纹理图像矩阵;
(2)确定用于字幕对象渲染的纹理贴图的顺序;
(3)根据字幕对象加边的类型和边的厚度确定纹理贴图的半径MinR和MaxR;
(4)根据需要贴图的图像中的像素点的位置,进行色彩的赋值或反走样处理。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(2)中字幕对象渲染的纹理贴图的顺序为:内边、面、外边、侧边、影子。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(3)中针对N条内边,设每条边的厚度为S[i],i∈[0,N-1],则:
第1条内边的MinR=0,MaxR=S[0];
第2条内边的MinR=S[0],MaxR=MinR+S[1];
第i条内边的MinR=S[1]+S[2]+...+S[i-2],MaxR=MinR+S[i-1];
第N条内边的MinR=S[1]+S[2]+...+S[N-2],MaxR=MinR+S[N-1]。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(3)中针对面,在不加内边的情况下,MinR=0,MaxR=像素空间掩码矩阵中像素点到字幕对象曲线轮廓边界的距离的最大值;在加内边的情况下,MinR=所有内边厚度之和,MaxR=像素空间掩码矩阵中像素点到字幕对象曲线轮廓边界的距离的最大值。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(3)中针对M条外边,设每条边的厚度为W[i],i∈[0,M-1],则:
第1条外边的MinR=0,MaxR=W[0];
第2条外边的M nR=W[0],MaxR=MinR+W[1];
第i条外边的MinR=W[1]+W[2]+...+W[i-2],MaxR=MinR+W[i-1];
第M条外边的MinR=W[1]+W[2]+...+W[M-2],MaxR=MinR+W[M-1]。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(3)中针对侧边,MinR=所有外边厚度之和,MaxR=MinR+侧边厚度。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(3)中针对影子,MinR=所有外边厚度之和,MaxR=MinR+影子厚度。
进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(4)中如果需要贴图的图像中的像素点在纹理贴图半径MinR和MaxR所表示的两条等高线围成的区域内,则直接进行色彩赋值;如果需要贴图的图像中的像素点在纹理贴图半径MinR和MaxR所表示的两条等高线上,则根据像素空间掩码矩阵索引处对应的经过该像素的所有边界围成的多边形的面积Area值进行反走样处理。
更进一步,如上所述的基于像素空间掩码矩阵的纹理贴图方法,步骤(4)中,设需要贴图的图像中的像素点为P[i][j],如果P[i][j]在纹理贴图半径MinR和MaxR所表示的两条等高线围成的区域内,则P[i][j]的色彩值为:RGBA(P[i][j])=RGBA(T[i][j]);如果P[i][j]在纹理贴图半径MinR和MaxR所表示的两条等高线上,则P[i][j]的色彩值为:RGBA(P[i][j])=RGBA(P[i][j])×(1-M[i][j].Area)+RGBA(T[i][j])×M[i][j].Area;
其中,
RGBA(P[i][j])为需要贴图图像中索引[i,j]处的RGBA的值;
RGBA(T[i][j])为纹理图像矩阵中索引[i,j]处的RGBA的值;
M[i][j].Area为像素空间掩码矩阵中索引[i,j]处对应的经过该像素的所有边界围成的多边形的面积Area值。
本发明的有益效果如下:本发明按照一定的贴图顺序,根据像素空间掩码矩阵和纹理矩阵,在贴图半径内部对原始图像的每个像素的色彩进行赋值,同时对半径边缘的像素进行反走样处理。通过渲染区的灵活划分,可以实现多层图元渲染的效果,使字幕边缘更加圆滑,层次更加丰富,整体效果更加精美。从而便于频道节目包装,提高收视质量,提升电视节目制播机构的整体形象,满足公众的欣赏要求,为电视节目制播机构取得更好的经济效益。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的描述。
由于目前的用于电视节目制作的字幕系统中字幕渲染普遍存在渲染效率低下、边缘锯齿效应、小字模糊不清晰、文字笔画粗细不均匀、渐变效果不真实、无法实现多边多影渲染效果、无法实现艺术字效果等一系列技术上和应用上的问题,因此,可以通过将字幕对象的矢量信息转化为一个基于等高线的像素掩码矩阵,在此基础上进行字幕渲染的技术来加以解决,这一技术称作基于曲线轮廓的封闭环域和像素掩码矩阵的字幕渲染方法(具体内容可参见同期申请的专利)。
上述方法的关键步骤首先是有限封闭环域的生成。有限封闭环域为有限个内环、外环(内、外环方向相反)定义的一个多连通闭区域,内环必须在一个外环内。一个输入图元由一个或多个封闭轮廓组成,轮廓以首尾连结的二次Bezier曲线表示。对封闭轮廓进行曲线相交检测,通过裁减曲线、并归轮廓,生成有限环域的内外环。
曲线的相交检测利用外接矩形检测选取可能相交曲线对以提高效率,然后递归法对可能相交的Bezier曲线对二分法分割进行局部曲线段的包围盒检测,当分割的曲线段满足直线拟和精度时,用直线规则求交点,根据交点分割相交曲线对。计算交点相连的曲线的方向进行内、外环分类测试,裁减不满足内、外环属性的曲线,即删除被一个外环包含却与外环方向一致的曲线或者被内环包含的与内环方向一致的曲线。连接首尾端点重合的曲线,生成封闭的内外环。
算法的思想基于某一渲染区(渲染基元为一个象素)的渲染属性取决于其相对于环域的位置,即以原始轮廓环域为0距线,通过计算渲染基元相对0距线的距离得到像素掩码矩阵,由像素掩码矩阵的等高线划分不同的渲染区。渲染区的灵活划分,可以实现多层图元渲染;不同的距离计算方式得到不同的等高线,从而实现不同的区域边界导角特性;像素掩码矩阵做深度信息等转换,实现浮雕等立体效果。
因此,算法的另一关键步骤就是像素掩码矩阵中各个属性的计算。离散化曲线环域,根据离散化的轮廓点链的前进方向标记距离映射图中各基元的符号(例如,外环逆时针,则左为正右为负,点链经过的基元为零)。通过对点链中各点的方向矢量及其前后点的方向角平分线方向矢量围成的有限区域范围内计算渲染基元的距离,在映射图中记录各基元的绝对值最小的距离值。
基于上述原理,在将一个字幕对象的Bezier曲线矢量轮廓离散化为多边形矢量G之后,进一步根据多边形的方向和加边类型,创建出用来加内边的多边形矢量G1和用来加外边的多边形矢量G2。然后,就可以对字幕对象进行后续渲染。
本发明首先需要建立与原始图像具有相同维数的像素空间掩码矩阵M和纹理图像矩阵T,如图1所示。
纹理图像矩阵T即是根据最终需要得到的图像的纹理效果而确定的,应该注意的是纹理图像矩阵T的维数与像素空间掩码矩阵M的维数应该相同。
像素空间掩码矩阵M中每个像素点包括以下属性数据:
(1).一个像素到边界的最短距离Border。该值在加内边、外边时使用。根据方角边、尖角边、圆角边的不同类型,这个距离有不同的意义。
(2).一个像素到最外侧边的侧边方向的距离Side。该值在加侧边时使用。
(3).经过一个像素的所有边界围成的多边形的面积Area。该值在对边界像素进行反走样贴图时使用。因此首先要区分内部像素和边界像素:对于内部像素来说,该值为固定的值(512*512);对于边界像素而言,该值是一个小于等于512*512的值,表示通过该像素的边与该像素矩形(高和宽均为512)围成多边形的面积。
(4).一个像素的类型Type。该值用来表示一个像素是侧边边界、外边边界、内边边界、内部像素。
(5).一个像素是否已经进行了反走样处理的标志bAntialiasing。使用这个布尔变量以避免对同一个像素进行多次的反走样处理。
以上的Border、Side、Area的值都是在512*512的坐标空间中,因此,可以将以上这些数据当作一个像素的掩码。以上属性数据的具体确定方法可以参见同期申请的专利,此处仅对本发明中需要用到的一个像素到边界的最短距离Border值以及经过一个像素的所有边界围成的多边形的面积Area值的计算进行介绍。
如图4、图5所示,计算一个像素到边界的最短距离Border值的方法如下:
(1)在字幕对象的多边形矢量轮廓边界上选取直线段(P0,P1),确定直线段(P0,P1)两个端点P0、P1的坐标(P0.x,P0.y)、(P1.x,P1.y)以及两个端点的加边方向的向量(P0.dx,P0.dy)、(P1.dx,P1.dy);
加边方向的向量与加边方向的角度的关系如下:
P0.dx=Cos(A0)P0.dy=Sin(A0)
P1.dx=Cos(A1)P1.dy=Sin(A1)
其中,P0点的加边方向的角度为A0,P1点的加边方向的角度为A1。
(2)设定沿加边方向逐层计算的距离k、步长s,根据P0、P1的加边方向的向量依次计算P0、P1在加边方向上所对应的点P2、P3、P4、P5的坐标;
P2、P4的坐标根据P0点来计算:
P2.x=P0.x+(k-s)*P0.dx;
P2.y=P0.y+(k-s)*P0.dy;
P4.x=P0.x+k*P0.dx;
P4.y=P0.y+k*P0.dy;
P3、P5的坐标根据P1点来计算:
P3.x=P1.x+(k-s)*P1.dx;
P3.y=P1.y+(k-s)*P1.dy;
P5.x=P1.x+k*P1.dx;
P5.y=P1.y+k*P1.dy。
(3)由P2、P3、P4、P5点围成四边形,遍历四边形内的所有像素点,根据点到直线垂直距离的计算公式,计算每个点到直线段(P0,P1)的距离。
计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边形面积Area值的方法如下:
(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])。
在上述像素空间掩码矩阵模型中,具有相同Border值的点构成了一系列等高线,利用这些等高线,就形成了多个渲染区域。外边个数、内边个数、侧边个数、影子个数与渲染区域个数的关系如下,假设一个字幕对象的外边个数为W、内边个数为N、侧边个数为C、影子个数为Y:
则渲染区域个数X为:X=W+(N>1?(N+1):N)+C+Y+1
上式中(N>1?(N+1):N)的含义为N>1时为(N+1),否则为N。
图2所示的字幕对象具有2个外边、3个内边、2个侧边、2个影子,共划分11个渲染区域:
(1).渲染区域1:外边2与外边1之间的区域
(2).渲染区域2:外边1与原始轮廓之间的区域
(3).渲染区域3:原始轮廓与内边1之间的区域
(4).渲染区域4:内边1与内边2之间的区域
(5).渲染区域5:内边2与内边3之间的区域
(6).渲染区域6:内边3之内的面区域
(7).渲染区域7:内边3与面之间的区域
(8).渲染区域8:外边2与侧边1之间的区域
(9).渲染区域9:侧边1与侧边2之间的区域
(10).渲染区域10:影子1的区域
(11).渲染区域11:影子2的区域
图3所示的字幕对象具有2个外边、1个内边、1个侧边、1个影子,共划分6个渲染区域。
(1).渲染区域1:外边2与外边1之间的区域
(2).渲染区域2:外边1与原始轮廓之间的区域
(3).渲染区域3:原始轮廓与内边之间的区域
(4).渲染区域4:内边之内的面区域
(5).渲染区域5:外边2与侧边之间的区域
(6).渲染区域6:影子的区域
建立了像素空间掩码矩阵M和纹理图像矩阵T后,就需要进行如下纹理贴图的处理步骤:
第一,确定纹理贴图的顺序。在基于像素空间掩码的纹理贴图中,字幕对象渲染贴图的顺序为:内边(多个)、面、外边(多个)、侧边、影子。
第二,确定纹理贴图半径MinR和MaxR。MinR和MaxR表示的是两条等高线。
(1).针对N条内边,假设每条边的厚度为S[i],i∈[0,N-1],则:
第1条内边的MinR=0,MaxR=S[0];
第2条内边的MinR=S[0],MaxR=MinR+S[1];
第i条内边的MinR=S[1]+S[2]+...+S[i-2],MaxR=MinR+S[i-1];
第N条内边的MinR=S[1]+S[2]+...+S[N-2],MaxR=MinR+S[N-1];
(2).针对面,则:
如果不加内边,则MinR=0,MaxR=像素空间掩码矩阵MASK中最大的Border值;
如果加内边,则MinR=所有内边厚度之和,MaxR=像素空间掩码矩阵MASK中最大的Border值;
(3).针对M条外边,假设每条边的厚度为W[i],i∈[0,M-1],则:
第1条外边的MinR=0,MaxR=W[0];
第2条外边的MinR=W[0],MaxR=MinR+W[1];
第i条外边的MinR=W[1]+W[2]+...+W[i-2],MaxR=Mi nR+W[i-1];
第M条外边的MinR=W[1]+W[2]+...+W[M-2],MaxR=MinR+W[M-1];
(4).针对侧边:MinR=所有外边厚度之和,MaxR=MinR+侧边厚度;
(5).针对影子:MinR=所有外边厚度之和,MaxR=MinR+影子厚度。
第三,纹理贴图。假设像素空间掩码矩阵为MASK,简称M,纹理图像矩阵为TEXTURE,简称为T,需要贴图的图像为PICTURE,简称P。M、T、P的维数相同,假设为w和h。对于P中的一个点P[i][j],i∈[0,w-1],j∈[0,h-1],色彩RGBA的值为:
(1).根据像素空间掩码的Border值来判断像素点P[i][j]是否位于(MinR,MaxR)表示的等高线内;
如果(M[i][i].Border<Mi nR或者M[i][i].Border>MaxR),则该像素点不在这个等高线内,此时不做任何处理。
否则该像素点不这个等高线内,进行如下的后续处理。
(2).根据像素空间掩码的Type值、MinR、MaxR的值来判断像素点P[i][j]是等高线的内点还是等高线上的点;
满足如下条件之一的点为等高线内点:
M[i][i].Type!=边界
否则该像素点就是等高线上的点。
(3).根据上述得到的结果,进行色彩的赋值。
对于等高线的内点,直接进行色彩赋值即可;对于等高线上的点,需要根据像素空间掩码的Area值进行反走样处理。
如果P[i][j]是等高线内的点,则:P[i][j]的色彩值为:RGBA(P[i][j])=RGBA(T[i][j])
如果P[i][j]是等高线上的点,则:P[i][j]的色彩值为:RGBA(P[i][j])=RGBA(P[i][j])×(1-M[i][j].Area)+RGBA(T[i][j])×M[i][j].Area
RGBA(P[i][j])为需要贴图图像PICTURE中索引[i,j]处的RGBA的值;
RGBA(T[i][j])为纹理图像矩阵TEXTURE中索引[i,j]处的RGBA的值;
M[i][j].Border和M[i][j].Area为像素空间掩码矩阵MASK中索引[i,j]处对应的Border和Area的值。
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。