掌桥专利:专业的专利平台
掌桥专利
首页

一种对图像进行风格化处理的方法及装置

文献发布时间:2023-06-19 12:13:22


一种对图像进行风格化处理的方法及装置

技术领域

本申请实施例涉及图像处理技术领域,尤其涉及一种对图像进行风格化处理的方法及装置。

背景技术

随着近年来面向个人娱乐的短视频类应用、直播类应用的发展,低多边形风格化渲染技术越来越多地应用于视频中。然而,直接将相关技术中的低多边形风格化渲染技术运用到视频的连续图像中去时,能够观察到大量的随机抖动,这种抖动无疑会降低该风格化渲染的美观感受。

例如,如图1的低多边形风格化渲染效果对比图所示,上排为原图序列,下排为经过低多边形风格化渲染后的图像序列。可以看出,原图序列中小鸟的背景几乎没有变化,但是生成序列的背景部分的三角形网格却各不相同。将图片的局部放大来看,如图2所示,在连续的视频帧中,基本没有变化的背景部分的三角形拓扑结构发生了变化,从而引起了抖动。

发明内容

本申请提供一种对图像进行风格化处理的方法及装置,以解决现有的低多边形风格化渲染方案中存在的连续图像的抖动较大的问题。

第一方面,本申请实施例提供了一种对图像进行风格化处理的方法,所述方法包括:

将当前图像帧与上一帧图像帧进行比较,以确定所述当前图像帧的运动区域与静止区域;

获取所述上一帧图像帧的网格数据;

从所述上一帧图像帧的网格数据中提取出对应于所述静止区域的静止网格数据;

生成所述运动区域对应的运动网格数据;

根据所述静止网格数据与所述运动网格数据,生成所述当前图像帧的网格数据;

根据所述当前图像帧的网格数据,生成所述当前图像帧对应的低多边形风格图像帧。

第二方面,本申请实施例还提供了一种对图像进行风格化处理的装置,所述装置包括:

图像划分模块,用于将当前图像帧与上一帧图像帧进行比较,以确定所述当前图像帧的运动区域与静止区域;

网格数据获取模块,用于获取所述上一帧图像帧的网格数据;

静止网格数据提取模块,用于从所述上一帧图像帧的网格数据中提取出对应于所述静止区域的静止网格数据;

运动网格数据生成模块,用于生成所述运动区域对应的运动网格数据;

图像网格数据生成模块,用于根据所述静止网格数据与所述运动网格数据,生成所述当前图像帧的网格数据;

低多边形风格图像帧生成模块,用于根据所述当前图像帧的网格数据,生成所述当前图像帧对应的低多边形风格图像帧。

第三方面,本申请实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的方法。

第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的方法。

本申请具有如下有益效果:

在本实施例中,通过对比当前图像帧与上一帧图像帧,来将当前图像帧分成运动区域与静止区域。静止区域的网格数据沿用上一帧图像帧的网格数据,从上一帧图像帧的网格数据中提取出对应于静止区域的静止网格数据。而运动区域的网格数据则进行重新剖分得到运动网格数据。根据静止网格数据与运动网格数据可以得到当前图像帧的网格数据。本实施例通过避免在连续两帧图像中对变化不大的静止区域重新进行剖分,从而避免静止区域的抖动,而人的动态视觉对于本身在运动中的运动区域中的抖动则容忍度比较高,因而能够降低主观上对于抖动的感觉,达到降低低多边形风格化后的前后帧间抖动的效果。

附图说明

图1是本申请背景技术中提供的一种低多边形风格化渲染效果对比图示意图;

图2是本申请背景技术中提供的一种低多边形风格化渲染效果局部内容拓扑结构示意图;

图3是本申请实施例一提供的一种对图像进行风格化处理的方法实施例的流程图;

图4是本申请实施例二提供的一种对图像进行风格化处理的方法实施例的流程图;

图5是本申请的示例性实例中提供的上一帧图像帧示意图;

图6是本申请的示例性实例中提供的上一帧图像帧的边缘图示意图;

图7是本申请的示例性实例中提供的上一帧图像帧对应的边缘点集合示意图;

图8是本申请的示例性实例中提供的上一帧图像帧的三角形网格示意图;

图9是本申请的示例性实例中提供的上一帧图像帧对应的低多边形风格图像帧示意图;

图10是本申请的示例性实例中提供的当前图像帧的边缘图示意图;

图11是本申请的示例性实例中提供的当前图像帧的运动检测图示意图;

图12是本申请的示例性实例中提供的静止三角形网格示意图;

图13是本申请的示例性实例中提供的静止/运动边界示意图;

