任意区域的色彩校正特技调节方法及其系统的制作方法

文档序号:7665432阅读:321来源:国知局
专利名称:任意区域的色彩校正特技调节方法及其系统的制作方法
技术领域
本发明属于视频文件的编辑技术,具体涉及一种任意区域的色彩校正特 技调节方法及其系统。
背景技术
在使用非线性编辑系统进行视频深度编辑,对视频画面做色彩校正特技调 节时,除了需要对视频的整个画面进行调节之外,还可能要对画面内的某个特 定区域进行更加准确地调节。目前,其它非编软件对画面内局部特定区域进行 处理的方式是使用两个角点构成的矩形或者椭圆来描述该特定区域,将特技效 果作用于该区域内,这样虽然可以满足一般的区域选择,但是对于更加复杂的 轮廓(比如人脸、花瓶等等)矩形和椭圓就不能准确的进行表现,从而也就影 响了最终画面的制作效果。

发明内容
本发明的目的在于针对目前非线性编辑系统对视频文件应用色彩校正特 技时,无法准确表现局部复杂轮廓这一缺陷,提供一种可以准确的表现任意 区域的色彩校正特技调节方法及其系统。
本发明的技术方案如下 一种任意区域的色彩校正特技调节方法,该方法 在视频界面上采用三次Bezier曲线描述一个或多个区域,在界面上绘制若干条 闭合的Bezier曲线,将特技效果只作用于闭合的Bezier曲线所包含的区域内。
如上所述的任意区域的色彩校正特技调节方法,其中,在描述Bezier曲线 的端点时,每个端点都被链接入一个端点的顺序链表中,端点在这个链表中的 顺序决定了端点在整个Bezier曲线中的顺序;每个端点还会被链接入一个排序 的链表中和一颗红黑树中,该排序的链表对端点以其x轴坐标的数值进行从小 到大的排序,在红黑树中也同样以x坐标排序。如上所述的任意区域的色彩校正特技调节方法,其中,在描述Bezier子曲 线时,每个子曲线被链接入四个排序链表和四颗红黑树中,即分别以上下左右 四个边界的数值排序的排序链表,以及分别以上下左右四个边界的数值排序的 红黑树。
如上所述的任意区域的色彩校正特技调节方法,其中,在判断某一定点 (xO,y0)是否在Bezier曲线的端点或控制点上时,检查该点与这条子曲线中 的端点或控制点的距离是否在一个给定的误差范围内。
如上所述的任意区域的色彩校正特技调节方法,其中,在判断某一定点 (xO,yO)是否在某条Bezier子曲线上时,首先求出一条值为y0的水平线或者 值为x0的垂直线与子曲线的交点,然后判断这些交点与(xO,yO)的距离是否在 一个给定的误差范围内。
一种任意区域的色彩校正特技调节系统,包括用于描述由若干段3次Bezier 子曲线连接而成的曲线的Bezier曲线数据模块,Bezier曲线数据模块连接曲线 区域数据处理模块,曲线区域数据处理模块连接特技设置接口模块,特技设置 接口模块与特技渲染模块连接;Bezier曲线数据模块、曲线区域数据处理模块、 特技设置接口模块分别与曲线绘制模块连接,曲线绘制模块连接色彩校正特技 模块。
本发明采用三次Bezier曲线来描述视频画面的一个或多个特定区域,从而 可以将复杂的轮廓更加清楚准确的予以表现。由于视频数据一般是动态的、序 列化的,在不同的关键祯上,某一选定的区域在画面中的位置很有可能会发生 变化,本发明可以通过使用直线插值的方法达到动态跟踪区域位置变化的效果, 从而提高视频图像的编辑质量。


