基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方法

文档序号:7927635阅读:195来源:国知局
专利名称:基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方法
技术领域
本发明涉及电视节目制作领域的字幕渲染技术,具体涉及一种基于曲线 轮廓封闭环域和像素掩码矩阵的字幕渲染方法。
背景技术
电视字幕是视觉语言的一种,它以文字和图形符号的方式传递着信息,是 对声音与图像所表达的内容的强化和补充。在电视节目这个包容着声画艺术的 媒体中,字幕已被作为与画外音、解说词同样重要的"第二解说"。电视字幕丰 富了视觉感观,较画面而言,更为直观地传达给了观众所要了解的信息,对电 视节目特别是电视新闻的主题既是点睛之笔,又起到了深化画面主题的作用。 通过字幕与图像的完美结合,可以大大提高电视节目的可视性。根据画面的色
彩和内容、节奏、气氛的需要,选择适当的颜色配置字幕,不仅能给人以美的 享受,而且还可以丰富画面的色彩,起到渲染气氛、扬抑情绪、突出重点的作 用。电视字幕的适当出现,可增强电视节目的视觉效果。
因此,从应用的角度来说,电视字幕具有独立表意功能,作为一种必备的 电视节目要素,电视字幕是一种重要的电视图文的展现形式。随着电视频道、 节目内容的细分,各个部门的分工也更加专业化,对于不同类型节目的制作, 以前单一类型的字幕系统已很难满足要求。另外,电视节目的日益多样性和电
视观众欣赏、鉴赏水平的不断提高,也要求电视字幕的应用模式必然朝着多样 性的方向发展。从电视字幕的具体类别角度来说, 一个字幕系统应该支持各种
不同的字幕形式节目片头类、节目片尾、节目结束标志类、人物介绍、演职 员类、内容提要类、问题及答案类、图文图表类、特技类、栏目标识、标题字 幕、事件说明类、唱词、同期声对白、画外音、解说词、节目曲名、创作者、 表演者、素材来源说明、节目预告、栏目信息、滚动信息、节目播出属性提示、 频道标识等。从节目特性角度来说, 一个电视字幕系统应该能够很好的支持以 下类型节目的制作和播出新闻直播、财经资讯、体育转播、综艺晚会类、气象预告、各类专题节目、电视剧制作、频道后期包装、综合资讯、图文互动、 科学普及等。各类节目对字幕对象的要求也有很大的差异,例如新闻直播类节 目要求字幕形式筒洁明快、庄重严肃;财经资讯类节目要求信息的实时准确、
内容丰富;体育转播、综艺晚会类节目要求字幕信息静态效果绚丽多彩、动态 效果吸引观众;频道后期包装要求字幕对象与整体频道风格统一、具有时代感、
节奏感。
所有这些特质归结起来就是字幕对象渲染的最终效果。
字幕渲染技术是计算机图形学、计算机数字图像处理与电视台的节目制作 业务相结合的产物。从计算机图形学的角度来说,可以将所有类型的字幕对象 视为由 一 系列直线和曲线组成的图形。计算机图形学的主要研究内容就是研究 如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相 关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、 线宽等非几何属性组成。从处理技术上来看,图形主要分为两类, 一类是基于 线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图, 也就是通常所说的真实感图形。计算机图形学一个主要的目的就是要利用计算 机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何 表示,再用某种光照模型,计算在假想的光源、紋理、材质属性下的光照明效 果。从计算机数字图像处理的角度来说,对字幕对象的渲染包括两个方面,第 一,基于像素或子像素的一系列静态处理,例如,图像增强、二值化处理、边 缘检测、模糊处理、浮雕、边缘反走样、亮度贴图、材质贴图、防抖动、椭圆 变形、多边形变形、勾边、增亮、锐化、柔化、凸起、彩色铅笔、油画龟裂、 交叉影线、剪样、玻璃、边缘增亮、墨水轮廓画、瓷砖、信纸、拼缀物、塑料 包装、水波紋、海绵、喷涂笔、着色玻璃、高斯模糊等特效;第二,基于关键 帧的一系列动态处理,包括水波、旗飘、螺旋、扭曲、三维投影、火焰、球变、 三维形变、弯曲、幻影、巻页、折叠、礼花、百叶窗、碎裂、水波、波动、划 像、转球、螺旋、旗飘、波动虚影、蝶变、流光、凸镜、万花筒、激光、飞光、 魔幻螺旋、运动模糊、径向模糊、波浪、波浪倒影、回旋等特效。
因此,字幕的渲染效果永远是衡量一个字幕系统的重要指标,特别是在反走 样处理、小字的细节处理、立体边的处理、虚边、虚影、真实三维;f见觉感、三 维字倒角、紋理、光照的处理方面。在目前现有的字幕系统中,在字幕渲染方面存在着以下的问题 第一,将文本字幕与图形字幕的渲染区别开来,而且不同的图形元素也使 用不同性质的几何矢量来描述。这个问题在实现和应用两个方面给字幕系统带 来了很多的不利。从实现的角度来说,这会导致一个字幕系统中存在多个完全 不同的渲染引擎和渲染流程,而且如果要支持一种新的字幕对象,可能就要定 义并实现新的渲染引擎,造成字幕系统的功能扩展性存在很大的局限性;从应 用的角度来说,带来两方面致命的问题 一方面,不同类型的字幕对象最终展 现的效果不一致,例如两个不同类型的字幕对象同样是加了两个像素的全边, 但由于经过了不同的渲染引擎,最终的处理结果可能是不同的,在进行字幕创 作时给使用者带来诸多不便;另一方面,在字幕系统中针对字幕对象的操作不 得不进行特定的限制,例如,有的字幕对象支持几何旋转、几何缩放,有的则 不支持,有的字幕对象支持任意角度的加边、加影,有的则只支持固定角度的 加边、加影,有的甚至不支持。所有这些问题都会影响字幕系统的普遍适用性 和功能完备性。
第二,字幕渲染引擎的核心算法都是基于浮点运算,例如三角函数运算、 反三角函数运算、除法运算、幂运算、开方运算等。这会导致两方面的问题, 一方面,由于最终处理结果要求的是整数型的像素值,因此在渲染引擎算法的 不同阶段会进行取整运算,这就会造成计算上的累计误差,导致最终的字幕效 果在局部细节上存在缺陷,例如笔画多的文字模糊不清晰、笔画粘连等;另一 方面,这些浮点运算都是占用大量机器指令的数学运算,这就大大降低了整个 字幕系统的工作效率,影响到字幕制作和播出的时效性。特别是在高清晰度电 视字幕的制作中,由于其数据量是标清的5倍,这一点表现的更加明显。
第三,作为字幕渲染重要指标之一的边缘反走样的效果不甚理想,甚至无 法达到实用的程度。这是因为现有的字幕系统在进行反走样处理时,完全依赖 当前像素空间的图像处理方法,没有字幕几何矢量信息的参与,也就无法实现 基于子像素的处理。这就使得现有的字幕系统的最终渲染效果出现比较明显的 边缘锯齿效应,影响字幕展现的效果。
第四,由于上述同样的原因,在对字幕对象进行基于滤镜管道(FilterPipe) 的图像处理时,也会影响字幕的最终效果。现有的字幕系统的渲染流程通常是 先进行面边影的贴图,得到一个图像,然后将这个图像放入滤镜管道中,再进行一系列的图像处理。但是由于没有字幕几何矢量信息的参与,滤镜管道的处 理会破坏前者反走样后的效果,也就是说,在本来就不理想的边缘处理上累积 了新的边缘锯齿效应。
第五, 一个字幕对象在进行渐变色渲染时,应该是按照这个物体的矢量轮 廓进行径向的渐变色彩处理,但是在现有的字幕系统中,对渐变色的渲染处理 是将渐变色放到一个内存块中,在渲染时,还是采取了对应像素贴图的方法。 这就使得现有的字幕系统无法实现真正意义上的渐变色的渲染效果。
第六,现有的字幕系统无法实现增加多个外边、多个内边、多个侧面立体 边、多个影子。在上面对字幕系统应用特点的分析中可以得出结论,现在的电 视节目制作对字幕系统的要求越来越高,简单的面、边、影的叠加的字幕展现 已经无法应对这种应用需求。
第七,现有的字幕系统的渲染都不是基于Bezier曲线轮廓,但是由于 TrueType字库中的字模都是使用Bezier曲线来描述的,所以就需要将从字库中 提取出来的Bezier曲线转换成另外一种形式的矢量,由于不同矢量表达式之间 的信息存在不对称性,在这个转换过程中会出现信息的损失,从而使得笔画的 形状变形,导致笔画粗细不均匀,影响字型展现的美观。
第八,由于上述同样的问题,对于稍微复杂一些的图形元素的字幕对象, 在图形拐点处出现振荡效应,导致图形轮廓不平滑。例如常用的圆角矩形对象, 由四个角的圆弧与四条直线组成,在圓弧与直线相接的地方,就会出现凸凹不 平的现象。
第九,现有的字幕系统无法将文本字幕对象转换为图形字幕对象,从而无 法实现字符变形、字符倒影、字符反转、曲线摆放、艺术字等功能,无法满足 高级的字幕应用需求。
第十,现有的字幕系统无法实现多种不同类型的加边方式,例如尖角边、 圓角边、方角边等。这在一定程度上影响了字幕应用的广泛性。
第十一,现有的字幕系统无法实现对任意形状不规则图形的支持,从而无 法应对日益重要的地理信息描述、气象预报、综合资讯等类型的节目制作。