图14是本申请的示例性实例中提供的当前图像帧的边缘点集合示意图;

图15是本申请的示例性实例中提供的当前图像帧的运动区域数据集合示意图;

图16是本申请的示例性实例中提供的运动三角形网格示意图;

图17是本申请的示例性实例中提供的当前图像帧的三角形网格示意图;

图18是本申请的示例性实例中提供的采用本实施例生成的低多边形风格化渲染效果图拓扑结构示意图;

图19是本申请实施例三提供的一种对图像进行风格化处理的装置实施例的结构框图;

图20是本申请实施例四提供的一种电子设备的结构示意图。

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。

本申请提出了一种对图像进行风格化处理的方案,可以应用于视频制作类工具、短视频类app客户端、直播类app客户端等具有视频处理功能的应用中。

本实施例所指的风格化处理可以包括对图像进行低多边形风格化渲染,其中,低多边形风格化渲染指的是故意采用这种建模方式来绘制的图形,使人既能看出图形表达的内容,又显得简约、模糊,属于一种美术风格。

以下以智能手机的短视频类app客户端为例,对本实施例的应用场景进行示例性说明:

1、打开录制页(此时能够看到手机摄像头采集的图像)。

2、选择低多边形风格特效(摄像头采集的图像变为低多边形风格图像)。

3、录制视频。

4、录制完毕,将视频保存本地或上传服务器。

通过本实施例可以将待处理的视频帧自动转化为低多边形风格图像,并且连续图像间抖动较少。

以下通过多个实施例对“将待处理的视频帧自动转化为低多边形风格图像”的过程进行说明。

实施例一

图3为本申请实施例一提供的一种对图像进行风格化处理的方法实施例的流程图,可以包括如下步骤:

步骤110,将当前图像帧与上一帧图像帧进行比较,以确定所述当前图像帧的运动区域与静止区域。

其中,当前图像帧可以为当前需要处理的视频的非首帧图像,或者,可以是场景切换后(如切换至低多边形风格特效场景后)的非首帧图像。对于视频的首帧图像或者场景切换后的首帧图像,可以采用现有的低多边形风格化处理的方式进行风格化处理。

在实现时,可以通过运动检测的方法来检测出当前图像帧的运动区域与静止区域。例如,可以通过对比当前图像帧与上一帧图像帧的原图、灰度图或者边缘图等方式,来对当前图像帧进行运动检测,从而确定当前图像帧的运动区域与静止区域。其中,静止区域可以为相比于上一帧图像帧没有发生变化或者变化比较细微的区域;运动区域可以为相比于上一帧图像帧有明显变化的区域。

步骤120,获取所述上一帧图像帧的网格数据。

其中,网格数据是指描述空间中多边形集合(如三角形集合)的数据结构,集合中的多边形可以有共享边和顶点。本实施例中的网格数据是指二维平面上的网格数据。

当获得一个图像帧的网格数据以后,本实施例可以存储该图像帧的网格数据。在存储时,可以将网格数据与对应图像帧的帧号进行关联存储。在存储位置中通过查询上一帧图像帧的帧号可以获得对应的网格数据。

步骤130,从所述上一帧图像帧的网格数据中提取出对应于所述静止区域的静止网格数据。

在实现时,可以将上一帧图像帧的网格数据中落入运动区域的顶点和关联的边剔除,最后得到对应于静止区域的静止网格数据。

步骤140,生成所述运动区域对应的运动网格数据。

在该实施例中,可以对运动区域采用多边形剖分算法进行多边形剖分(如三角形剖分),生成当前图像帧的运动网格数据。

步骤150,根据所述静止网格数据与所述运动网格数据,生成所述当前图像帧的网格数据。

在该步骤中,得到当前图像帧的运动网格数据以后,可以沿用上一帧图像帧的静止网格数据,并将静止网格数据与运动网格数据结合,生成当前图像帧的网格数据。

步骤160,根据所述当前图像帧的网格数据,生成所述当前图像帧对应的低多边形风格图像帧。

在实现时,在获得当前图像帧的网格数据以后,可以对该网格数据中的每个多边形进行颜色采样,并按照采样得到的颜色值对当前图像帧的网格数据进行渲染,得到当前图像帧对应的低多边形风格图像帧。

在本实施例中,通过对比当前图像帧与上一帧图像帧,来将当前图像帧分成运动区域与静止区域。静止区域的网格数据沿用上一帧图像帧的网格数据,从上一帧图像帧的网格数据中提取出对应于静止区域的静止网格数据。而运动区域的网格数据则进行重新剖分得到运动网格数据。根据静止网格数据与运动网格数据可以得到当前图像帧的网格数据。本实施例通过避免在连续两帧图像中对变化不大的静止区域重新进行剖分,从而避免静止区域的抖动,而人的动态视觉对于本身在运动中的运动区域中的抖动则容忍度比较高,因而能够降低主观上对于抖动的感觉,达到降低低多边形风格化后的前后帧间抖动的效果。