图1为本发明的系统组成结构示意图。 图2为node Hst数据结构示意图。 图3为直线插值方法的应用示意图。
具体实施例方式
下面结合附图对本发明进行详细的描述。
本发明所提供的任意区域的色彩校正特技调节方法,是在视频界面上采用 三次Bezier曲线描述一个或多个区域,在界面上绘制若干条闭合的Bezier曲 线,将特技效果只作用于闭合的Bez ier曲线所包含的区域内。
几何学中连续的Bezier曲线由若干端点组成,每个端点带有一个或两个控 制点,端点构成曲线的位置,控制点控制曲线在某端点处的走向,这样的Bezier 曲线可以描述任意形状的曲线。
Bezier曲线的推导公式如下所示
<formula>formula see original document page 5</formula>
Pm表示一个矢量,既是端点,也是控制点,当11=3时,上式变形为:
<formula>formula see original document page 5</formula>
视频一般是动态的、序列化的,在不同的关键帧上,某一选定的区域在画 面中的位置很有可能会发生变化,本发明使用直线插值的方法可以达到动态跟 踪区域位置变化的效果。
直线插值(或者叫作线性插值)方法为一种公知技术,下面对该方法进行
一下介绍
假设在时序上加了两个关键帧,每个关键帧上保存了不同的要渲染的图形 形状,如第一个关键帧上的图形如图3中a所示,第二个关键帧上的图形如b 所示,两图中上面两个点不动,调整下面一点,则在两个关键帧内时序上某一 帧上的图像就需要按这两个关键帧上的点的位置用线性插值的方法计算出来。
假设图3中a上要调节的点(左下角点)的坐标为(xl, yl),图3中b上 要调节的点(右下角点)的坐标为(x2, y2); a、 b、 c对应的时序分别为tl、 t2, t3。则图3中c上要调整的点(中下点)的坐标为
x3 = xl + (x2 - xl)*t
y3 = yl + (y2 — yl)*t其中t = ( t3 — tl )/( t2 — tl )
用上述的方法,播放序列时可以看到要调节的点会呈直线移动。
在介绍Bezier曲线模块的设计之前,首先介绍一下该模块会用到的两种数 才居结构node list与红黑杉于(red-black tree)。
node list是一种通用的用于构建链表的数据结构,它不同于我们一般使用 的像Clist或者STL中的list那样的链表数据结构,此两者是把要加入链表的 对象的指针或者对象本身加入到链表中,然后由链表类的成员函数来遍历这些 对象,这样的链表虽然简单直观,但不适合于构建复杂的链表数据结构,比如 当一个对象需要同时位于多个链表中,并且随时可能在不同链表中遍历其前面 的或者后面的对象的时候,上述两种链表类就显得有些捉襟见肘了 。而node list 则不同,它直接将用于构建链表的数据结构-—链表节点,放置在对象自身之中, 然后将这些链表节点(而不是对象本身)链接起来,而当找到了一个链表节点 之后则通过该链表节点在对象之中的地址偏移量找到对象本身的地址。
node list的数据结构如图2所示, 一共有主个对象ObjO, Objl与0bj2, 它们分别被链接入三个链表中,这三个链表的表头(也是一个链表节点)分别 是HEAD NODEO, HEAD N0DE1以及HEAD N0DE2。从图中可以看出每个对象为了 能够链接入这三个链表,都为相应的链表准备了一个链表节点,分别是NODEO, N0DE1与N0DE2,它们依次对应前述链表头的构成的链表。每个链表以其链表头 为开始,按一定顺序将链表节点链接起来(实际上相当于将对象链接起来)。比 如对于上图中的第二个链表,它依次将Objl, Obj2和0bj0链接起来。
链表节点的数据结构如下所示 struct SNsListNode { SNsListNode *pNext; SNsListNode *pPrev;
每个链表节点具有指向其后继节点以及前导节点的指针。对于节点的初始 化,插入、删除操作有一套统一的操作,这些操作不会因具体对象的数据结构 而异。^暇设有一个lt据结构SNsNonsense,其结构如下 struct SNsNonsense {uint32_t nChatldj uint32—t nTimestamp; SNsUstNode lstNodej wchar —t wszNonsense [32];
};
有许多SNsNonsense的对象通过lstNode这个链表节点被链接入一个链 表中,而在某一刻沿着该链表遍历时得到了一个链表节点的指针pNode,它的类 型为SNsListNode *,那么只要通过下面的语句就可以得到其所在对象的指针 SNsNonsense*pNonsense=NS—UST_ENTRY (pNode, SNsNonsense, lstNode);
上面语句中的NS-LIST-ENTRY是一个宏,它的定义如下 井define NS_GET—CONTAINER(PTR, TYPE, MEMBER) \
((TYPE承)((char *) PTR — (size一t) (& ((TYPE *) 0)-〉MEMBER))) #define NS—LIST—ENTRY(PTR, TYPE, MEMBER) NS_GET_C0NTAINER (PTR, TYPE, MEMBER)
将pNode指针的值减去lstNode这个成员在SNsNonsense结构中的偏移量 (上面的例子中这个偏移量是8)得到的指针,这个指针强制转换为SNsNonsense *就是指向这个链表节点所在对象的指针。
红黑树是一颗二叉搜索树,它在传统的二叉搜索树的基础上增加了 一些规 则使得它更适合于数据的检索。红黑树有一个重要的性质 一颗有n个内部节 点的红黑树它的树高h满足h<=21og(n+l)。由于这个性质使得红黑树的插入、 删除与搜索的时间复杂度均为log(n)。
本发明所使用的红黑树的数据结构很类似于前面提到的list node,只不过 它最终把对象以二叉树的形式链接起来(而非一个线性的链表)。这样的数据结 构可以极大地提高排序数据的插入,删除和搜索速度。
本发明所提供的方法依赖于Bezier模块的设计,该模块中有两个最重要的 凄史据结构SNsEndPoint和SNsSpline。
SNsEndPoint用于描述曲线中的端点,它主要有如下内容1) 记录了端点的位置,选中状态等等信息。
2 ) 记录了端点的前后两个控制点的信息(有时可能只有一个控制点)。
3) 它还有两个指向SNsSpline结构的指针,分别指向该端点的前后两个 子曲线的数据结构。
4) 每个端点都会被链接入一个端点的顺序链表中,端点在这个链表中的 顺序决定了端点在整个Bez i er曲线中的顺序。
5) 每个被选中的端点还会被链接入一个所有被选中的端点的链表。
6) 每个端点还会被链接入一个排序的链表中和一颗红黑树中,这个排序 的链表对端点以其x轴坐标的数值进行从小到大的排序,在红黑树中也 同样以x坐标排序。
对于每一个新的端点,它被插入到上面提到的排序链表和红黑树中的时间 复杂度为log(n)。这是因为首先这个端点被插入到红黑树中的时间复杂度为 log(n),当确定了这个端点在红黑树中位置后,在红黑树中找到x轴坐标大小 顺序上该端点的下一个端点的时间复杂度也是log(n)(因为这步操作也是对红 黑树进行搜索的过程),当找到了 "下一个端点"后,直接将新的端点在排序的 链表中链接在"下一个端点"的前面即可(注意,这个链接的过程是不需要再 进行搜索的,因为所使用的链表都是node list,数据结构本身就决定了它在链 表中的位置)。因此总的时间复杂度仍为log(n)。
之所以要将一个端点同时链接到x轴坐标的排序链表和红黑树中是为了在 使用者调用框选端点函数时缩小搜索范围。比如使用者想要框选横坐标范围在 [xO, xl],纵坐标范围在[y0, yl]内的矩形区域内的所有端点,那么实现该功 能的函数会通过x轴坐标的红黑树定位满足x > xQ中x值最小的那个端点(算 法复杂度log(n)),然后再通过红黑树定位满足x《xl中x值最大的那个端点(算 法复杂度log(n)),这时再通过x轴坐标的排序链表遍历这两个端点之间的所有 端点,选中其中纵坐标范围在[yO, yl]的那些端点即可。
SNsSpline数据结构用于描述Bezier子曲线(后面简称子曲线)。它主要有 如下内容
1) 两个指向SNsEndPoint型数据结构的指针。分别指向这个子曲线的起始端点和结束端点的教:据结构。
2) 记录子曲线的矩形边界的边界信息(上下左右四个边界)。
3) 每个子曲线会,皮链接入四个排序链表和四颗红黑树中,它们分别是 分别以上下左右四个边界的数值排序的排序链表;分别以上下左右四个 边界的数值排序的红黑树。
4) 子曲线的一阶导函数与二阶导函数的系数。
5) 子曲线的驻点与拐点的位置。
之所以要引入SNsSpline这个数据结构是为了在查询某点是否在曲线上或 端点/控制点上时提高速度。如果在子曲线上或者在某子曲线的端点/控制点上 那么它必然要在该曲线的边界矩形之内,所以首先要找到矩形区域包含要查询 的点的子曲线(可能不只一条),然后再检查该点是否真的在某个子曲线上或端 点/控制点上(关于检查的方法后面会介绍)。为了找到这些子曲线,最简单的 方法就是对所有的子曲线的数据结构进行遍历,逐一判断每条子曲线的边界矩 形是否包含要查询的点。这种方法虽然简单,但是效率不高,因为在最坏情况 下可能要将所有的子曲线遍历 一遍才能找到答案。本发明所采用的方法简单解 释如下
假如使用者要查询点(xO, yO)是否位于某条子曲线上或端点/控制点上,而 且xQ比较接近于整个Bezier矩形边界的右边界,而yQ接近于整个Bezier矩 形边界的上下边界的中心点。那么在这种情况下,首先利用以子曲线的右边界 排序的红黑树找到所有右边界坐标》xO中最小的那个子曲线(算法复杂度为 log(n)),注意所有右边界〈xO的子曲线是不可能包含(xO,yO)点的,因此找到那 条子曲线后,沿着子曲线右边界的那条排序链表向右边界数值增大的方向遍历 子曲线,并判断(xO, yO)是否位于某条子曲线上或端点/控制点上。
下面介绍一下如何判断给定点(xO, yO)是否位于某条子曲线上或端点/控制 点上。判断给定点是否于某条子端点/控制点上很简单,只要检查该点与这条子 曲线中的端点/控制点的距离是否在一个给定的误差范围内即可。但判断给定点 是否位于某条子曲线上则复杂要复杂一些,大致思路是这样的首先求出一条 值为y0的水平线或者值为x0的垂直线与子曲线的交点(注意三次Bezier曲线 最多可能有三个交点),然后判断这些交点与(xO, yO)的距离是否在一个给定的 误差范围内即可。这里最复杂的操作是求交点操作,下面简要介绍一下。一条二维的子曲线可以用参数方程表达为x=x(t), y=y(t), te[O,l],求 交相当于求出x(t)-xO或者y(t卜yO的根t。求根的操作使用牛顿迭代法,牛顿 迭代法对于初始值的要求是比较严格的,有如下定理
定理设/(力在[a, b]上满足下列条件
(1 )尸(a).尸(b) < 0;
(2 ) /, (x) # 0;
(3) (x)存在且不变号;
(4) 取,。e [a, b],使得尸〃Cr).尸(x。) >0 则牛顿迭代序列收敛于/ (力在[a, b]上的唯一根/。
由于已经将每一条子曲线在
范围内的驻点与拐点求了出来,那么在求 根之前,先把[O, 1]区间根据这些驻点与拐点划分为若干区间,接下来则分别在 这些区间之内利用牛顿迭代法求根。假设某个区间为[a,b],方程为f(x卜O,求 根的大致步骤如下
1) 判断f(a)*f(b)<Q是否为真,如果不是则进行下一个区间的处理; 如果是则进行下一步处理。注意有可能a或者b就是方程的根, 这种情况要特殊处理,但在这里就不赘述,有兴趣可以查看 NsBezier. cpp中CNsBezier:: CalcRoots的求才艮具体实玉见。 2 ) 取初值z。为(l-p) *a+p*b,其中p=f (a) / (f (a) +f (b))。这样取初值是 为了尽可能让初值接近于根。注意,此时前面定理的(1), (2), (3)项 都已经满足,但(4)不一定满足。 3) 判断/〃(x)./") 〉0是否成立。如果是,则进行牛顿迭代直到迭代 结束;如果不是则进行下一步处理。
4) 如果/〃 (x).尸(a)>0,则取xQ=(a+ x。)/2,跳转到(3);否则取 x。=( x +b)/2,跳转到(3)。注意鉴于前面的子区间的划分原则, /《Ca必然不等于0,而且/〃 (x)在[a,b]区间内符号不变,因此判 断/〃 U)./ (a)>0只须一次就可以。
本发明所提供的任意区域的色彩校正特技调节系统的结构组成如图1所示, 包括以下几个模块
1、 Bezier曲线数据模块,该Bezier曲线模块负责描述一条由若干段3次Bezier子曲线连接而成的曲线,其主要的功能如下
1) 产生Bezier曲线及曲线组;
2) 从曲线组中得到曲线,或向曲线组中加入新的曲线;
3) 修改曲线,包括添加点、封闭曲线、修改各个点、删除点等等;
4) 查询某点是否位于某端点、控制点或者子曲线上;
5) 对某些控制点进行选中或者取消选中操作;
6) 求取曲线与某条水'f直线的交点,得到特技渲染区域。
2、 曲线绘制模块,该模块主要是提供操作界面及按钮,调用Bezier曲线 数据模块产生曲线、绘制曲线以及精确修改曲线,其主要功能如下
1 ) 调出与隐藏曲线区域绘制界面;
2) 提供操作工具,用户可以准确的生成、细致的修改曲线,达到所见即 所得的操作效果;
3) 提供定制椭圆、矩形的功能;
4) 选择曲线绘制及控制形式,包括平滑曲线、折线、控制点直线连动、 控制点独立等;
5) 从曲线区域数据处理模块中读取曲线实例,或者将曲线保存到曲线区 域数据处理模块;
3、 曲线区域数据处理模块,主要有以下功能
1) 保存及读取曲线实例;
2) 对关键帧上的曲线进行直线插值,求取非关键帧上曲线区域的位置。
4、 特技设置接口模块,主要功能是传递曲线组给渲染模块。
5、 色彩校正特技模块,用于将任意特技区域作为其参数封装起来。
6、 特技渲染模块,用于在接到特技设置接口模块传下来曲线区域后在区域 内渲染特4支。
员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
权利要求
1. 一种任意区域的色彩校正特技调节方法,其特征在于该方法在视频界面上采用三次Bezier曲线描述一个或多个区域,在界面上绘制若干条闭合的Bezier曲线,将特技效果只作用于闭合的Bezier曲线所包含的区域内。
2. 如权利要求1所述的任意区域的色彩校正特技调节方法,其特征在于 在描述Bezier曲线的端点时,每个端点都被链接入一个端点的顺序链表中,端 点在这个链表中的顺序决定了端点在整个Bezier曲线中的顺序;每个端点还会 被链接入一个排序的链表中和一颗红黑树中,该排序的链表对端点以其x轴坐 标的数值进行从小到大的排序,在红黑树中也同样以x坐标排序。
3. 如权利要求1所述的任意区域的色彩校正特技调节方法,其特征在于 在描述Bezier子曲线时,每个子曲线被链接入四个排序链表和四颗红黑树中, 即分别以上下左右四个边界的数值排序的排序链表,以及分别以上下左右四个 边界的数值排序的红黑树。
4. 如权利要求1或2或3所述的任意区域的色彩校正特技调节方法,其特 征在于在判断某一定点(xO,y0)是否在Bezier曲线的端点或控制点上时, 检查该点与这条子曲线中的端点或控制点的距离是否在一个给定的误差范围 内。
5. 如权利要求1或2或3所述的任意区域的色彩校正特技调节方法,其特 征在于在判断某一定点(xO,y0)是否在某条Bezier子曲线上时,首先求出 一条值为y0的水平线或者值为xO的垂直线与子曲线的交点,然后判断这些交 点与(xO, y0)的距离是否在一个给定的误差范围内。
6. 如权利要求1或2或3所述的任意区域的色彩校正特技调节方法,其特 征在于该方法使用直线插值的方法实现动态跟踪区域位置的变化。
7. —种任意区域的色彩校正特技调节系统,其特征在于该系统包括用于 描述由若干段3次Bezier子曲线连接而成的曲线的Bezier曲线数据模块, Bezier曲线数据模块连接曲线区域数据处理模块,曲线区域数据处理模块连接 特技设置接口模块,特技设置接口模块与特技渲染模块连接;Bezier曲线数据 模块、曲线区域数据处理模块、特技设置接口模块分别与曲线绘制模块连接, 曲线绘制模块连接色彩校正特技模块。
全文摘要
本发明属于视频文件的编辑技术,具体涉及一种任意区域的色彩校正特技调节方法及其系统。该方法在视频界面上采用三次Bezier曲线描述一个或多个区域,在界面上绘制若干条闭合的Bezier曲线,将特技效果只作用于闭合的Bezier曲线所包含的区域内。本发明可以将视频界面中复杂的轮廓更加清楚准确的予以表现,从而提高视频图像的编辑质量。
文档编号H04N9/64GK101448167SQ20071017820
公开日2009年6月3日 申请日期2007年11月28日 优先权日2007年11月28日
发明者何宇飞, 晏晓锋, 朝 杨, 郝小峰 申请人:新奥特(北京)视频技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1