发明内容
本发明的目的是针对现有技术中存在的上述问题,提供一种基于曲线轮廓封 闭环域和像素掩码矩阵的字幕渲染方法,在处理过程中有机地将计算^/L图形学
10和数字图像处理结合起来,将字幕对象的矢量信息转化为一个基于等高线的像 素掩码矩阵,并将其贯穿应用在字幕渲染的所有环节之中。
本发明的技术方案如下 一种基于曲线轮廓封闭环域和像素掩码矩阵的字 幕渲染方法,包括如下步-骤
(1) 将字幕对象转换为由一次、二次或三次贝塞尔线段组成的包括N个封 闭轮廓的矢量轮廓信息,所述的N为正整数;
(2) 将步骤(1)获得的封闭轮廓中一次和三次贝塞尔线段转换成二次贝 塞尔线,史;
(3 )将经步骤(2 )转换后的矢量轮廓信息中自相交的封闭轮廓内含的闭 合环路删除或者分割;
(4) 对经步骤(3)处理后的矢量轮廓信息中相交的封闭轮廓进行规并整 理,使封闭轮廓之间互不相交;
(5) 将经步骤(4)处理后的矢量轮廓信息中的封闭轮廓转换成多边形;
(6) 对经步骤(5)转换后的矢量轮廓信息中的多边形进行加边处理;
(7) 创建一个二维矩阵模型,使之对应最终渲染后的像素空间;
(8 )根据步骤(6 )得到的字幕对象的多边形矢量轮廓,确定上述二维矩 阵的属性值,得到像素空间掩码矩阵模型;
(9) 建立与像素空间掩码矩阵维数相同的字幕渲染紋理图像矩阵,根据字 幕渲染紋理图像矩阵以及像素空间掩码矩阵的属性对字幕对象进行紋理贴(10) 建立一维形态渐变色彩数组,根据形态渐变色彩数组以及像素空间 掩码矩阵的属性对字幕对象进行形态渐变径向色彩填充。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,其中,还包括步骤(11)针对边界像素根据其相邻四像素的等高线距离进 行反走样处理。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,步骤(3)中将矢量轮廓信息中自相交的封闭轮廓内含的闭合环路删除或者 分割的方法包括以下步骤① 从字幕对象的矢量轮廓信息中取出一个与已取不同的封闭轮廓G;
② 判断封闭轮廓G中是否存在二次贝塞尔线段自相交的情况,如果存在,则 继续判断是相邻二次贝塞尔线段自相交还是非相邻二次贝塞尔线段自相交,如 果是相邻二次贝塞尔线段自相交,则将封闭轮廓G中内含的包括自相交的相邻 二次贝塞尔线段的闭合环路删除;如果是非相邻二次贝塞尔线段自相交,则将 封闭轮廓G和其内含的包括自相交的非相邻二次贝塞尔线段的闭合环路分割成 多个封闭轮廓;
③ 重复步骤②,直到封闭轮廓G中所有的自相交情况处理完毕;
④ 重复步骤①至步骤③,直到字幕对象矢量轮廓信息中所有的封闭轮廓处 理完毕。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,步骤(4)中对矢量轮廓信息中相交的封闭轮廓进行规并整理的方法包括以 下步骤
① 计算所有封闭轮廓中每条二次贝塞尔线段与其他封闭轮廓中的二次贝塞 尔线l殳的交点;
② 将所有存在交点的二次贝塞尔线段在交点处分割成多条首尾相连的二次 贝塞尔线段;
③ 确定所有封闭轮廓中包含的每条二次贝塞尔线段的内外边属性;
将属性为内边的二次贝塞尔线段删除,并重构矢量轮廓信息中的封闭轮
廓;
⑤ 标记所有封闭轮廓的方向,所述的方向包括顺时针和逆时针。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方
法,步骤(5)中将矢量轮廓信息中的封闭轮廓转换成多边形的方法包括以下步 骤
① 遍历字幕对象的矢量轮廓信息,取出一个与已取不同的封闭轮廓G[i], i 6 [O,N-1], i为正整数;
② 遍历封闭轮廓GU],取出一条与已取不同的二次贝塞尔线段B[j],假设 G[i]中包含M个二次贝塞尔线段,则J6
, j为正整数;
12③ 将B[j]离散化为直线段;
④ 重复步骤②至步骤③,直到G[i]中所有的二次贝塞尔线段处理完毕;
⑤ 重复步骤①至步骤④直到字幕对象的矢量轮廓中所有的封闭曲线处理完毕。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,步骤(6)中对矢量轮廓信息中的多边形进行加边处理的方法包括以下步骤
① 计算矢量轮廓信息中所有多边形的每条边的角度值al、 a2、 a3以及每条 边的加边矢量dx、 dy的值;
al表示多边形的一条边与水平向右方向的夹角,a2表示一条边的延长线和 与其相邻的下一条边的夹角,a3表示一条边的延长线与下一条边的夹角的角平 分线与水平向右方向的夹角,dx表示加边时一条边的起始点移动的水平矢量, dy表示加边时一条边的起始点移动的竖直矢量;
一条边的al = atan((yl-yO)/(xl-x0)),其中,(xO, y0)为该条边的起始点 坐标,(xl,yl)为该条边的结束点坐标,atan为反正切函数;
a2的值等于相邻两条边的al值的差值;
a3 = al - a2/2;
② 遍历矢量轮廓信息中的多边形,取出一个与已取不同的多边形Q[i];
③ 复制Q[i],得到Q' U];
④ 对于加外边的情况,如果(T [i]的方向为逆时针,则取出其中的每条边 L [ j],按照如下公式修正每条边的al和a2的值
L[j].al = L[j].al + II, L[j].a2 = 211 — L[j].a2,其中11=180度; 对于加内边的情况,如果Q' [i]的方向为顺时针,则取出其中的每条边L[j], 按照如下公式修正每条边的al和a2的值
L[j].al = L[j].al + II, L[j].a2 = 211 - L[j].a2;
⑤ 确定加边类型;
如果加尖角边,则直接转至步骤 ;
如果加方角边,假设有三个连续的顶点P[O]、 P[l]、 P[2],需要在原来的 顶点为P[l]处增加一个新的顶点为P';令P'的x坐标、y坐标、al、 a2、 a3、 dx、 dy的初始值等于P[l]中的相应值,然后按照如下公式重新修正P[1]的各个 属性值P[l]. al = P[O]. al + P' . a2/2; P[l〗.a2 = P[l].al - P
.al; P[l].a3 = P
.al + P[l].a2/2; P[l].dx = Cos(P[l].a3) +Sin(P[l].a2/2); P[l].dy = Sin(P[l].a3) + Sin (P [1]. a2/2)。
如果加圆角边,首先按照加方角边的方法,在顶点P[l]处增加一个新的顶 点为P',修正P[1]的各个属性值;然后判断修正后的P[l].a2是否小于n/16, 如果不小于,则重复上述步骤,继续在P[l]处增加一个新的顶点,直到P[l]. a2< n/16;
重复步骤①至步骤⑤,直到处理完矢量轮廓信息中所有的多边形。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,步骤(8)中所述的二维矩阵的属性值包括①一个像素到边界的最短距离 Border,②一个像素到最外侧边的侧边方向的距离Side,③经过一个j象素的所 有边界围成的多边形的面积Area,④一个像素的类型Type,⑤一个像素是否已 经进行了反走样处理的标志bAntialiasing。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,步骤(9)中所述的紋理贴图的步骤包括
(a) 确定用于字幕对象渲染的紋理贴图的顺序;
(b) 根据字幕对象加边的类型和边的厚度确定紋理贴图的半径MinR和
MaxR;
(c) 根据需要贴图的图像中的像素点的位置,进行色彩的赋值或反走样处理。
更进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染 方法,步骤(c )中如果需要贴图的图像中的像素点在紋理贴图半径MinR和MaxR 所表示的两条等高线围成的区域内,则直接进行色彩赋值;如果需要贴图的图 像中的像素点在紋理贴图半径MinR和MaxR所表示的两条等高线上,则根据像 素空间掩码矩阵索引处对应的经过该像素的所有边界围成的多边形的面积Area 值进行反走样处理。进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方
法,步骤(IO)中所述的形态渐变径向色彩填充的步骤包括 (I)确定用于字幕对象渲染的径向色彩填充的贴图顺序; (II )根据字幕对象加边的类型和边的厚度确定径向色彩填充的半径MinR
和MaxR;
(III )将形态渐变色彩数组索引映射到径向色彩填充半径MinR和MaxR所 表示的两条等高线围成的区间[MinR, MaxR]内;
(IV)根据需要贴图的图像中的像素点的位置,进行色彩的赋值或反走样处理。
更进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染 方法,步骤(IV)中如果需要贴图的图像中的像素点在径向色彩填充半径MinR 和MaxR所表示的两条等高线围成的区间内,则直接进行色彩赋值;如果需要贴 图的图像中的像素点在径向色彩填充半径MinR和MaxR所表示的两条等高线上, 则根据像素空间掩码矩阵索引处对应的像素到字幕对象轮廓边界的最短距离 Border值以及经过该像素的所有边界围成的多边形的面积Area值进行反走样处 理。
进一步,如上所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方 法,步骤(ll)中所述的根据相邻四像素的等高线距离进行反走样处理的步骤 包括
① 在已经填充了色彩的图像中,得到当前像素P[i] [j]以及其上、下、左、 右四个相邻像素P[i-1] [j]、 P[i+l][j]、 P[i][j-1]、 P[i] [j+l]的色彩RGBA的 值,分别为
C[o] = RGBA(P[i] [j]) C[i] = RGBA(P[i-l] [j]) C[2] = RGBA(P[i+l] [j]) C[3] = RGBA(P[i] [j-1]) C[4] = RGBA(P[i] [j+l]);
② 在像素空间掩码矩阵中得到与上述像素对应的掩码属性值;
15③根据上述四个相邻像素的色彩RGBA的值以及各像素的掩码属性值,进行 加权平均,得到处理后的像素P[i] [j]的色彩RGBA的值。
本发明的有益效果如下本发明将一个字幕对象的Bezier曲线矢量轮廓离 散化为多边形矢量之后,进一步根据多边形的方向和加边类型,创建出用来加 边的多边形矢量,进而有机地将计算机图形学和数字图像处理结合起来,将字 幕对象的矢量信息转化为一个基于等高线的像素掩码矩阵,并将其贯穿应用在 字幕渲染的所有环节之中。本发明的应用使得字幕系统具有优秀的实用性、普 遍的适用性、功能的完备性、功能的可扩展性和制播的时效性,从而满足电视 节目制播机构对字幕质量、字幕效果方面日益增长的需求,利用有限的电视屏 幕空间,通过电视字幕传递更多的信息,通过精美的字幕也便于频道节目包装, 提高收视质量,提升电视节目制播机构的整体形象,同时还能通过字幕实现广 告增值投放以及与观众互动的增值服务,为电视节目制播机构取得更好的经济 效益;另一方面,也满足了广大电视观众日益增长的文化欣赏水平的需要,通 过高质量的字幕,使电视节目更加赏心悦目,也可以使电视观众更快捷地了解 时事新闻、综合资讯信息、公共服务信息、实时气象信息、收视动态、电视内 容,从而更加直接的体现电视媒体为大众服务的重要社会属性,取得更好的社 会效益。


图l为本发明的方法流程图。
图2a为将椭圓图元转换成由三次贝塞尔线段组成的封闭轮廓示意图; 图2b为将波浪旗飘图元转换成由三次贝塞尔线段组成的封闭轮廓示意图; 图2c为将心形图元转换成由三次贝塞尔线段组成的封闭轮廓示意图; 图3为一次贝塞尔线段转换成二次贝塞尔线段前后的示意图; 图4a为一种三次贝塞尔线段转换成二次贝塞尔线段示意图; 图4b为另一种三次贝塞尔线段转换成二次贝塞尔线段示意图; 图5为存在相邻二次贝塞尔线段自相交情况的封闭轮廓处理前后效果示 意图6为存在非相邻二次贝塞尔线段自相交情况的封闭轮廓处理前后效果
16示意图7为二次贝塞尔线段的外接矩形示意图; 图8为二次贝塞尔线段中点示意图9为存在非相邻二次贝塞尔线段自相交情况的封闭轮廓两次处理前后 效果示意图10为将一条二次贝塞尔线段分割成五条二次贝塞尔线段示意图; 图11为确定一条二次贝塞尔线段内外边属性示意图; 图12为根据二次贝塞尔曲线参数方程的t值将二次贝塞尔线段组成的封 闭轮廓离散化为直线段的示意图13为多边形每条边的角度值al、 a2、 a3示意图; 图14为边的外接矩形和多边形的外接矩形示意图l5为多边形加不同类型的边示意图,其中a为加尖角边示意图,b为
加方角边示意图,c为加圆角边示意图; 图16a为像素空间掩码矩阵的示意图; 图16b为填充了色彩以后的像素空间色彩矩阵示意图; 图n为基于像素空间掩码矩阵模型的字幕渲染方法流程示意图; 图18a、图18b为逐层计算像素点到边界的最短距离的方法示意图; 图19a、图19b、图19c为逐层计算^f象素点沿侧边方向到最外侧边的距离
的方法示意图20a、图20b分别为确定轮廓内像素点和轮廓外像素点的方式示意图21为基于像素空间掩码矩阵的紋理贴图方法的原理示意图22a、图22b为根据像素空间掩码矩阵模型等高线划分不同渲染区域
的两种情况示意图23为基于像素空间掩码矩阵的形态渐变径向色彩填充方法的原理示
意图24为基于相邻四像素等高线距离的边缘反走样处理方法示意图。
具体实施例方式
下面结合附图和具体实施例对本发明进行详细的描述。
由于目前的用于电视节目制作的字幕系统中字幕渲染普遍存在渲染效率低下、边缘锯齿效应、小字模糊不清晰、文字笔画粗细不均匀、渐变效果不真实、 无法实现多边多影渲染效果、无法实现艺术字效果等一系列技术上和应用上的 问题,因此,可以通过将字幕对象的矢量信息转化为一个基于等高线的像素掩 码矩阵,在此基础上进行字幕渲染的技术来加以解决,这一技术称作基于曲线 轮廓的封闭环域和像素掩码矩阵的字幕渲染方法,方法的流程如图1所示。
基于曲线轮廓的封闭环域和像素掩码矩阵的字幕渲染方法的关键步骤首先 是有限封闭环域的生成。有限封闭环域为有限个内环、外环(内、外环方向相 反)定义的一个多连通闭区域,内环必须在一个外环内。 一个输入图元由一个
或多个封闭轮廓组成,轮廓以首尾连结的二次Bezier曲线表示。对封闭4仑廓进 行曲线相交检测,通过裁减曲线、并归轮廓,生成有限环域的内外环。
曲线的相交检测利用外接矩形检测选取可能相交曲线对以提高效率,然后递 归法对可能相交的Bezier曲线对二分法分割进行局部曲线段的包围盒检测,当 分割的曲线段满足直线拟和精度时,用直线规则求交点,根据交点分割相交曲 线对。计算交点相连的曲线的方向进行内、外环分类测试,裁减不满足内、外 环属性的曲线,即删除被一个外环包含却与外环方向一致的曲线或者被内环包 含的与内环方向一致的曲线。连接首尾端点重合的曲线,生成封闭的内外环。
算法的思想基于某一渲染区(渲染基元为一个象素)的渲染属性取决于其相 对于环域的位置,即以原始轮廓环域为0距线,通过计算渲染基元相对0距线 的距离得到像素掩码矩阵,由像素掩码矩阵的等高线划分不同的渲染区。渲染 区的灵活划分,可以实现多层图元渲染;不同的距离计算方式得到不同的等高 线,从而实现不同的区域边界导角特性;像素掩码矩阵做深度信息等转换,实 现浮雕等立体效果。
因此,算法的另一关键步骤就是像素掩码矩阵中各个属性的计算。离散化 曲线环域,根据离散化的轮廓点链的前进方向标记距离映射图中各基元的符号 (例如,外环逆时针,则左为正右为负,点链经过的基元为零)。通过对点链中 各点的方向矢量及其前后点的方向角平分线方向矢量围成的有限区域范围内计 算渲染基元的距离,在映射图中记录各基元的绝对值最小的距离值。
本发明主要应用于广电行业电视节目制播机构的字幕编播系统的渲染引擎 中,在字幕对象渲染之前对其进行一系列的预处理,以提高字幕对象的渲染效率和效果,并满足高级的字幕应用需求。
字幕对象渲染的预处理方法的流程,主要包括以下步骤 (1)将字幕对象转换为由一次、二次或三次贝塞尔线段组成的包括N (N 为正整数)个封闭轮廓的矢量轮廓信息。
在计算机图形学中,Bezier线段是一种重要的多项式参数曲线。平面中的 任意N ( N>=2 )个点都可以构成一个Bezier线H这N个点称为Bezier线,殳的 控制顶点,N个点组成的多边形称为Bezier线^殳的控制多边形。N次Bezier线 段的参数方程如下
B(" = g (》P,(i《-¥ = P0(i—""+(^^(1-""-^+.. H , f e [o,i]
其中,P0、…、P。是Bezier线段的顶点。
由此, 一次Bezier线段的参数表达式为 B(i) = I (Pi — P0)£ = (1 —讽卜化,W
三次Bezier线段的参数表达式为 B(O = Pf:t(l — 卜3PW(1 — <)2十3P2*2(1 —纟)卜P:/ , t £
te[O,l]
te[O,l]
将上面矩阵展开后,得到
X(t) = A0+ A"t + A2*t2+ A3*t3
Y(t) = B0+ + B2*t2+ B3*t3
其中,A0=X0; Ai=-3X0+3X1; A2 = 3X0 - 6X, + 3X2; A3 = -X0 + 3X, - 3X2+ X3; B0 = Y0; B, - _3Y0 + 3Y1; B2 = 3Y0 — 6Y, + 3Y2; B3 = -Y0 + 3Y, - 3Y2 + Y3。
由于P600点和P603点的坐标X0、 X3、 Y0、 Y3已知,P601点的t <直为1/3,P602点的t值为2/3,因此可以列出一个如下四元一次方程组
X, = A0+ A^(1/3) + A2*(l/3)2+ A3*(l/3)3
Y, = B0+ B"(1/3) + B2*(l/3)2+ B3*(l/3)3
X2 = A0+ A^(2/3) + A2* (2/3)2+ A3*(2/3)3
Y2 = B0+ B一(2/3) + B2* (2/3)2+ B3*(2/3)3
解该方程组,即可得到P601和P602点的坐标X^ X2、 Y"]、 Y2的值。(iii)利用三次Bezier参数方程,以P603点为起点,以P606点为终点,分别计算t^/3和t-2/3处的P604点和P605点的坐标。方法与第③步中求P601、P602的坐标相同,不再赘述。
(iv) 利用三次Bezier参凄t方禾呈,以P606点为起点,以P609点为纟冬点,分别计算〖=1/3和t=2/3处的P607点和P608点的坐标。方法与第③步中求P601、P602的坐标相同,不再赘述。
(v) 根据心形图元的左右对称性,可以得到P611、 P612、 P613、 P614、 P615、P616、 P617和P618的坐标。
(vi) P620点的坐标为(W/2, H)。
(vii) P623、P624点的坐标等于P600点,P619点的坐标等于P618点,P621、P622点的坐标等于P620点。
最后,得到8条三次贝塞尔线段组成的矢量4仑廓信息。这8条三次贝塞尔线段如下
第一条线段由控制点(P600、 P601、 P602、 P603)形成的三次贝塞尔线段;第二条线^a由控制点(P603、 P604、 P605、 P606)形成的三次贝塞尔线^殳;第三条线段由控制点(P606、 P607、 P608、 P609)形成的三次贝塞尔线^R;第四条线I殳由控制点(P609、 P610、 P611、 P612)形成的三次贝塞尔线,爻;第五条线段由控制点(P612、 P613、 P614、 P615)形成的三次贝塞尔线段;第六条线段由控制点(P615、 P616、 P617、 P618)形成的三次贝塞尔线l殳;第七条线段由控制点(P618、 P619、 P620、 P621)形成的三次贝塞尔线段(由于P618、 P619的坐标相同,P620、 P621的坐标相同,因此这条线,殳实际上是一条直线段);
第八条线段由控制点(P621、 P622、 P623、 P624)形成的三次贝塞尔线段(由于P621、 P622的坐标相同,P623、 P624的坐标相同,因此这条线)殳实际上是一条直线段)。
对于其他类型的基本图形字幕对象,可以按照同样的思想,将其转换为由一次、二次或者三次Bezier线l殳组成的封闭4仑廓。
如果字幕对象的类型为复合字幕,则将其转换成矢量轮廓信息的方法包括以下步骤
a.根据复合字幕对象的数据结构,将其拆分为M个基本字幕对象,所述的基本字幕对象为文字字幕对象或基本图形字幕对象,所述的M为正整数;
b. 分别将文字字幕对象和基本图形字幕对象转换成由一次、二次或三次贝塞尔线段组成的封闭轮廓,得到M个基本字幕对象的矢量轮廓信息;
c. 根据M个基本字幕对象的相对空间坐标,将步骤b中得到的M个矢量轮廓信息组合在一起,形成该复合字幕对象的最终矢量轮廓信息。
③ 根据字幕对象的旋转、变形参数,将步骤②中的矢量轮廓信息进行空间几何变才灸。
假设字幕对象的旋转角度为A,基本字幕对象的控制点个数为n (n为正整数),分别为P[O]至P[n-l],则对一个基本字幕对象进行空间几何变换的过程包括以下步骤。
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[U.y = Q. y + x*sin(A) + y*cos (A) ,
其中,P[i].x和P[i].y分别为P[U点横、纵坐标,Q.x和Q.y分别为Q点
的才黄、纟从坐标;
④ 从字幕对象链表中取出下一个字幕对象,重复步骤①至步骤③,直到所有的字幕对象转换完毕。
(2)将步骤(1)获得的封闭轮廓中一次和三次贝塞尔线段转换成二次贝塞尔线段。
在将字幕对象转换成由一次、二次或三次贝塞尔线段组成的矢量轮廓信息后,为了使渲染引擎在算法处理上的一致性,降低算法的复杂度,优化算法的效率,还需要将这些不同次数的贝塞尔线段统一转换为二次贝塞尔线段。
将字幕对象矢量轮廓信息中的一次和三次贝塞尔线段转换为二次贝塞尔线
26革爻的方法流程,包括以下步骤
① 遍历矢量轮廓信息,取出一个与已取封闭轮廓不同的封闭轮廓G;
② 遍历封闭轮廓G,取出一个与已取贝塞尔线段不同的贝塞尔线段B;
③ 判断贝塞尔线段B是几次贝塞尔线段,如果是一次或者三次贝塞尔线段,则将其转换为二次贝塞尔线段;
④ 重复步骤②至步骤③,直到处理完封闭轮廓G中所有的贝塞尔线段;
⑤ 重复步骤①至步骤④,直到处理完矢量轮廓信息中所有的封闭轮廓。
一次贝塞尔线段转换为二次贝塞尔线段的原理为将一次贝塞尔线段的前后两个控制点R0和Rl作为二次贝塞尔线段的第一和第三个控制点,R0和Rl的中点作为二次贝塞尔线段的第二个控制点。
图3是一次贝塞尔线段转换为二次贝塞尔线段示意图,(a)为转换前的一次贝塞尔线段,(b)为转换后的二次贝塞尔线段。其中,P80 = R80, P82 = R81,P81 = R80和R81的中点,即PSl.x- (R80. x + R81. x)/2, P81.y= (R80. y +R81. y)/2。
三次贝塞尔线段转换为二次贝塞尔线段的原理为将一条三次贝塞尔线段转换成两条二次贝塞尔线段。
图化和图4b分别是将三次贝塞尔线段转换为两条二次贝塞尔线段的两种情况示意图。假设一个三次贝塞尔线段的控制点分别为R90、 R91、 R92、 R93。 Ql是R90和R91的中点,Q2是R92和R93的中点,Q3是R91和R92的中点,Q4是Q1和Q3的中点,Q5是Q2和Q3的中点,Q6是Q4和Q5的中点,Q7是Q4和Q5构成的直线与RO和Rl构成直线的交点,Q8是Q4和Q5构成的直线与R92和R93构成直线的交点。
根据R90、 R91、 R92、 R93四点的坐标以及贝塞尔参数方程计算出Ql、 Q2、Q3、 Q4、 Q5、 Q6、 Q7、 Q8的坐标如下
Ql,x = (R90. x + R91.x)/2, Ql. y = (R90. y + R91.y)/2;Q2.x = (R92.x + R93. x)/2, Q2. y = (R92. y + R93.y)/2;Q3. x = (R91.x + R92.x)/2, Q3. y = (R91.y + R92. y)/2;Q4.x = (Ql.x + Q3. x)/2, Q4. y = (Ql. 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- RO. x-Q6. x)/4,
Q7.y =(3*Q1. y+ 3*Q4. y- RO.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。
将原来的三次贝塞尔线段在Q6点处分成两条二次贝塞尔线段, 一条贝塞尔线段的三个控制点分别为R90, Q7, Q6,另一条贝塞尔线段的三个控制点分别为Q6, Q8, R93。
(3 )将经步骤(2 )转换后的矢量轮廓信息中自相交的封闭轮廓内含的闭合环路删除或者分割。
在字幕对象的矢量轮廓信息中,由二次贝塞尔线段组成的封闭轮廓内部可能存在自相交的二次贝塞尔线段的情况,即封闭轮廓中内含一个或多个闭合环路,如图5 (a)、图6 (a)和图9 (a)所示。为了增强字幕对象的最终渲染效果,需要对这种情况进行处理,删除或者分割闭合环路。
字幕对象矢量轮廓信息中自相交的二次贝塞尔曲线的处理流程,包括以下步骤。
① 从字幕对象矢量轮廓信息表中取出 一个与已取封闭轮廓不同的封闭轮廓G。
② 判断封闭轮廓G中是否存在二次贝塞尔线段自相交的情况,如果存在,则继续判断是相邻二次贝塞尔线段自相交还是非相邻二次贝塞尔线段自相交,如果是相邻二次贝塞尔线段自相交,则将封闭轮廓G中内含的包括相邻二次贝塞尔线段自相交的闭合环路删除;如果是非相邻的二次贝塞尔线段自相交,则将封闭轮廓G和其内含的包括非相邻二次贝塞尔线段自相交的闭合环路分割成多个封闭轮廓。
判断封闭轮廓G中是否存在二次贝塞尔线段自相交的方法为假设G中有M个二次贝塞尔线段,分别是B[O]、 B[l]、 B[2]至B[M-1];依次取出G中每个二次贝塞尔线段B[j],判断B[j]与G中的其它二次贝塞尔线段是否相交,如果相
28交,则G存在自相交情况;否则,不存在自相交情况。如果B [ j]与相邻线段B [ j+l]相交,则是相邻二次贝塞尔线段自相交,否则是非相邻二次贝塞尔线段自相交。判断两条二次贝塞尔线段是否相交的方法为计算两条二次贝塞尔线段的
外接矩形;然后判断两条二次贝塞尔线段的外接矩形是否存在交集,如果存在,则这两条二次贝塞尔线段相交,如果不存在,则这两条二次贝塞尔线段不相交。
参照图7计算一条二次贝塞尔线段的外接矩形的方法为假设二次贝塞尔线—段的三个控制点分别为P0、 Pl和P2, P0点的4黄坐标为PO. x,纵坐标为PO. y;Pl点的横坐标为Pl. x,纵坐标为PI. y; P2点的^黄坐标为P2. x,纵坐标为P2. y;计算由PO、 P1和P2构成的三角形的外接矩形T, T即为该二次贝塞尔线,爻的外接矩形,/>式如下
T. left = min(PO. x, Pl. x, P2. x),
T. right = max (PO. x, Pl. x, P2. x),
T. top = min(PO. y, Pl. y, P2. y),
T. bottom = max (PO. y, Pl. y, P2. y);
其中,T. left表示外接矩形左边框的横坐标,T. right表示外接矩形右边框的横坐标,T. top表示外接矩形上边框的纵坐标,T. bottom表示外4妄矩形下边框的纵坐标;min函数表示取所有参数中的最小值,max函数表示取所有参数中的最大值。
参照图5,如果是相邻二次贝塞尔线段自相交,则将封闭轮廓G中内含的包括自相交的相邻二次贝塞尔线段的闭合环路删除的方法为
假设G中有M个二次贝塞尔线段,分别是B[O]、 B[l]、 B[2]至B[M-1],两条自相交的相邻二次贝塞尔线段分别为B[j]和B[j+l];首先计算B[j]和B[j+l]的交点S;然后将B[j]的起始控制点与S相连构成一条新的二次贝塞尔线段B[j'],将S与B[j+l]的结束控制点相连构成一条新的二次贝塞尔线段B[j+l'],B[y ]、 B[j+1']与封闭轮廓G中原来的二次贝塞尔线段B[O]到B[j-1]、 B[j+2]到B[M-l]构成了一个新的封闭轮廓G、令G-G';最后删除S与B[j]的结束控制点构成的封闭轮廓。图5中(a)为处理前的封闭轮廓G, (b)为处理后的封闭轮廓G, (c)为删除的封闭轮廓。参照图6,如果是非相邻二次贝塞尔线段自相交,则将封闭轮廓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[O]到B[j-l]、B[k+l]到B[M-1]构成了一个新的封闭轮廓G',令G=G';最后将S与B[j]的结束控制点和B[k]的起始控制点相连,形成了两条新的二次贝塞尔线段,将这两条新的二次贝塞尔线段与B [j+1 ]到B [k-1 ]中所有的二次贝塞尔线段构成了 一个新的封闭轮廓G",将G"加入到字幕对象矢量轮》薪信息表。图6中(a)为处理前的封闭轮廓G, (b)为分割后的封闭轮廓G', (c)为分割出来的封闭轮廓G"。
计算字幕对象矢量轮廓信息中两条二次贝塞尔线革爻交点的方法,从理论上来说,可以根据两条二次Bezier曲线的联合参数方程计算。但这种方法是不可取的,因为不但计算量巨大,而且都是基于浮点数的运算,算法的效率会比较低。因此,本实施方式采用 "二分迭代法"。该方法的核心思想为如果两条二次Bezier线段相交,那么才艮据中点将这两条二次Bezier线l殳分别分成两条二次Bezier线段,得到4条二次Bezier线段;然后再按照同样的方法,处理这4条线段,直到最终每条线段的起始控制点和结束控制点的空间直线距离小于某一个值(通常情况下,这个值为A),最终可以归结为计算两条直线段的交点。该方法具体包括以下步骤
(I)假设两条相交的二次贝塞尔线段分别为B[j]和B[k],将B[j]和B[k]分别进行如下处理
a. 计算二次贝塞尔线段的起始控制点与结束控制点之间的空间直线距离L,L—(x, - x。)2 + (y, - y。)2 ,其中,x0、 yO为起始控制点横、纵坐标,xl和yl为结束控制点横、纵坐标;
b. 判断L是否大于M,如果大于,则计算二次贝塞尔线段的中点,将二次贝塞尔线段在中点处划分成两条二次贝塞尔线段,所述的M=V^";
c. 重复步骤a至步骤b,直到划分后的每条二次贝塞尔线段的起始控制点与结束控制点之间的空间直线距离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)2p, + t2P2 t哦1];
令t-O. 5,计算二次贝塞尔曲线方程上的一点,该点便是二次贝塞尔线段的中点,其坐标的计算公式为B=(PO + 2*P1 + P2)/4。
如图8所示,R1是直线(P0, Pl)的中点,R2是直线(P1, P2)的中点,R3是直线(P2, P0)的中点,Q是直线(R1, R2)与直线(R3, Pl)的交点。Q点便是二次Bezier曲线(PO, Pl, P2)的中点。
Rl点横坐标Rl.x=(P0.x+Pl.x)/2, Rl点纵坐标Rl. y-(PO. y+Pl.y)/2; R2点横坐标R2. x=(Pl. x+P2. x) /2, R2点纵坐标R2. y= (PI. y+P2. y) /2。其中,PO. x、PO.y为PO点横、纵坐标;Pl.x 、 Pl.y为Pl点横、纵坐标;P2. x、 P2. y为P2点^f黄、纵坐标。
Q点的横坐标Q. x = (Rl.x + R2. x)/2 = (PO.x + 2*P1. x + P2.x)/4, Q点的鈔人坐标Q. y = (Rl.y + R2. y)/2 = (PO. y + 2*P1. y + P2.y)/4。
存在非相邻的二次贝塞尔线段自相交情况的封闭轮廓G经过一次处理后,分割出来的封闭轮廓中仍有可能存在自相交的情况,如图9所示。(a)所示的封闭轮廓经过一次处理后,将其分割成(b)、 (c)和(d)所示的封闭轮廓,其中(c)所示的封闭轮廓仍然存在自相交的情况,因此需要重复上述步骤对(c)所示的封闭轮廓进行再处理,直到分割后的所有封闭轮廓中没有自相交的情况发生。(c)所示的封闭轮廓经过再处理后,分割成(1)和(2)所示的两个封闭轮廓。
③ 重复步骤②,直到封闭轮廓G中所有的自相交情况处理完毕。
④ 重复步骤①至步骤③,直到字幕对象矢量轮廓信息表中所有的封闭轮廓
31处理完毕。
(4)对经步骤(3)处理后的矢量轮廓信息中相交的封闭轮廓进行处理,使封闭轮廓之间互不相交。
在字幕对象的矢量轮廓信息中,由二次贝塞尔线段组成的封闭轮廓之间也可能存在相交的情况,即两个或多个封闭轮廓之间存在若干个交点。为了增强字幕对象的最终渲染效果,还需要对这种情况进行处理。
对矢量轮廓信息中相交的封闭轮廓进行处理的方法流程,包括以下步骤。
① 计算所有封闭轮廓中每条二次贝塞尔线段与其他封闭轮廓中的二次贝塞
尔线段的交点,包括以下步骤
a. 遍历字幕对象矢量轮廓信息中所有的封闭轮廓,假设共有N个封闭轮廓,取出一个与已取不同的封闭轮廓G[i];
b. 遍历G[i]中的所有二次贝塞尔线段,假设共有M个二次贝塞尔线段,取出一个与已取不同的二次贝塞尔线段B[j];
c. 遍历除了封闭轮廓G[i]之外的所有其它封闭轮廓(包括G[O]到G[i-1],G[i+1]到G[N-1])中的所有二次贝塞尔线段,取出一个与已取不同的二次贝塞尔线段B[k];
d. 判断B[j]和B[k]的外接矩形是否存在交集。如果存在,则使用上述"二分迭代法"计算B[j]和B[k]的交点;
e. 重复步骤c,直到处理完其它封闭轮廓中所有的二次贝塞尔线段;
f. 重复步骤b,直到处理完G[i]中所有的二次贝塞尔线段;
g. 重复步骤a,直到处理完矢量轮廓信息中所有的封闭轮廓。
② 将所有存在交点的二次贝塞尔线段在交点处分割成多条首尾相连的二次贝塞尔线段。
假设一条二次贝塞尔线段B的三个控制点分别是P[O] 、 P[l] 、 P[2],在B上有n个交点,分别为S[O]到S[n-l],每个交点对应的贝塞尔参数方程中的t值分别是S[O]. t到S[n-1]. t。
首先,在S
点处将线段B分成两条线段Bl和。
Bl的三个控制点分别为P[O]、 Q[O]、 S[O], P[O]和S[O]的坐标已知,Q[O]
32的坐标为
Q
.x = (1 - t)*P
.x + t*P[l].x, Q[O]. y = (1 - t) *P
. y + t*P[l]. y。
Bl'的三个控制点分别为S
、R
、P[2], S
和P[2]的坐标已知,R[O] 的坐标为
R[O]. x = (1 - t) *P[1]. x + t*P[2]. x, R[O]. y = (1 _ t) *P[1]. y + t*P[2]. y。
其中,Q[O].x表示Q[O]点的横坐标,Q[O].y表示Q[O]点的纵坐标,R[O].x 表示R
点横坐标,R
y表示R
点纵坐标;t- (S
t - P
t) / (P [2] t -P
.t), P[O]. t为P[O]点对应的贝塞尔参数方程中的t值,P[2].t为P[2] 点对应的贝塞尔方程中的t值。
然后,在S[1]点处将线段B1'分成两条线段B2和B2',方法与步骤①相同。 以此类推,最后在S[n-l]点处将线段Bn-1'分成两条线段Bn和Bn。最终 得到N+1条分割后的线段。图10出示了一条存在四个交点的二次贝塞尔线段在 交点处进行分割的过程。
③确定所有封闭轮廓中包含的每条二次贝塞尔线段的内外边属性。
确定一条二次贝塞尔线段的内边/外边属性,只需要确定该条二次贝塞尔线 段上的任意一个点在整个字幕对象的矢量轮廓信息中是内点还是外点即可,通 常情况下可以使用该条线段的中点。如果该线段的中点是内点,则该条线段为 内边;如果是外点,则该条线段为外边。
判断二次贝塞尔线段的中点在字幕对象所有封闭轮廓中是内点还是外点的 方法包括以下步骤。
假设二次贝塞尔线段为B, B的三个控制点分别为P[O]、 P[l]、 P[2],中点 为Q。
① 确定B的方向值d:如果P[2].y〉P
.y,则d=l;如果P [2]. y<P
. y, 则d--l;如果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
33点为起点,沿水平方向向右作一射线H;如否,则以Q点为起点沿竖直方向向上 作一射线H。本实施方式中,々!^殳沿水平方向向右作一射线H,如图11所示。 计算字幕对象所有封闭轮廓中与H相交的除B之外的所有二次贝塞尔线段,假 设有M条二次贝塞尔线段与H相交,分别为B[O]、 B[l]至B[M-l]。其中,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[l]+......+d[M-l]。
⑥ 根据d和cT计算B的内外边属性值a:
a= l-abs(SIGN( d+ d' )*SIGN( d'))。 其中,SIGN(x)定义为 (x==0) 0: ((x>0) l:-l)),即如果x-O,则SIGN(x)=0;如果x〉0,则SIGN(x)=l; 如果x〈0,则SIGN(x)= -1。
如果a=0,贝'J B为内边;如果a=l,则B为外边。
当确定了 一个封闭轮廓中的一条二次贝塞尔线段的内外边属性后,则该封 闭轮廓该条二次贝塞尔线段之后的二次贝塞尔线段的内外边属性与其相同,直 到遇到一个交点为止。
利用上述方法可以确定所有封闭轮廓中包含的每条二次贝塞尔线段的内外
边属性。
④将属性为内边的二次贝塞尔线段删除,并根据交点重构矢量轮廓信息中 的封闭轮廓。
当确定了矢量轮廓信息中所有的封闭轮廓中包含的每条二次贝塞尔线段的 内外边属性后,删除所有标记为内边的二次贝塞尔线段的方法为在每条二次 贝塞尔线段中,都有一个边界属性变量表示内边/外边属性,遍历矢量轮廓信息 中所有的二次贝塞尔线段,将边界属性为内边的二次贝塞尔线萃殳从封闭轮廓中
删除即可。
删除属性为内边的二次贝塞尔线段后,需要对所有的封闭轮廓重新进行规 并,即根据交点将二次贝塞尔线段连接起来,重新构建每个封闭轮廓。重新构 建的封闭轮廓一定是互为不相交的封闭轮廓。
规并一个字幕对象的具体方法包括以下步骤a. 从所有封闭轮廓中取出一个与已取不同的封闭轮廓Gl;
b. 判断G1的最后一条二次贝塞尔线段的结束点坐标与第 一条二次贝塞尔线 段的起始点坐标的差值是否小于等于阀值T,通常T取0. 00001,如是,则Gl 不需要处理,重复步骤a至步骤b,直到所有的封闭轮廓被处理完毕;
c. 耳又出与Gl相邻的下一个封闭轮廓G2;
d. 判断Gl的曲线尾与G2的曲线头或者Gl的曲线头与G2的曲线尾是否重 合,即判断Gl的最后一条二次贝塞尔线段的结束点坐标与G2的第一条二次贝 塞尔线段的起始点坐标的差值或者Gl的第一条二次贝塞尔线段的起始点坐标与 G2的最后一条二次贝塞尔线段的结束点坐标的差值是否小于等于阀值T,如是, 则将G1、 G2合并,并从矢量轮廓中删除G2;
e. 取出与G2相邻的下一个封闭轮廓G2',令G2= G2',重复步骤d,直到 G2为最后一个封闭轮廓或者G2与Gl相等;
f. 重复步骤a至步骤e,直到所有的封闭轮廓被处理完毕。
上述过程用伪代码描述如下
Gl =矢量轮廓中第一个封闭轮廓;
while (Gl!= NULL) 〃遍历矢量轮廓中所有的封闭轮廓
while (Gl需要重新处理)
G2 = Gl.Next; 〃 G2是与Gl相邻的下一个封闭轮廓 while (G2!=NULL && G2!=G1)
if (G2需要重新处理)
if (Gl的曲线尾与G2的曲线头重合)
〃将Gl和G2首尾相连 Gl. Tail. Next = G2. Head; Gl.Head. Prev = G2. Tail; G2. Tail. Next = Gl. Head; G2. Head. Prev = Gl.Tail; Gl.Tail = G2. Tail;
G' = G2;
35G2 = G2. Prev; /人封闭4仑廓链表中删除G';
else if (Gl的曲线头与G2的曲线尾重合)
〃将Gl和G2首尾相连G2.Tail.Next=Gl. Head;G2.Head. Prev=Gl. Tail;Gl.Tail. Next=G2. Head;Gl.Head. Prev=G2. Tail;Gl.Head = G2.Head;
G'=G2;
G2=G2.Prev;
从封闭轮廓链表中删除G'; G2 = G2, Next; Gl = Gl. Next;
⑤标记所有封闭轮廓的方向,包括顺时针方向和逆时针方向。顺时针方向 标记为1,逆时针标记为-1。判断一条封闭曲线G的方向,只需要取出G中任意 一条二次贝塞尔线段,判断其方向即可。具体处理步骤如下
a. 从封闭轮廓G中任取一条二次贝塞尔线段为B,假设B的三个控制点分别 为P[O]、 P[l]、 P[2],中点为Q;
b. 确定B的方向值d:如果P[2].y〉P
.y,则d=l;如果P [2] y<P
■ y, 则d=-1;如果P[2],P
.y,则d=0;
c. 计算B的中点Q;
d. 判断abs(P[2].y-P[O].y)是否大于abs(P[2].x-P
.x),如是,则以Q 点为起点,沿水平方向作一射线H;如否,则以Q点为起点沿竖直方向作一射线 H;计算字幕对象所有封闭轮廓中与H相交的除B之外的所有二次贝塞尔线段, 假设有M条二次贝塞尔线段与H相交,分别为B[O]、 B[l]至B[M-1];e. 分别计算B[i]的方向值d[i],方法与步骤①中计算d值的方法相同;其 中,i=0、 1........ M-l;
f. 计算d[i]的和值d。 d' =d
+d[l]+......十d[M-l];
g. 计算B的方向属性b的值,b = d*(l-2*abs(d'));如果b>0,则封闭轮 廓G为顺时针方向,否则为逆时针方向。
(5)将经步骤(4)处理后的矢量轮廓信息中的封闭轮廓转换成多边形。 字幕对象的矢量轮廓信息经过上述处理后,在对其加内边、加外边、加側 边、加影等渲染之前,还需要将矢量轮廓信息中所有的封闭轮廓转换成多边形, 即将所有的封闭轮廓离散化为直线段,也就是将封闭轮廓中所有的二次贝塞尔 线段转换成直线段。之所以要这样处理,主要的原因包括以下几个方面。
第一,字幕对象加内边、加外边、加侧边、加影等渲染都是基于字幕矢量轮 廓的。在加多个外边时,需要沿着这个矢量轮廓向四周等距的扩展XI个像素(XI 为第一条边的厚度),而后再沿着经上面操作之后形成的矢量轮廓,再向四周等 距的扩展X2个像素(X2为第二条边的厚度);加侧边时,需要沿着一个矢量轮 廓(这个矢量轮廓是加完外边之后的矢量轮廓)的Y角度扩展X个像素(Y为侧 边的方向,X为侧边的厚度)。如果按照贝塞尔曲线进行处理,那么一条二次 Bezier曲线向外或向内扩展后的矢量轮廓就不是一个二次贝塞尔曲线了 ,而是 一个高价的贝塞尔曲线,也就是说,在空间上与一条二次贝塞尔等距的曲线无 法精确的用二次贝塞尔曲线方程来表示。这样一来,如果继续使用这个高阶的 贝塞尔曲线进行后续的渲染,例如加多个内边、多个外边、多个侧边等,就需 要首先将高阶的贝塞尔曲线进行降阶处理,降阶处理过程的计算量非常大,所 需要的存储量也非常大,在实际实现中是不可行的。
但是如果使用一个多边形来表示一个矢量轮廓,就可以很容易的解决这个 问题,因为 一个多边形向外或向内扩展后的矢量轮廓仍然可以用 一个多边形来 表达。
第二,计算一条二次贝塞尔曲线的等距曲线自身算法复杂,而且需要很大的 计算量,在实际实现中是不可行的。
第三,为了保证渲染精度,保证渲染细节上的效果,以上对贝塞尔曲线的处 理都是基于原来像素空间的浮点数运算的。将贝塞尔封闭曲线离散化成由直线 段组成的封闭多边形之后,可以将原来的像素空间放大512倍,将原来的浮点数坐标使用整数型来表示,所有的运算也就转化为整数型运算,从而大大提高 渲染的效率。
第四,将原来的像素空间放大512倍之后,对于后续的计算,可以进行诸多 的优化,例如对三角函数运算、反三角函数运算、除法运算幂运算、开方运算 等占用大量机器指令的数学运算,可以事先建立一些表。在系统初始化时建好 这些表,在后面的运算中直接查表即可。这样可以大大提高字幕渲染的效率。 例如可以在Q到512整数值之间定义一个反正切函数的表Atn,在系统初始化时, 创建这个表
Atn[i] = (int) (0. 5+atan((double)i/512)*2048/3. 14159265) 其中,atan是操作系统提供的反三角函数,i是从0到512的整型值。 在后面根据水平矢量dx和垂直矢量dy使用反正切函数计算一个角度A时, 可以直接使用这个表
if (abs (dy)>=abs (dx))
A = 1024—Atn[(int) (abs (dx) + abs (dy) x 512 + 0. 5)]
else
A = Atn [ (int) (abs (dy) + abs (dx) x 512 + 0. 5)]
对于其他的三角函数、反三角函数、除法运算、幂运算、开方运算等都可以 使用同样的原理进行优化。
第五,将原来的像素空间放大512倍之后,在进行紋理贴图等后续一系列 图像处理时, 一个像素就分成512级别的子^象素(Sub-Pixel),可以大大4是高 边缘反走样的效果。
将二次贝塞尔封闭轮廓离散化为直线段的核心思想包含了 "t值的自适应步 长选取"、"离散"、"化直"和"浮点坐标整数化,,四个方面。
根据二次贝塞尔曲线参数方程,对t值从0到1每次步进一个数值,根据t 值计算出对应的二次贝塞尔曲线上的点,假设相邻两个t值计算出来的点为QO 和Ql,如果QO和Ql的空间直线距离大于V^",则在QO的t值和Ql的t值之 间再次选择一个t值,直到每两个t值对应的二次贝塞尔曲线上的点QO和Ql 的空间直线距离小于等于W为止。这时QO和Ql构成的直线就是离散化后的一 条直线段,最后将每个点的坐标放大M倍,使原来的浮点数坐标变换为整数型 坐标。
38之所以将离散化后的每条直线段的空间距离限制在vT,主要的思想是使得 离散化后的每条直线段的起点和终点的水平距离和垂直距离都小于等于V2~ ,也 就是使一条直线段最多经过i个像素。这样就可以保证字幕渲染的精度。
将一个字幕对象的所有封闭轮廓离散化为直线段的具体方法流程,主要包 括以下步骤。
① 遍历字幕对象的矢量轮廓信息,取出一个与已取不同的封闭轮廓GU], 假设字幕对象的矢量轮廓信息中包括N个封闭轮廓,则i 6
, N和i均
,下克欠来+
② 遍历封闭轮廓G[i],取出一条与已取不同的二次贝塞尔线段B[j],假设 G[i]中包含M个二次贝塞尔线段,则j6
, j为正整数。
③ 将B[j]离散化为直线段,具体的实现过程如下。
参照图12,假设B[j]的三个控制点分别为P[O]、 P[1]和P[2]; P[O]为起 始控制点,PU]为中间控制点,P[2]为终止控制点。
首先,以P[O]点为起点,计算B[j]离散化后的第一条直线段L[j] [O]。
a. 设置t的初始值,t=P
.t+L;其中,L为常数,0<L<1。本实施例 中L=0. 0625,取该值的意义是先假设将B[j]离散化为16条直线段,然后再根 据每一条直线段的长度来确定是否继续进行细分。P[O]. t为P[O]点对应的二次 贝塞尔曲线方程中的t值,P
.t=0。
b. 根据二次贝塞尔曲线方程计算t值对应的二次贝塞尔曲线上点Q[O]的坐标。
c. 计算 P[O]点和 Q[O]点之间的空间直线距离 d , d一(xl — x0)2 + (yl - yO)2 ,其中,x0、 yO是P
的坐标,xl、 yl是Q[O]
的坐标。
d. 判断d〉V^是否成立,如果成立,则令1= (P
.t + Q
.t)/2,其中, Q[O]. t为Q[O]点对应二次贝塞尔曲线方程中的t值;重复步骤b至步骤d,直 到d<=V^;最终的Q[O]点与P[O]点构成的直线便是第一条离散化后的直线段 L[j]
;将Q[O]点和坐标放大M倍,本实施例中M-512。
然后,以Q[O]点为起点,采用与计算B[j]离散化后的第一条直线段相同的 方法计算第二条直线l殳L[j] [l]。
以此类推,直到处理到B[j]的结束控制点P[2]为止,获得K条直线段L[j]
39至L[j][K-l]。
④ 重复步骤②至步骤③,直到G[i]中所有的二次贝塞尔线段处理完毕。
⑤ 重复步骤①至步骤④直到字幕对象的矢量轮廓信息中所有的封闭轮廓处
理完毕。
(6)对经步骤(5)转换后的矢量轮廓信息中的多边形加内边或外边。 经过上面的离散化后,字幕对象的矢量轮廓信息由二次贝塞尔线段组成的 射闭轮廡转换为了射闭多i力形矢音掩廂
每个封闭多边形的属性包括
① 指向前一个、后一个封闭多边形的指针,这两个指针变量使得整个字幕 对象的矢量轮廓构成了一个双向循环链表,方便后续的处理;
② 多边形中的所有直线段(多边形的边)链表;
③ 多边形的方向,顺时针为正,逆时针为负;
④ 多边形的外"t妄矩形。
多边形中每条边的属性包括
① 指向前一条、后一条边的指针,这两个指针变量使得整个多边形的边构 成了一个双向循环链表,方便后续的处理;
② 边的起始点的x坐标和y坐标;
③ 边的角度al,即边与X轴正向的夹角;
④ 边的延长线与和其相邻的下一条边的夹角a2;
⑤ 边的延长线与和其相邻的下一条边的角平分线的角度a3;
⑥ 边的起始点加边时移动的水平矢量dx;
⑦ 边的起始点加边时移动的垂直矢量dy。
其中,al、 a2、 a3表示的角度如图13所示,多边形的方向为顺时针。 多边形的直线段链表、顺时针/逆时针方向属性、每条边的坐标都已经在离
散化的过程中赋予了有效的值。
在对多边形进行后续处理之前,先要计算每个多边形的外接矩形和每条边的
al、 a2、 a3、 dx、 dy的属性寸直。
计算一个多边形的外接矩形,首先要计算构成这个多边形的每条边的外接矩形,然后将这些矩形并(Unoin)起来即可。边的外接矩形和多变形的外接矩形 如图14所示。
如图21所示,al根据P0的坐标(x0, yO)和Pl的坐标(xl, yl)使用反三角函 数计算,即al = atan((yl-yO)/(xl-x0)) , atan为反正切函数。 a2的值等于该边的al值和与其相邻的下一条边的al值的差值。 a3 = al - a2/2。
dx = Cos (a3) + Sin(a2/2)。 dy = Sin(a3) +Sin(a2/2)。 其中Sin为正玄函数,Cos为余玄函凄t。
在一个字幕对象的矢量轮廓中,既有顺时针方向的多边形,又有逆时针方向 的多边形,在计算每条边的角度al、 a2、 a3和加边矢量dx、 dy时都是根据多 边形的方向进行的。另外,在字幕对象的渲染中,可以对多边形加不同类型的 边,例如尖角边、圆角边、方角边等。在加圆角边和方角边,需要在原来多边 形的顶点处增加一些顶点。如图15所示,其中(a)为加尖角边示意图;(b) 为加方角边示意图,此时需要增加一个顶点;(c)为加圓角边示意图,此时需 要增加多个顶点。
由于上述两个原因,需要根据原来的多边形矢量重新创建出不同的多边形矢 量。创建出加内边或外边的多边形矢量轮廓的核心思想是将原来的多边形轮 廓中的封闭多边形逐个拷贝,同时才艮据加内边还是加外边,以及当前多边形的 顺时针/逆时针方向,重新对其中每条边的al和a2值进行修正;然后根据加边 的类型(尖角边、圆角边、方角边等)对多边形的顶点进行处理,加尖角边时 不需要增加顶点,加方角边时需要增加一个顶点,加圆角边时则需要根据顶点 的角度增加足够多的点,以保证圆角边的平滑。
创建出加内边或外边的矢量轮廓的具体流程,主要包括以下步骤。
① 遍历矢量轮廓信息中的多边形,取出一个与已取不同的多边形Q[i]。
② 复制Q[i],得到Q' [i]。
③ 对于加外边的情况,如果Q' [i]的方向为逆时针,则取出其中的每条边 L [ j ],按照如下公式修正每条边的a 1和a 2的值
41L[j].al = L[j].al + n;
L[j].a2 = 211 — L[j].a2;其中,11=180度。
如果Q' [i]的方向为顺时针,则不需要^L任何处理。
对于加内边的情况,如果Q' [i]的方向为顺时针,则取出其中的每条边L[j], 按照如下公式修正每条边的al和a2的值 L[j].al = L[j].al + n; L[j].a2 = 211 - L[j].a2。
如果Q' [i]的方向为:逆时4十,则不需要傲d壬何处理。 ④判断加边类型,如果加尖角边,则不需要增加顶点,转至步骤。 如果加方角边,则需要增加一个顶点。假设有三个连续的顶点P[O]、 P[l]、 PU],需要在原来的顶点为P[l]处增加一个新的顶点为P'。令P'的x坐标、y 坐标、al、 a2、 a3、 dx、 dy的初始值等于P [1]中的相应值,即P' =P[1]。然 后按照如下公式重新4务正P [1]的各个属性值
p[l].al=P
.al+ P, a2/2;
p[l].a2=P[l].al- P[O].al;
p[l].a3=P
.al+ P[l].a2/2;
p[l].dx=Cos (P[l].a3) +Sin(P[l].a2/2);
p[l].dy=Sin(P[l].a3) +Sin(P[l〗.a2/2)。
如果加圆角边,则需要根据顶点的角度增加足够多的点,具体的实现过程为 首先按照上述"方角边增加一个顶点"的方法,在顶点P[l]处增加一个新的顶 点为P',修正P[1]的各个属性值;然后判断修正后的P[l].a2是否小于n/16, 如果不小于,则重复上述步骤,继续在P[1]处增加一个新的顶点,直到P[l]. a2< n/16。需要注意的是在进行新的一次计算时,P[O]、 P[l]、 P[2]的值已经发 生了变化,其中P[O]为新增加的顶点P', P[l]是修正之后的P[l], P[2]的值 不变。
⑤重复以上步骤,直到处理完矢量4仑廓信息中所有的多边形。此时可以得 到两个新的多边形矢量轮廓G1和G2,其中Gl将用在加内边的后续处理中,G2 将用在加外边的后续处理中。由于G1、 G2与原来的矢量相比增加了一些顶点, 所以需要重新计算Gl和G2的外接矩形。
在将一个字幕对象的Bezier曲线矢量轮廓离散化为多边形矢量G之后,进
42一步根据多边形的方向和加边类型,创建出用来加内边的多边形矢量G1和用来 加外边的多边形矢量G2。然后,就可以对字幕对象进行后续渲染。
首先需要建立与原始图像具有相同维数的像素空间掩码矩阵M如图16a所 示,填充了色彩以后的像素空间色彩矩阵如图16b所示,每个像素的色彩值包 括RGBA四个分量。图17为基于像素空间掩码矩阵模型的字幕渲染方法流程示 意图。
像素空间掩码矩阵M中每个像素点包括以下属性数据
(1) .一个像素到边界的最短距离Border。该值在加内边、外边时使用。根 据方角边、尖角边、圓角边的不同类型,这个距离有不同的意义。
(2) .—个像素到最外侧边的侧边方向的距离Side。该值在加侧边时使用。
(3) .经过一个像素的所有边界围成的多边形的面积Area。该值在对边界像 素进行反走样贴图时使用。因此首先要区分内部像素和边界像素对于内部像 素来说,该值为固定的值(512*512);对于边界像素而言,该值是一个小于等于 512*512的值,表示通过该^f象素的边与该Y象素矩形(高和宽均为512)围成多边形 的面积、。
(4) .一个像素的类型Type。该值用来表示一个像素是侧边边界、外边边界、 内边边界、内部像素。
(5) .—个像素是否已经进行了反走样处理的标志bAntialiasing。使用这个 布尔变量以避免对同 一个像素进行多次的反走样处理。
以上的Border、 Side、 Area的值都是在512*512的坐标空间中,因此,可 以将以上这些数据当作一个像素的掩码。
下面对Border、 Side、 Area的值的计算以及像素类型Type的确定进行介

如图18a、图18b所示,计算一个像素到边界的最短距离Border值的方法 如下
(1)在字幕对象的多边形矢量轮廓边界上选取直线段(P0,P1),确定直线 H(P0,P1)两个端点P0、 Pl的坐标(PO.x,PO. y) 、 (P1. x,Pl. y)以及两个端点的 加边方向的向量(PO. dx, PO. dy) 、 (P1. dx, Pl. dy);
加边方向的向量与加边方向的角度的关系如下
PO. dx = Cos (AO) PO. dy = Sin(AO)PI. dx = Cos (Al) PI. dy = Sin(Al)
其中,PO点的加边方向的角度为AO, PI点的加边方向的角度为Al。
(2) 设定沿加边方向逐层计算的距离k、步长s,根据PO、 PI的加边方向 的向量依次计算PO、 PI在加边方向上所对应的点P2、 P3、 P4、 P5的坐标;
P2、 P4的坐标根据P0点来计算 P2. x = PO. x + (k—s) *P0. dx; P2. y = PO. y + (k-s)*PO. dy; P4. x = PO, x + k*PO. dx; P4. y = PO. y + k*PO. dy; P3、 P5的坐标根据PI点来计算 P3. x = PI. x + (k-s) *P1. dx; P3. y = PI. y + (k-s)*Pl. dy; P5. x = PI. x + k*Pl. dx; P5. y = PI. y + k*Pl. dy。
(3) 由P2、 P3、 P4、 P5点围成四边形,遍历四边形内的所有l象素点,才艮 据点到直线垂直距离的计算公式,计算每个点到直线段(PO,Pl)的距离。
如图19a、图19b、图19c所示,计算一个像素到最外侧边的侧边方向的距 离Side的方法如下
(1 )在字幕对象的侧边轮廓边界上选取直线段(PO, PI),确定直线段(PO, PI) 两个端点PO、 PI的坐标(PO. x, PO. y) 、 (PI. x, PI. y)以及侧边的加边向量dx、 dy;
侧边的加边向量dx、 dy是才艮据侧边角度A确定的,侧边的加边向量dx、 dy 与A的关系如下dx = Cos(A), dy = Sin(A)。
(2)设定沿加边方向逐层计算的距离k、步长s,根据PO、 Pl的加边向量 依次计算PO、 PI在加边方向上所对应的点P2、 P3、 P4、 P5的坐标;
P2、 P4的坐标根据PO点来计算
P2. x = PO. x + (k-s) *dx;
P2. y = PO. y + (k-s)*dy;
P4. x = PO. x + k*dx;
P4. y = PO. y + Wy;P3、 P5的坐标根据Pl点来计算
P3. x = Pl. x + (k-s)*dx;
P3. y = PI. y + (k-s) *dy;
P5. x = PI. x + k*dx;
P5. y = PI. y + k*dy。 (3)由P2、 P3、 P4、 P5点围成四边形,遍历四边形内的所有像素点,根 据点到直线垂直距离的计算公式,以及侧边的角度和直线段(P0,P1)的角度,计 算每个像素点沿侧边加边方向到直线段(PQ, PI)的路径长度。
设像素点到直线段(P0,P1)的垂直距离为D,侧边角度为A,直线段(PO,Pl) 与水平线的夹角为B,则像素点A沿侧边加边方向到直线段(PO,Pl)的路径长度 为D/Sin(A+B)。
计算经过一个像素的所有字幕对象的矢量轮廓线段与像素边界围成的多边 形面积、Area〗直的方法:^下
(a) 遍历字幕对象的多边形矢量轮廓,针对字幕对象的N个封闭多边形, 取出一个多边形Q[i];
(b) 遍历多边形Q[i]中的每条边,针对Q[i]中的M条边,取出一条边L[j];
(c) 根据边L[j]前后两个端点的坐标,确定边L[j]经过的像素,设L[j] 经过了F个像素,分别是C[O]、 C[l]........ C[F-1], F>1;
(d) 从L[j]开始,遍历Q[i]中的所有M条边,分别是L[j]到L[M-l], L[O] 到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]对所有经过^f象素的面积贡献的值;
(g) 重复步骤(b),直到处理完多边形Q[i]中的每条边;
(h) 重复步骤(a),直到处理完字幕对象中的每个多边形。 步骤(e )中多边形面积计算公式为A = B + 0.5 x fabs (Y[,] x (X["!] - X[1+1]》)
i=l
B = 0,5 x fabs(Y[o] x (X,,] - Xn]) + ,] x (X,2] - X
))
其中,多边形的N个顶点的坐标为(X[O], Y
) —(X[N-l], Y[N-1])。
像素空间掩码矩阵的像素类型Type的确定方法包括如下步骤 (1)针对像素空间掩码矩阵中的所有像素,分别计算经过一个像素的所有 字幕对象的矢量轮廓线段与像素边界围成的多边形的面积Area; (2 )根据步骤(1)所计算的面积值,确定边界像素;
(3) 针对每个非边界像素,向像素右侧水平进行扫描,对扫描中所跨越的 字幕对象的多边形矢量轮廓边界线段进行计数;
(4) 根据步骤(3)的最终计数结果,确定轮廓内像素或轮廓外像素。 如果面积Area值小于512x512,则该像素为边界像素。对于非边界像素,
要根据该像素是位于字幕轮廓内部或者轮廓外部来确定是内点还是外点。在上 述方法的步骤(3)中,针对扫描中所跨越的字幕对象的多边形矢量轮廓边界线 段,确定线段的起点PO和终点Pl,并得到起点和终点在Y轴上的坐标PO. y和 Pl.y,扫描的计数原则为如果Pl.y〉PO. y,则计数器加1;如果PI. y<PO. y, 则计数器减l;如果Pl.y-PO.y,则计数器不变。因此,在确定字幕对象的多边 形矢量轮廓边界线段的起点PO和终点PI时,先需要确定多边形矢量轮廓为顺 时针多边形轮廓或逆时针多边形轮廓。
由于字幕对象的多边形矢量轮廓是由字幕对象的曲线矢量轮廓离散化为直 线段以后得到的,因此,曲线矢量轮廓的顺时针或逆时针方向即为多边形矢量 轮廓的顺时针或逆时针方向。判断一条封闭曲线G的顺时针/逆时针方向,只需 要取出G中任意一条Bezier线段,判断其方向即可。具体处理步骤如下
第一步,取出这个封闭曲线G中的一条曲线^:B,邗支设B的三个控制点分别 为P[O]、 P[l]、 P[2];
第二步,根据线段B的起始控制点P[O]和结束控制点P[2]构成直线的矢量, 确定是在水平方向还是在垂直方向上的进行判断,如果abs(P[2].y-P[O].y)〉 abs(P[2].x-P[O].x),则将根据水平方向进行判断处理,否则,将根据垂直方 向进行判断;
第三步,如果根据水平方向来判断,则确定B的方向值为d, d的计算方法为如果P[2].y〉P
.y,则d=l,如果P [2]. y<P
. y ,则d=-1,如果 P[2].y=P
.y,则d=0;
第四步,求出P[O]与P[2]的中点Q;
第五步,假设H为沿Q点的y坐标构成的水平直线,以Q点为起点向右侧方
向,计算与H相交的所有其它Bezier线段,假设有M条线段与H相交,这些线
段为B[O], B[l], ......, B[M-1];
第六步,计算B[i]的方向d[i],计算方法与第一步中计算B的方法相同; 第七步,d'为dH]的总和,即d' = d
+d[l]+■—+d[M—1]; 第八步,根据d和d'计算封闭曲线G方向属性a,计算公式如下 封闭曲线G方向属性a - d*(l_2*abs(d')),如果a>0,表示封闭曲线G为
顺时4十方向,否则为逆时4十方向。
在像素空间掩码矩阵的像素类型Type确定方法的步骤(4)中,如果最终
计数结果为0,则该像素为轮廓外像素;如果最终计数结果不为0,则该像素为
轮廓内像素。
具体的实例如图20a和图20b所示,根据上述方法,图20a中像素A的跨 越边界计数为1,因此像素A为轮廓内像素,图2 Gb中像素B的跨越边界计数为 0,因此像素B为轮廓外像素。
在对字幕对象进行紋理贴图时需要建立字幕渲染紋理图像矩阵T,紋理图像 矩阵T是根据最终需要得到的图像的紋理效杲而确定的,应该注意的是紋理图 像矩阵T的维数与像素空间掩码矩阵M的维数应该相同。基于像素空间掩码矩 阵的紋理贴图方法的原理如图21所示。
在上述像素空间掩码矩阵模型中,具有相同Border值的点构成了一系列等 高线,利用这些等高线,就形成了多个渲染区域。外边个数、内边个数、侧边 个数、影子个数与渲染区域个数的关系如下,假设一个字幕对象的外边个数为W、 内边个数为N、侧边个数为C、影子个数为Y:
则渲染区域个凄tX为X = W + (N>1 (N+1):N) + C + Y + 1 上式中(N〉1 (N+1):N)的含义为N>1时为(N+l),否则为N。 图22a所示的字幕对象具有2个外边、3个内边、2个侧边、2个影子,共 划分ll个渲染区域(1) . 渲染区i或l:外边2与外边l之间的区&戈
(2) .渲染区域2:外边1与原始4仑廓之间的区域
(3) . 渲染区域3:原始4仑廓与内边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:影子l的区域
(11) .渲染区域ll:影子2的区域
图22b所示的字幕对象具有2个外边、l个内边、1个侧边、1个影子,共 划分6个渲染区域。
(1) .
(2) .
(3) .
(4) .
(5) ,
(6) .
渲染区域l 渲染区域2 渲染区域3 渲染区域4 渲染区域5
外边2与外边1之间的区域
外边1与原始轮廓之间的区域
原始轮廓与内边之间的区域
内边之内的面区域
外边2与侧边之间的区域
渲染区域6:影子的区域
建立了像素空间掩码矩阵M和紋理图像矩阵T后,就需要进行如下紋理贴 图的处理步骤
第一,确定紋理贴图的顺序。在基于像素空间掩码的紋理贴图中,字幕对象 渲染贴图的顺序为内边(多个)、面、外边(多个)、侧边、影子。
第二,确定紋理贴图半径MinR和MaxR。 MinR和MaxR表示的是两条等高线。 (l).针对N条内边,假设每条边的厚度为S[i], iG
,贝寸 第1条内边的MinR = 0, MaxR = S
; 第2条内边的MinR = S
, MaxR = MinR + S [1]; 第i条内边的MinR = S [1]+S [2]+...+S [i-2] , MaxR = MinR + S[i-l]; 第N条内边的MinR = S[l]+S[2]+…+S[N-2〗,MaxR = MinR + S[N-1];
48(2) .针对面,则
如果不加内边,则MinR = 0, MaxR = ^f象素空间掩码矩阵MASK中最大的Border 值;
如果加内边,则MinR =所有内边厚度之和,MaxR = l象素空间掩码矩阵MASK中 最大的Border值;
(3) .针对M条外边,假设每条边的厚度为W[i], ie[O,M-l],则: 第l条外边的MinR = 0, MaxR = W
;
第2条外边的MinR = W[O], MaxR = MinR + W[l];
第i条外边的MinR = W[l]+W[2]+…+W[i-2], MaxR = MinR + W[i-l];
第M条外边的MinR = W[l]+W[2]+…+W[M-2], MaxR = MinR + W[M-l];
(4) .针对侧边MinR =所有外边厚度之和,MaxR = MinR +侧边厚度;
(5) .针对影子MinR =所有外边厚度之和,MaxR = MinR +影子厚度。
第三,紋理贴图。假设像素空间掩码矩阵为MASK,简称M,紋理图像矩阵为 TEXTURE,简称为T,需要贴图的图像为PICTURE,简称P。 M、 T、 P的维数相同, 假设为w和h。对于P中的一个点P[i] [j], i G
, j G
,色彩RGBA 的值为
(1) .根据像素空间掩码的Border值来判断像素点P[i] [j]是否位于(MinR, MaxR) 表示的等高线内;
如果(M[i] [i]. Border〈MinR或者M[i] [i]. Border〉MaxR),则该^象素点不在 这个等高线内,此时不做任何处理。
否则该像素点不这个等高线内,进行如下的后续处理。
(2) .根据像素空间掩码的Type值、MinR、 MaxR的值来判断像素点P [i] [ j]是等 高线的内点还是等高线上的点;
满足如下条件之一的点为等高线内点 今M[i] [i]. Type !=边界 今MinR !=0而且MaxR != 0
否则该像素点就是等高线上的点。
(3) .根据上述得到的结果,进行色彩的赋值。
对于等高线的内点,直接进行色彩赋值即可;对于等高线上的点,需要根据 像素空间掩码的Area值进行反走样处理。
今如果P[i] [j]是等高线内的点,则P[i] [j]的色彩值为:RGBA(P[i] [j])=
49腿(T[i] [j])
今如果P[i] [j]是等高线上的点,则P[i] [j]的色彩值为:RGBA(P[i] [j])=
RGBA(P[i] [j]) x (1 - M[i] [j]. Area) + RGBA(T[i] [j]) xM[i] [j]. Area RGBA(PU] [j])为需要贴像PICTURE中索引[i, j]处的RGBA的值; RGBA(T[i] [j])为紋理图像矩阵TEXTURE中索引[i, j]处的RGBA的值;
M[i] [j]. Border和M[i] Area为像素空间掩码矩阵MASK中索引[i, j] 处只于应的Border和Area的<直。
在紋理贴图完成后,进行形态渐变径向色彩填充,这一步骤需要建立形态 渐变色彩数组C,形态渐变色彩数组C为一维形式,数组中元素的个数k可以根 据需要来确定。基于像素空间掩码矩阵的形态渐变径向色彩填充方法的原理如 图23所示。
建立了形态渐变色彩数组C后,就需要进行如下形态渐变径向色彩填充的步

第一,确定径向填充的顺序。在基于像素空间掩码的形态渐变径向色彩填充 中,字幕对象渲染贴图的顺序为内边(多个)、面、外边(多个)、侧边、影子。
第二,确定径向填充半径MinR和MaxR。 MinR和MaxR表示的是两条等高线。
(1) .针对N条内边,假设每条边的厚度为S[i], iG[O,N-1],贝寸 第1条内边的MinR = 0, MaxR = S
;
第2条内边的MinR = S[O], MaxR = MinR + S[l];
第i条内边的MinR = S[l]+S[2] +…+S[i-2], MaxR = MinR + S[i-l];
第N条内边的MinR = S[l]+S[2]+…+S[N—2], MaxR = MinR + S[N—1];
(2) .针对面,则
如果不加内边,则MinR = 0, MaxR =像素空间掩码矩阵MASK中最大的Border 值;
如果加内边,则MinR =所有内边厚度之和,MaxR = ^f象素空间掩码矩阵MASK中 最大的Border值;
(3) .针对M条外边,假设每条边的厚度为W[i], iUO,M-l],则: 第l条外边的MinR = 0, MaxR = W[O];
第2条外边的MinR = W[O], MaxR = MinR + W[l];第i条外边的MinR = W[1]+W[2]+...+W[i—2] , MaxR = MinR + W[i—1]; 第M条外边的MinR = W[l]+W[2]+…+W[M-2] , MaxR = MinR + W[M-l];
(4) .针对侧边MinR =所有外边厚度之和,MaxR = MinR +侧边厚度;
(5) .针对影子MinR =所有外边厚度之和,MaxR = MinR +影子厚度;
第三,形态渐变色彩数组COLOR的映射。形态渐变色彩数组COLOR,简称为 C, C中包含的元素个数为k。需要将数组索引[O,k-l]映射到[MinR, MaxR]的区 间内。即,对于[MinR,MaxR]区间内的一个值x,对应的形态渐变色彩数组的索 引为-.
F (x) = k* (x-MinR) / (MaxR—MinR) x G [MinR, MaxR]
第四,径向填充。假设像素空间掩码矩阵为MASK,简称M,形态渐变色彩数 组COLOR,简称为C,需要贴图的图像为PICTURE,简称P。 M、 P的维数相同, 假设为w和h。 C中包含的元素个数为k。对于P中的一个点P[U [j], i G [O,w-l], j6
,色彩RGBA的值为
(1) .根据像素空间掩码的Border值来判断像素点P[i] [ j]是否位于(MinR, MaxR) 表示的等高线内;
如果(M[i] [i]. Border〈MinR或者M[i] [i]. Border〉MaxR),则该l象素点不在 这个等高线内,此时不做任何处理。
否则该像素点不这个等高线内,进行如下的后续处理。
(2) 根据像素空间掩码的Type值、MinR、 MaxR的值来判断像素点P[i] [j]是等 高线的内点还是等高线上的点;满足如下条件之一 的点为等高线内点
今M[i] [i]. Type !=边界 今MinR !=0而且MaxR != 0
否则该像素点就是等高线上的点。
(3) .根据上述得到的结果,进行色彩的赋值。
对于等高线的内点,直接进行色彩赋值即可;对于等高线上的点,需要根据 像素空间掩码的Area值进行反走样处理。
今如果P[i] [j]是等高线内的点,则P[i] [j]的色彩值为RGBA(P[i] [j])=
RGBA(C[F(M[i] [j].Border)]) 今如果P[U [j]是等高线上的点,则RGBA(P[i]= RGBA (P [i] [ j〗)*
(l-M[i〗[j]. Area) + RGBA (C [F (M[i] [j]. Border) ]) *M[i][j].Area RGBA (P [ i ] [ j ])为需要贴像PICTURE中索引[i, j]处的RGBA的值; M[i] [j] Border和M[i] [j]. Area为像素空间掩码矩阵M中索引[i, j]处对应的
51Border和Area的值;
RGBA(C[F(M[i] [j]. Border)])为形态渐变色彩数组COLOR中索引为 F(M[i] [j]. Border)处的RGBA值。F (M[i] [j]. Border)的计算公式为 F(M[i] [j]. Border) = k*(M[i] [j]. Border-MinR) / (MaxR-MinR)。
在经过紋理贴图和形态渐变径向色彩填充之后,已经对全边(内边、外边) 和侧边进行了基于子像素面积的反走样处理,为了使面与内边、面与外边、面 与侧边、内边与内边、外边与外边、外边与側边的效杲更加平滑,需要根据相 邻四像素的等高线距离进行进一步的反走样处理。基于相邻四像素等高线距离 的边缘反走样处理方法的原理如图24所示。
基于相邻四像素等高线距离的边缘反走样处理的核心思想是
第一,对于全边,判断像素空间掩码矩阵对应的像素,对距离为Border的 全边边界进行反走样2 x 2的像素矩阵正好在Border的等高线上,以四点的距 离值与Border的差值作为外又值,做加;^又平均。
第二,对于侧边,与全边反走样一样对2x2的矩阵做加权平均,所不同的 是根据侧边距离Side进行计算。
基于相邻四像素等高线距离的边缘反走样处理的步骤如下
假设当前边界对应的等高线的值为Radius(R),像素空间掩码矩阵为 MASK(M),需要进行处理的图像为PICTURE(P),那么,针对P的一个像素P[i] [j], 进行反走样的运算如下
(1) .将P[i][j]记为P0, P[i][j]的上、下、左、右四个相邻像素为 P[i-l][j]、 PU+l〗[j]、 P[i][j-1]、 P[i][j+1]。这四个像素的色彩RGBA的值 分别为
C[o] = RGBA(P[i] [j]) C[i] = RGBA(P[i-1] [j]) C[2] = RGBA(P[i+l] [j]) C[3] = RGBA(P[i] [j-l]) C[4] = RGBA(P[i] [j+l〗)
(2) .将M[i][j]记为M0, M[i][j]的上、下、左、右四个相邻掩码为 M[i-l][j]、 M[i+l][j]、 M[i][j-l]、 M[i][j+1]。对于全边(内边或外边),这四个掩石马的Border ^f直分别为
R[o] = M[i] [j]. Border
R[i] = M[i-l] Border
Rm = M[i+1] [j]. Border
R[3] = M[i] [j-l]. Border
R[4] = M[i] [j十l]. Border y十于侧边,这四个掩石马的Border il分别为
R[o] = M[i] Side
R[i] = M[i-l] Side
R[2=M[i+1] [j].Side
R[3] = M[i] [j-1]. Side
R[4] = M[i] [j+1]. Side
(3).对像素P[i] [j]进行反走样处理的算法是根据上述四个像素的RGBA 和掩码的Border值或者Side值,进行加权平均。处理后的像素P[i] [j]的RGBA 为
i(C[k]x(abs(R[k]-R)》
RGBA(P[i][j])=
—k=0
i:(abs(R[k〗-R))
k=0
本领i或纟支术人
员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范
权利要求
1. 一种基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方法,包括如下步骤(1)将字幕对象转换为由一次、二次或三次贝塞尔线段组成的包括N个封闭轮廓的矢量轮廓信息,所述的N为正整数;(2)将步骤(1)获得的封闭轮廓中一次和三次贝塞尔线段转换成二次贝塞尔线段;(3)将经步骤(2)转换后的矢量轮廓信息中自相交的封闭轮廓内含的闭合环路删除或者分割;(4)对经步骤(3)处理后的矢量轮廓信息中相交的封闭轮廓进行规并整理,使封闭轮廓之间互不相交;(5)将经步骤(4)处理后的矢量轮廓信息中的封闭轮廓转换成多边形;(6)对经步骤(5)转换后的矢量轮廓信息中的多边形进行加边处理;(7)创建一个二维矩阵模型,使之对应最终渲染后的像素空间;(8)根据步骤(6)得到的字幕对象的多边形矢量轮廓,确定上述二维矩阵的属性值,得到像素空间掩码矩阵模型;(9)建立与像素空间掩码矩阵维数相同的字幕渲染纹理图像矩阵,根据字幕渲染纹理图像矩阵以及像素空间掩码矩阵的属性对字幕对象进行纹理贴图;(10)建立一维形态渐变色彩数组,根据形态渐变色彩数组以及像素空间掩码矩阵的属性对字幕对象进行形态渐变径向色彩填充。
2. 如权利要求1所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染 方法,其特征在于还包括步骤(11)针对边界像素根据其相邻四像素的等高 线距离进行反走样处理。
3. 如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕 渲染方法,其特征在于步骤(3)中将矢量轮廓信息中自相交的封闭轮廓内含 的闭合环路删除或者分割的方法包括以下步骤① 从字幕对象的矢量轮廓信息中取出一个与已取不同的封闭轮廓G;② 判断封闭轮廓G中是否存在二次贝塞尔线段自相交的情况,如果存在,则 继续判断是相邻二次贝塞尔线段自相交还是非相邻二次贝塞尔线段自相交,如果是相邻二次贝塞尔线段自相交,则将封闭轮廓G中内含的包括自相交的相邻 二次贝塞尔线段的闭合环路删除;如果是非相邻二次贝塞尔线段自相交,则将 封闭轮廓G和其内含的包括自相交的非相邻二次贝塞尔线段的闭合环路分割成 多个封闭轮廓;③ 重复步骤②,直到封闭轮廓G中所有的自相交情况处理完毕;④ 重复步骤①至步骤③,直到字幕对象矢量轮廓信息中所有的封闭轮廓处理完毕。
4. 如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕 渲染方法,其特征在于步骤(4)中对矢量轮廓信息中相交的封闭轮廓进行乡见 并整理的方法包括以下步骤① 计算所有封闭轮廓中每条二次贝塞尔线段与其他封闭轮廓中的二次贝塞尔线段的交点;② 将所有存在交点的二次贝塞尔线段在交点处分割成多条首尾相连的二次 贝塞尔线段;③ 确定所有封闭轮廓中包含的每条二次贝塞尔线段的内外边属性;④ 将属性为内边的二次贝塞尔线段删除,并重构矢量轮廓信息中的封闭轮廓;⑤ 标记所有封闭轮廓的方向,所述的方向包括顺时针和逆时针。
5. 如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕 渲染方法,其特征在于步骤(5)中将矢量轮廓信息中的封闭轮廓转换成多边 形的方法包括以下步骤① 遍历字幕对象的矢量轮廓信息,取出一个与已取不同的封闭轮廓G[i], i e [O,N-l], i为正整数;② 遍历封闭轮廓G[i],取出一条与已取不同的二次贝塞尔线段B[j],假设 G[i]中包含M个二次贝塞尔线段,则jG[O,M-l], j为正整数;③ 将B[j]离散化为直线段;④ 重复步骤②至步骤③,直到G[U中所有的二次贝塞尔线段处理完毕;⑤ 重复步骤①至步骤④直到字幕对象的矢量轮廓中所有的封闭曲线处理完毕。
6.如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方法,其特征在于步骤(6)中对矢量轮廓信息中的多边形进行加边处理 的方法包括以下步骤① 计算矢量轮廓信息中所有多边形的每条边的角度值al、 a2、 a3以及每条 边的加边矢量dx、 dy的值;al表示多边形的一条边与水平向右方向的夹角,a2表示一条边的延长线和 与其相邻的下一条边的夹角,a3表示一条边的延长线与下一条边的夹角的角平 分线与水平向右方向的夹角,dx表示加边时一条边的起始点移动的水平矢量, dy表示加边时一条边的起始点移动的竖直矢量;一条边的al = atan((y1-y0)/(x1-x0)),其中,(xO, y0)为该条边的起始点 坐标,(xl,yl)为该条边的结束点坐标,atan为反正切函数;a2的值等于相邻两条边的al值的差值;<formula>formula see original document page 4</formula>② 遍历矢量轮廓信息中的多边形,取出一个与已取不同的多边形Q[i];③ 复制Q[i],得到(T [i];④ 对于加外边的情况,如果Q' [i]的方向为逆时针,则取出其中的每条边 L [j],按照如下公式修正每条边的al和a2的值L[j].al = L[j].al + II, L[j].a2 = 211 - L[j].a2,其中11=180度; 对于加内边的情况,如果(T [i]的方向为顺时针,则取出其中的每条边L[j], 按照如下公式修正每条边的al和a2的值L[j].al = L[j].al + II, L[j].a2 = 2n - L[j].a2;⑤ 确定加边类型;如果加尖角边,则直接转至步骤 ;如果加方角边,假设有三个连续的顶点P[O]、 P[l]、 P[2],需要在原来的 顶点为P[l]处增加一个新的顶点为P';令P'的x坐标、y坐标、al、 a2、 a3、 dx、 dy的初始值等于P[1]中的相应值,然后按照如下公式重新修正P[1]的各个 属性值P[l]. al = P[O]. al + P' . a2/2; P[l].a2 = P[l].al - P[O].al; P[l].a3 = P[O].al + P[l].a2/2; P[l].dx = Cos(P[l].a3) +Sin(P[l].a2/2);P[l].dy = Sin(P[l].a3) + Sin (P [1]. a2/2)。如果加圆角边,首先按照加方角边的方法,在顶点P[l]处增加一个新的顶 点为P',修正P[1]的各个属性值;然后判断修正后的P[l].a2是否小于n/16, 如果不小于,则重复上述步骤,继续在P[1]处增加一个新的顶点,直到P[l].a2〈 n/16; 重复步骤①至步骤 ,直到处理完矢量轮廓信息中所有的多边形。
7. 如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕 渲染方法,其特征在于步骤(8)中所述的二维矩阵的属性值包括①一个像 素到边界的最短距离Border,②一个像素到最外侧边的侧边方向的距离Side, ③经过一个像素的所有边界围成的多边形的面积Area,④一个《象素的类型Type, ⑤一个像素是否已经进行了反走样处理的标志bAnt ia 1 ias ing。
8. 如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕 渲染方法,其特征在于步骤(9)中所述的紋理贴图的步骤包括(a) 确定用于字幕对象渲染的紋理贴图的顺序;(b) 根据字幕对象加边的类型和边的厚度确定紋理贴图的半径MinR和MaxR;(c) 根据需要贴图的图像中的像素点的位置,进行色彩的赋值或反走样处理。
9. 如权利要求8所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染 方法,其特征在于步骤(c)中如果需要贴图的图像中的像素点在紋理贴图半 径MinR和MaxR所表示的两条等高线围成的区域内,则直接进行色彩赋值;如 果需要贴图的图像中的像素点在紋理贴图半径MinR和MaxR所表示的两条等高 线上,则根据像素空间掩码矩阵索引处对应的经过该像素的所有边界围成的多 边形的面积Area值进行反走样处理。
10. 如权利要求1或2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字 幕渲染方法,其特征在于步骤(IO)中所述的形态渐变径向色彩填充的步骤 包括(I)确定用于字幕对象渲染的径向色彩填充的贴图顺序; (II )根据字幕对象加边的类型和边的厚度确定径向色彩填充的半径MinR 和MaxR-'(III )将形态渐变色彩数组索引映射到径向色彩填充半径MinR和MaxR所 表示的两条等高线围成的区间[MinR,MaxR]内;(IV)根据需要贴图的图像中的像素点的位置,进行色彩的赋值或反走样处理。
11. 如权利要求10所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲 染方法,其特征在于步骤(IV)中如果需要贴图的图像中的像素点在径向色 彩填充半径MinR和MaxR所表示的两条等高线围成的区间内,则直接进行色彩 赋值;如果需要贴图的图像中的像素点在径向色彩填充半径MinR和MaxR所表 示的两条等高线上,则根据像素空间掩码矩阵索引处对应的像素到字幕对象轮 廓边界的最短距离Border值以及经过该像素的所有边界围成的多边形的面积 Area值进行反走样处理。
12. 如权利要求2所述的基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲 染方法,其特征在于步骤(ll)中所述的根据相邻四像素的等高线距离进行 反走样处理的步骤包括① 在已经填充了色彩的图像中,得到当前像素P[i] [j]以及其上、下、左、 右四个相邻像素P[i-1] [j]、 P[i+l][j]、 P[i][j-1]、 P[i] [j+l]的色彩RGBA的 值,分别为C[o] = RGBA(P[i] [j]) C[i] = RGBA(P[i-1] [j]) C[2] = RGBA(P[i+l] [j〗) C[3] = RGBA(P[i] [j-1]) C[4] = RGBA(P[i] [j+l]);② 在像素空间掩码矩阵中得到与上述像素对应的掩码属性值;③ 根据上述四个相邻像素的色彩RGBA的值以及各像素的掩码属性值,进行 加权平均,得到处理后的像素P[i] [j]的色彩RGBA的值。
全文摘要
本发明涉及电视节目制作领域的字幕渲染技术,具体涉及一种基于曲线轮廓封闭环域和像素掩码矩阵的字幕渲染方法。该方法将一个字幕对象的Bezier曲线矢量轮廓离散化为多边形矢量之后,进一步根据多边形的方向和加边类型,创建出用来加边的多边形矢量,进而有机地将计算机图形学和数字图像处理结合起来,将字幕对象的矢量信息转化为一个基于等高线的像素掩码矩阵,并将其贯穿应用在字幕渲染的所有环节之中,从而提高了字幕渲染效果,满足了电视节目制播机构对字幕质量、字幕效果方面日益增长的需求,更加直接的体现电视媒体为大众服务的重要社会属性,取得更好的社会效益。
文档编号H04N5/278GK101465973SQ200810225858
公开日2009年6月24日 申请日期2008年11月4日 优先权日2008年11月4日
发明者吴正斌, 袁慧晶, 郑培枫 申请人:新奥特(北京)视频技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1