实施例二

图4为本申请实施例二提供的一种对图像进行风格化处理的方法实施例的流程图,本实施例在实施例一的基础上进行更具体的说明,可以包括如下步骤:

步骤210,获取第一边缘图以及第二边缘图,所述第一边缘图为当前图像帧的边缘图,所述第二边缘图为上一帧图像帧的边缘图。

在一种实现方式中,可以采用如下方式生成当前图像帧的第一边缘图或上一帧图像帧的第二边缘图:

将图像帧(当前图像帧或上一帧图像帧)进行灰度化处理,得到对应的灰度图;对该灰度图进行高斯模糊;对高斯模糊后的图像采用边缘检测算法或边缘检测模型进行边缘检测,得到对应的边缘图。

在第一边缘图以及第二边缘图中均可以包括边缘像素点以及非边缘像素点,示例性地,边缘像素点的像素值可以为1,非边缘像素点的像素值可以为0。

步骤220,分别将所述第一边缘图以及所述第二边缘图按像素进行分块,生成与所述第一边缘图对应的第一分块图,以及,与所述第二边缘图对应的第二分块图。

例如,对于第一边缘图,可以按像素分成NxN个小块,该NxN个小块组合成第一分块图。其中,N为正整数,其可以根据实际业务需求确定,本实施例对此不作限定,例如,可以将N设定为数值8。

对于第二边缘图,同理可以采用上述分块方式进行分块,得到第二分块图。

步骤230,将所述第一分块图与所述第二分块图进行匹配,生成当前图像帧的运动检测图,所述运动检测图包括运动分块以及静止分块,所有运动分块组成运动区域,所有静止分块组成静止区域。

在该步骤中,可以将第一分块图中的各分块与第二分块图中相应位置的分块进行对比分析,以确定第一分块图中的各分块属于运动分块还是静止分块,通过标记运动分块和静止分块可以生成运动检测图。

在本实施例中,静止分块可以包括分块中的边缘与第二分块图中相应位置的分块中的边缘基本重合的分块,以及,分块中没有检测到边缘的分块。运动分块可以包括分块中的边缘与第二分块图中相应位置的分块中的边缘基本不重合的分块。

在一种实施方式中,步骤230进一步可以包括如下步骤:

步骤230-1,遍历所述第一分块图中的各个分块,针对当前遍历到的分块,将所述第二分块图中与当前分块位置匹配的分块作为匹配分块。

在该步骤中,针对第一分块图中的各个分块,将第二分块图中对应位置的分块作为匹配分块。后续可以根据第一分块图中的分块与对应的匹配分块的对比来确定该分块是运动分块还是静止分块。

步骤230-2,计算当前分块中的各像素的像素值之和,作为第一分块像素值;以及,计算当前分块的匹配分块中的各像素的像素值之和,作为第二分块像素值。

在该步骤中,一个分块中包含的像素点的像素值的加和可以作为分块像素值。当前分块对应于第一分块像素值,当前分块的匹配分块对应于第二分块像素值。

步骤230-3,若所述第一分块像素值以及所述第二分块像素值均小于第一预设值,则判定当前分块为静止分块。

在该步骤中,可以预先设置第一预设值T1,如果当前分块的第一分块像素值小于T1,且,当前分块的匹配分块的第二分块像素值也小于T1,则表示当前分块以及对应的匹配分块中均不存在边缘像素点或者存在少量的边缘像素点,即可以认为当前分块为静止分块。

其中,T1可以根据实际情况设定,本实施例对此不作限定,例如,假设当分块大小为8x8,则可以将T1设定为2。

步骤230-4,若所述第一分块像素值与所述第二分块像素值中至少一个大于所述第一预设值,则分别确定当前分块以及所述匹配分块中的边缘像素点,并计算当前分块中的边缘像素点在所述匹配分块中的对应像素点也是边缘像素点的第一概率,以及,计算所述匹配分块中的边缘像素点在所述当前分块中的对应像素点也是边缘像素点的第二概率。

在该步骤中,如果第一分块像素值不小于T1,和/或,第二分块像素值不小于T1,则可以对当前分块以及对应的匹配分块进行逐像素对比分析。首先可以先确定当前分块与其匹配分块中的边缘像素点,对于当前分块的边缘像素点,判断该边缘像素点对应于匹配分块中的像素点是否也是边缘像素点,并根据判断结果计算第一概率。其中,该第一概率的计算方式可以是:确定当前分块中边缘像素点的第一数量;确定当前分块中的边缘像素点对应于匹配分块中的像素点也是边缘像素点的数量,作为第二数量;计算第二数量与第一数量的比值,作为第一概率。例如,若当前分块中的边缘像素点的数量为10,对应于匹配分块的像素点也是边缘像素点的数量为8,则第一概率为0.8。

另一方面,还可以确定当前分块的匹配分块中的边缘像素点,对于该匹配分块的边缘像素点,判断该边缘像素点对应于当前分块中的像素点是否也是边缘像素点,并根据判断结果计算第二概率。其中,该第二概率的计算方式可以是:确定当前分块的匹配分块中边缘像素点的第三数量;确定该匹配分块中的边缘像素点对应于当前分块中的像素点也是边缘像素点的数量,作为第四数量;计算第四数量与第三数量的比值,作为第二概率。

步骤230-5,若所述第一概率以及所述第二概率均大于第二预设值,则判定当前分块为静止分块。

在该步骤中,还可以预先设置第二预设值T2,如果第一概率大于T2,且,第二概率也大于T2,则表示当前分块与其匹配分块中的边缘重合度比较高,则可以将当前分块确定为静止分块。

其中,T2可以根据实际情况设定,本实施例对此不作限定,例如,假设当分块大小为8x8,则可以将T2设定为0.75。

步骤230-6,若所述第一概率与所述第二概率中至少一个小于所述第二预设值,则判定当前分块为运动分块。

在该步骤中,如果第一分块像素值或者第二分块像素值大于或等于第一预设值,并且,第一概率或者第二概率小于或等于第二预设值,则表示当前分块存在边缘像素点,且当前分块与其匹配分块的边缘重合度不大,则可以将当前分块确定为运动分块。

步骤230-7,当所述第一分块图遍历完毕以后,根据各分块为所述运动分块或所述静止分块的结果,生成运动检测图。

在该步骤中,当对第一分块图中的各个分块遍历完毕以后,可以根据识别出的各个分块是运动分块还是静止分块的识别结果,生成第一分块图对应的运动检测图。在实现时,运动检测图中,对于运动分块与静止分块,可以采用不同的颜色进行标记。

步骤240,获取所述上一帧图像帧的网格数据。

当获得一个图像帧的网格数据以后,本实施例可以存储该图像帧的网格数据。在存储时,可以将网格数据与对应图像帧的帧号进行关联存储。在存储位置中通过查询上一帧图像帧的帧号可以获得对应的网格数据。

步骤250,从所述上一帧图像帧的网格数据中提取出对应于所述静止区域的静止网格数据。

在该实施例中,对于当前图像帧中的静止区域,可以继续沿用上一帧图像帧的网格数据。具体的,可以从上一帧图像帧的网格数据中提取出对应于静止区域的网格数据,作为静止网格数据。

在一种实施方式中,上一帧图像帧的网格数据可以包括多个顶点的顶点位置信息;步骤250中可以采用如下步骤获得静止网格数据:

步骤250-1,根据各顶点的顶点位置信息,判断该顶点是否落入所述运动检测图中的运动分块内。

在一种实现中,可以结合运动检测图中各分块的大小以及各顶点位置信息,定位各顶点落入的运动检测图的目标分块;然后判断该目标分块为静止分块还是运动分块,如果该目标分块为运动分块,则可以判定该顶点落入运动检测图中的运动分块内。

例如,假设某顶点位置信息为(x,y),分块图中各分块大小为8x8,则该顶点位置信息对应的、在运动检测图的分块的坐标就是(x/8,y/8),如果该分块的坐标为运动分块,则判定该顶点落入运动检测图中的运动分块内。

步骤250-2,将落入所述运动检测图中的运动分块内的顶点作为目标顶点,并在所述网格数据中删除所述目标顶点,以及删除引用了所述目标顶点的边。

步骤250-3,将剩下的网格数据作为对应于所述静止区域的静止网格数据。

在该步骤中,可以将检测出的、落入运动检测图中的运动分块内的顶点作为目标顶点,然后在上一帧图像帧的网格数据中删除目标顶点,以及删除所有引用目标顶点的边,最后将剩下的网格数据作为对应于静止区域的静止网格数据。

步骤260,从所述静止网格数据中提取出所述运动区域与所述静止区域的边界数据。

在该步骤中,可以根据静止网格数据进一步提取出当前图像帧中运动区域与静止区域的边界数据,该边界数据也可以作为静止网格数据与后续生成的运动网格数据的边界。在实现时,可以将静止网格数据内的所有多边形(如三角形)合并,从而得出边界数据。

在一种实施例中,步骤260进一步可以包括如下步骤:

步骤260-1,遍历各有向边数据,判断当前遍历到的有向边数据在有向边集合中是否存在共享边,所述共享边为两个有向多边形共享的边。

步骤260-2,若存在共享边,则在所述有向边集合中删除该共享边;若不存在共享边,则将该有向边数据加入至有向边集合中。

在实际中,网格数据中可以包括多个方向相同的有向多边形数据,该有向多边形数据中可以包括顶点数据以及有向边数据,即,网格数据中的多边形都是有向多边形且方向都是相同的,其中,多边形的方向由其有向边围绕的方向(即顺时针或是逆时针)来决定。

共享边是指两个多边形共享着的相同的边,然而,这两个多边形对于共享边的有向表示是相反的。例如,若其中一个三角形对于共享边的有向表示为(a,b),则另一个三角形对于该共享边的有向表示则为(b,a)。

在该步骤中,可以查找出静止网格数据中的所有共享边。在一种实施方式中,步骤260-1进一步可以包括如下步骤:

步骤260-1-1,假设当前遍历到的有向边数据为(t1,t2),判断有向边集合中是否包含有向边(t2,t1)。

在一种例子中,假设上述有向多边形为有向三角形,本实施例可以对静止网格数据中的各个有向三角形进行遍历。针对当前遍历到的有向三角形,假设当前的有向三角形的顶点分别为t1、t2和t3,对应的有向边分别为(t1,t2)、(t2,t3)和(t3,t1),可以分别遍历有向边(t1,t2)、(t2,t3)和(t3,t1)。

在实现时,可以设定有向边集合E用于存储符合条件的有向边。对于当前遍历到的有向边(t1,t2),可以查找有向边集合E中是否包含有向边(t2,t1)(有向边(t1,t2)与有向边(t2,t1)是共享边)。

步骤260-1-2,若所述有向边集合中包含有向边(t2,t1),则判定有向边数据为(t1,t2)在所述有向边集合中存在共享边;若所述有向边集合中不包含有向边(t2,t1),则判定有向边数据为(t1,t2)在所述有向边集合中不存在共享边。由于有向边(t1,t2)与有向边(t2,t1)是共享边,针对当前的有向边(t1,t2),如果在有向边集合E中包含有向边(t2,t1),表示该有向边(t2,t1)以及有向边(t1,t2)是共享边,因此可以从有向边集合E中删除该有向边(t2,t1),以确保有向边集合E中存储的有向边均不是共享边。

如果在有向边集合E中没有包含有向边(t2,t1),则表示当前的有向边(t1,t2)有可能是共享边,也有可能不是共享边,因此,可以先将有向边(t1,t2)加入到有向边集合E中。

对于(t2,t3)和(t3,t1)也是采用相同的方法进行处理,在有向边集合E中查找是否存在有向边(t3,t2)和有向边(t1,t3),如果存在则删除对应的有向边(t3,t2)或有向边(t1,t3)。如果不存在,则将有向边(t2,t3)或有向边(t3,t1)加入到有向边集合E中。

以此类推,对静止网格数据中的各个有向边进行上述的判断,这样,最后能够抵消掉有向边集合E中的所有共享边,剩下的就不是共享边,而是边界边了。

步骤260-3,当所有有向边数据遍历完成以后,将所述有向边集合中的有向边数据首尾相连,得到所述运动区域与静止区域的边界数据。

在该步骤中,通过上述共享边的互相抵消后,有向边集合E中的存储的有向边数据就不包含共享边了,而是边界边,这样,将有向边集合E中记录的各个有向边首尾相接得到的边缘可以作为静止区域与运动区域的边界数据。

步骤270,根据当前图像帧的第一边缘图确定对应的边缘点集合。

在一种实现中,可以采用如下方法获得第一边缘图对应的边缘点集合:

将第一边缘图输入至预先训练的线段提取模型中,由线段提取模型输出该第一边缘图对应的线段集合;然后对线段集合中每个线段每隔几个点提取一个点,形成边缘点集合。

步骤280,从所述边缘点集合中筛选出、落入以所述边界数据划分出的运动区域的边缘点,组成运动边缘点集合。

该步骤要做的是从边缘点集合中提取出运动边缘点集合,即落入运动区域的边缘点的集合。

根据步骤260-3中将有向边首尾相接以后,可以形成一个或多个闭合的多边形,则运动区域与静止区域的边界,可能由多个不相连的闭合多边形构成,也可能多边形中含有孔洞,或者也可能孔洞内又含有多边形。针对这种情况,在一种实施方式中,步骤280可以采用如下步骤从边缘点集合中筛选出运动边缘点集合:

采用非零环绕数规则判断所述边缘点集合中的各边缘点是否落入所述闭合多边形内;将落入所述闭合多边形内的边缘点作为运动边缘点。

该步骤可以通过非零环绕数规则(Nonzero Winding Number Rule),来快速确定每个边缘点是否在有向边集合E所围成的多边形内。

非零环绕数规则用于判断一个点是否在多边形内。通过计算当前点的环绕数(Winding Number),若环绕数为0表示该点在多边形外,若环绕数为非零表示该点在多边形内。

在一种实现中,环绕数(Winding Number)的计算方法可以是:初始值为0、从该点向任意方向做一条射线,每和一条正向边相交则计数+1,每和一条负向边相交则计数-1,最终得到的值。

在其他实现中,为了提高环绕数的计算速度,可以采用“板块分解”算法来计算环绕数。该算法先经过每个顶点画一条竖线,然后计算竖线与边集合中与之相交的边的交点。每两条竖线中间所夹部分被称为一个板块(slab)。对于每个板块,记录与之相交的线端的起止位置和线段的方向。判断点是否在多边形中时,先通过二分查找找到该点所处的板块,再通过二分查找找到该点在该板块中相对于相交线段所在的位置,然后可以求出从该点做一个向下(或向上)的射线的Winding Number。对于点正好落在板块分界竖线的情况,还需要特殊处理一下。

步骤290,基于所述运动边缘点集合以及所述边界数据进行多边形剖分,生成运动网格数据。

例如,假设该多边形为三角形,可以将获得的运动边缘点集合以及边界数据一起输入至三角形剖分模块中,由三角形剖分模块根据运动边缘点集合以及边界数据对运动区域进行三角形剖分,得到运动网格数据。在一种示例中,三角形剖分模块可以根据运动边缘点集合以及边界数据对运动区域进行德劳内三角形剖分,输出运动网格数据。出于对最终效果的美观的需求,还可以对三角形的最大面积和/或三角形最大内角进行一定限制,必要时还可以在运动边缘点集合中加入一些辅助点,并在新点集合基础上进行剖分。

进一步地,为了提高三角形剖分的准确率,避免出现重复的点和三角形,在获得运动边缘点集合以后,可以将边缘点集合中除运动边缘点集合以外的边缘点组成静止边缘点集合,然后对静止边缘点集合中的各个静止边缘点添加标记,并将添加标记后的静止边缘点集合一起输入至三角形剖分模块中,使得三角形剖分模块在进行三角形剖分时不去剖分这部分携带标记的静止边缘点。

步骤2110,将所述静止网格数据与所述运动网格数据拼合成所述当前图像帧的网格数据。

在该步骤中,通过对静止网格数据与运动网格数据合并,可以得到当前图像帧的网格数据。

步骤2120,根据所述当前图像帧的网格数据,生成所述当前图像帧对应的低多边形风格图像帧。

在实现时,在获得当前图像帧的网格数据以后,可以对该网格数据中的每个多边形进行颜色采样,并按照采样得到的颜色值对当前图像帧的网格数据进行渲染,得到当前图像帧对应的低多边形风格图像帧。

为了使得本领域技术人员更好地理解本申请实施例,以下通过具体实例对本实施例进行示例性说明,在本实例中,设定多边形为三角形,假设当前图像帧为图1中第一行的第三张图像,则当前图像帧对应的上一帧图像帧为图1中第一行的第二张图像:

首先,通过如下步骤,对相关技术中的低多边形风格化渲染方案进行说明:

(1)针对图5所示的图像帧,将该图像帧先转换为灰度图,然后对灰度图进行高斯模糊,并对高斯模糊后的图像进行边缘检测后,可以得到如图6所示的边缘图。

(2)边缘图经过线段提取算法,获得对应的线段集合;然后将线段集合中每个线段每隔几个点提取一个点,形成如图7所示的边缘点集合。

(3)对图7的边缘点集合进行德劳内三角形剖分,输出如图8所示的三角形网格。此时出于对最终效果的美观的需求,可以对三角形的最大面积或/和三角形最大内角进行一定限制,必要时会在点集合中加入一些辅助点,并在新点集合基础上进行剖分。

(4)对三角形网格中的每个三角形,在原有图像帧上进行颜色采样并渲染,生成如图9所示的低多边形风格图像帧。

本实施例的方案,相对于上述相关技术中的方案,在步骤(1)、(2)和(4)的基础上,对步骤(3)做出了改善,将步骤(3)扩展为如下的步骤:

(3.1)假设图5为上一帧图像帧,则图6的边缘图为上一帧图像帧的第二边缘图,图10的边缘图为图1所示的当前图像帧的第一边缘图。分别将第一边缘图以及第二边缘图按像素分成NxN个分块(N为正整数,其值例如可以为8),获得对应的分块图。对比两个分块图中相应的分块,将其中边缘基本重合的分块、以及没有检测到边缘的分块设为静止分块;否则设为运动分块,最后得到如图11所示的运动检测图。在图11的运动检测图中,灰色的分块表示块中边缘基本不重合,白色的分块表示块中边缘基本重合,黑色的分块表示块中没有检测到边缘。黑色和白色小块都作为静止分块,灰色小块作为运动分块。

(3.2)假设图8的三角形网格为上一帧图像帧的三角形网格,在图8的三角形网格中,将落入图11的运动检测图中的运动分块中的顶点和关联的边剔除,最后可以得到如图12所示的相对于静止区域的静止三角形网格。

(3.3)通过图12的静止三角形网格,进一步提取出静止区域与运动区域的边界数据,如图13所示。

(3.4)对图10中的第一边缘图提取的边缘点集合如图14所示,根据图13中的静止/运动边界,从图14的边缘点集合中筛选出落在运动区域的边缘点点,组成运动边缘点集合。该运动边缘点集合与上述边界可以组成如图15所示的运动区域数据集合。

(3.5)对图15进行三角形剖分,得到如图16所示的运动区域的运动三角形网格。

(3.6)将图12的静止三角形网格与图16的运动三角形网格合并,得到当前图像帧的三角形网格,如图17所示。

通过本实例的上述过程,先把当前帧空间上分成相对于上一帧静止和运动的两部分,相对于上一帧变化不大的静止部分继续沿用上一帧的三角形网格,获得静止三角形网格。相对于上一帧变化大的运动部分重新进行三角形剖分,生成运动三角形网格,然后将静止三角形网格和运动三角形网格两部分合并成该帧的三角形网格。在基于该帧的三角形网格进行颜色采样及渲染后可以得到如图18所示的效果图,从图18中可以看出,静止部分的三角形网格的拓扑结构基本保持不变,主观上的抖动极大地降低了。

实施例三

图19为本申请实施例三提供的一种对图像进行风格化处理的装置实施例的结构框图,该装置可以包括如下模块:

图像划分模块310,用于将当前图像帧与上一帧图像帧进行比较,以确定所述当前图像帧的运动区域与静止区域。

网格数据获取模块320,用于获取所述上一帧图像帧的网格数据。

静止网格数据提取模块330,用于从所述上一帧图像帧的网格数据中提取出对应于所述静止区域的静止网格数据。

运动网格数据生成模块340,用于生成所述运动区域对应的运动网格数据。

图像网格数据生成模块350,用于根据所述静止网格数据与所述运动网格数据,生成所述当前图像帧的网格数据。

低多边形风格图像帧生成模块360,用于根据所述当前图像帧的网格数据,生成所述当前图像帧对应的低多边形风格图像帧。

在一种实施例中,图像划分模块310进一步可以包括如下子模块:

边缘图获取子模块,用于获取第一边缘图以及第二边缘图,所述第一边缘图为当前图像帧的边缘图,所述第二边缘图为上一帧图像帧的边缘图;

分块子模块,用于分别将所述第一边缘图以及所述第二边缘图按像素进行分块,生成与所述第一边缘图对应的第一分块图,以及,与所述第二边缘图对应的第二分块图;

运动检测图生成子模块,用于将所述第一分块图与所述第二分块图进行匹配,生成当前图像帧的运动检测图,所述运动检测图包括运动分块以及静止分块,所有运动分块组成运动区域,所有静止分块组成静止区域。

在一种实施例中,在所述第一边缘图以及所述第二边缘图中,包括边缘像素点以及非边缘像素点,所述边缘像素点的像素值为1,所述非边缘像素点的像素值为0;

所述运动检测图生成子模块具体用于:

遍历所述第一分块图中的各个分块,针对当前遍历到的分块,将所述第二分块图中与当前分块位置匹配的分块作为匹配分块;

计算当前分块中的各像素的像素值之和,作为第一分块像素值;以及,计算当前分块的匹配分块中的各像素的像素值之和,作为第二分块像素值;

若所述第一分块像素值以及所述第二分块像素值均小于第一预设值,则判定当前分块为静止分块;

若所述第一分块像素值与所述第二分块像素值中至少一个大于所述第一预设值,则分别确定当前分块以及所述匹配分块中的边缘像素点,并计算当前分块中的边缘像素点在所述匹配分块中的对应像素点也是边缘像素点的第一概率,以及,计算所述匹配分块中的边缘像素点在所述当前分块中的对应像素点也是边缘像素点的第二概率;

若所述第一概率以及所述第二概率均大于第二预设值,则判定当前分块为静止分块;

若所述第一概率与所述第二概率中至少一个小于所述第二预设值,则判定当前分块为运动分块;

当所述第一分块图遍历完毕以后,根据各分块为所述运动分块或所述静止分块的结果,生成运动检测图。

在一种实施例中,所述上一帧图像帧的网格数据包括多个顶点的顶点位置信息;

所述静止网格数据提取模块330可以包括如下子模块:

顶点判断子模块,用于根据各顶点的顶点位置信息,判断该顶点是否落入所述运动检测图中的运动分块内;

目标顶点处理子模块,用于将落入所述运动检测图中的运动分块内的顶点作为目标顶点,并在所述网格数据中删除所述目标顶点,以及删除引用了所述目标顶点的边;将剩下的网格数据作为对应于所述静止区域的静止网格数据。

在一种实施例中,所述顶点判断子模块具体用于:

根据所述运动检测图中各分块的大小以及各顶点位置信息,定位各顶点落入的所述运动检测图的目标分块;

若所述目标分块为运动分块,则判定所述顶点落入所述运动检测图中的运动分块内。

在一种实施例中,所述运动网格数据生成模块340可以包括如下子模块:

边界提取子模块,用于从所述静止网格数据中提取出所述运动区域与所述静止区域的边界数据;

边缘点集合确定子模块,用于根据当前图像帧的第一边缘图确定对应的边缘点集合;

运动边缘点集合筛选子模块,用于从所述边缘点集合中筛选出、落入以所述边界数据划分出的运动区域的边缘点,组成运动边缘点集合;

剖分子模块,用于基于所述运动边缘点集合以及所述边界数据进行多边形剖分,生成运动网格数据。

在一种实施例中,所述静止网格数据中包括多个有向多边形的有向边数据;所述边界提取子模块可以包括如下单元:

共享边判断单元,用于遍历各有向边数据,判断当前遍历到的有向边数据在有向边集合中是否存在共享边,所述共享边为两个有向多边形共享的边;若存在共享边,则在所述有向边集合中删除该共享边;若不存在共享边,则将该有向边数据加入至有向边集合中;

边界数据获得单元,用于当所有有向边数据遍历完成以后,将所述有向边集合中的有向边数据首尾相连,得到所述运动区域与静止区域的边界数据。

在一种实施例中,所述共享边判断单元具体用于:

假设当前遍历到的有向边数据为(t1,t2),判断有向边集合中是否包含有向边(t2,t1);

若所述有向边集合中包含有向边(t2,t1),则判定有向边数据为(t1,t2)在所述有向边集合中存在共享边;若所述有向边集合中不包含有向边(t2,t1),则判定有向边数据为(t1,t2)在所述有向边集合中不存在共享边。

在一种实施例中,所述边界包括由多个不相连的闭合多边形构成的边界;

所述运动边缘点集合筛选子模块具体用于:

采用非零环绕数规则判断所述边缘点集合中的各边缘点是否落入所述闭合多边形内;

将落入所述闭合多边形内的边缘点作为运动边缘点。

在一种实施例中,所述图像网格数据生成模块350具体用于:

将所述静止网格数据与所述运动网格数据拼合成所述当前图像帧的网格数据。

需要说明的是,本申请实施例所提供的上述一种对图像进行风格化处理的装置可执行本申请实施例一或实施例二所提供的一种对图像进行风格化处理的方法,具备执行方法相应的功能模块和有益效果。

实施例四

图20为本申请实施例四提供的一种电子设备的结构示意图,如图20所示,该电子设备包括处理器410、存储器420、输入装置430和输出装置440;电子设备中处理器410的数量可以是一个或多个,图20中以一个处理器410为例;电子设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图20中以通过总线连接为例。

存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请实施例中的方法对应的程序指令/模块。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的方法。

存储器420可主要包括存储程序区和存储数据区,其中,存储程序区

可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置430可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。

实施例五

本申请实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由服务器的处理器执行时用于执行实施例一中任一实施例中的方法。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

值得注意的是,上述装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。

注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。

相关技术
  • 一种对图像进行风格化处理的方法及装置
  • 一种将图像水彩风格化的方法和图像处理系统
技术分类

06120113210645