发明内容
本发明的目的在于针对现有技术的缺陷,提供一种高效高质量的视频特效的渲染方法,以提高特技效果渲染的效率和精确度。
本发明的技术方案如下:一种高效高质量的视频特效的渲染方法,包括如下步骤:
(1)将视频处理特效分为基于像素的特效和非基于像素的特效两种类型;
(2)判断当前特效的类型,对于基于像素的特效,依次对输入图像的第一场的部分和输入图像的第二场的部分分别进行相应的特效渲染;对于非基于像素的特效,转入步骤(3);
(3)判断输入的图像是否为基于场的图像,如果否,则以原始图像为输入图像,依次对输入图像进行第一场的相应特效渲染和第二场的相应特效渲染;如果是,转入步骤(4);
(4)对输入图像进行解交织处理,形成两个帧图像;分别对两个帧图像进行相应的特效渲染处理。
进一步,如上所述的高效高质量的视频特效的渲染方法,步骤(1)中,所述的基于像素的特效是指该特效的输出与输入图像的大小与位置均相同,而且对于给定的特技参数,如果将输入图像分割为许多子图像,那么将这些子图像分别应用该特效的结果图像再组合成一个图像的话,该组合后的图像与原始图像直接进行特效处理的结果是一样的。
进一步,如上所述的高效高质量的视频特效的渲染方法,步骤(2)中,对于基于像素的特效,对输入图像的具体特效渲染方法如下:
设输入图像的缓冲区指针为input_image_ptr,扫描线步长为input_image_stride,输出图像的缓冲区指针为output_image_ptr,扫描线步长为output_image_stride;
①对以input_image_ptr为缓冲区指针,input_image_stride×2为扫描线步长,且图像高度为原输入图像一半的子输入图像应用第一场的特效参数集进行特效处理;而输出图像则是以output_image_ptr为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原图像一半的子输出图像;
②对以input_image_ptr+input_image_stride为缓冲区指针,input_image_stride×2为扫描线步长,且图像高度为原输入图像一半的子输入图像应用第二场的特效参数集进行特效处理,而输出图像则是以output_image_ptr+output_image_stride为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原图像一半的子输出图像。
进一步,如上所述的高效高质量的视频特效的渲染方法,步骤(3)中,对于不是基于场的输入图像进行具体特效渲染方法如下:
设输入图像的缓冲区指针为input_image_ptr,扫描线步长为input_image_stride,输出图像的缓冲区指针为output_image_ptr,扫描线步长为output_image_stride;
1)以原始图像为输入图像,应用第一场的特效参数集进行第一场的特效渲染,而输出图像则是以output_image_ptr为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像;
2)以原始图像为输入图像,应用第二场的特效参数集进行第二场的特效渲染,而输出图像则是以output_image_ptr+output_image_stride为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像。
进一步,如上所述的高效高质量的视频特效的渲染方法,步骤(4)中,所述的解交织处理是将输入图像解成两个与原图像大小一致的帧图像,这两帧图像中的第一帧只含有原图像第一场的信息,第二帧只含有原图像第二场的信息。
更进一步,如上所述的高效高质量的视频特效的渲染方法,步骤(4)中,分别对两个帧图像进行相应的特效渲染处理的方法如下:
设输入图像的缓冲区指针为input_image_ptr,扫描线步长为input_image_stride,输出图像的缓冲区指针为output_image_ptr,扫描线步长为output_image_stride;
(a)以解交织出的第一帧图像为输入图像,应用第一场的特效参数集进行第一场的特效渲染,而输出图像则是以output_image_ptr为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像;
(b)以解交织出的第二帧图像为输入图像,应用第二场的特效参数集进行第二场的特效渲染,而输出图像则是以output_image_ptr+output_image_stride为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像。
本发明的有益效果如下:本发明对于非基于像素的特效实现了精确到场的特效渲染,而且对于基于帧的输入图像来说计算量与没有精确到场的情况是基本一样的,对于基于场的输入图像来说,只是增加了一个解交织的计算过程,而这对于大部分特效来说时间增加的相对量并不明显。因此,本发明在没有明显增加处理时间的情况下实现了精确到场的高质量特效渲染方式,提高了视频图像高质量特效渲染的效率。
具体实施方式
下面结合具体实施方式和附图对本发明进行详细描述。
本发明将所有视频渲染的特效分为两类:基于像素的特效(pixel-based特效)以及非基于像素的特效(non-pixel-based特效)。
Pixel-based特效的特点是该特效的输出与输入图像的大小与位置均相同,而且对给定的特技参数,假如将输入图像分割为许多子图像,那么将这些子图像分别应用该特效的结果图像再组合成一个图像的话,该图像与原始图像直接进行特效处理的结果是一样的。校色特效就属于典型的Pixel-based特效。对于pixel-based特效本发明在渲染方式上不做任何额外的要求。
non-pixel-based特效就是指所有不满足Pixel-based特效特点的特技。模糊,运动,变形等特技就属于典型的non-pixel-based特效。对于这类特效本发明有一个额外的要求,就是给定一个输入的帧图像,它必须能够以帧或者场的方式来渲染出结果图像。比如一个PAL制的输入帧图像,我们可以指定某个non-pixel-based特效只渲染出结果图像的第一场的部分,也就是编号为0,2,4,8...的扫描线,同样也可以只渲染出第二场的部分或者整个的帧。
以上面的设定为基础,本发明提出的特效渲染方案要区别对待pixel-based特效与non-pixel-based特效。首先假设当前时间线时间为t,则在t以及t+0.5这两个时间分别插值出两组特效参数集,这两组特效参数集分别为当前帧的第一场与第二场的参数集。
如图1所示,本发明所提供的高效高质量的视频特效的渲染方法,包括如下步骤:
(1)判断当前特效的类型,对于pixel-based特效,依次对输入图像的第一场的部分和输入图像的第二场的部分分别进行相应的特效渲染;对于non-pixel-based,转入步骤(2);
(2)判断输入的图像是否为基于场的图像,如果否,则以原始图像为输入图像,依次对输入图像进行第一场的相应特效渲染和第二场的相应特效渲染;如果是,转入步骤(3);
(3)对输入图像进行解交织处理,形成两个帧图像;分别对两个帧图像进行相应的特效渲染处理。
对于pixel-based特效,上述步骤(1)中按下面方法进行渲染:
假设输入图像的缓冲区指针为input_image_ptr,扫描线步长为input_image_stride,输出图像的缓冲区指针为output_image_ptr,扫描线步长为output_image_stride,为了叙述简明,我们假设图像的高度为偶数,而且位于屏幕正中间,且为PAL制式。
1)对以input_image_ptr为缓冲区指针,input_image_stride×2为扫描线步长,且图像高度为原图像一半的子输入图像应用第一场的特效参数集进行特效处理;而输出图像则是以output_image_ptr为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原图像一半的子输出图像。
2)对以input_image_ptr+input_image_stride为缓冲区指针,input_image_stride×2为扫描线步长,且图像高度为原图像一半的子输入图像应用第二场的特效参数集进行特效处理;而输出图像则是以output_image_ptr+output_image_stride为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原图像一半的子输出图像。
上述方法中应用第一场或第二场的特效参数集进行特效处理的具体方法为本领域的公知技术,针对各种具体的特效加以实现,对于本领域的技术人员来讲是显而易见的。
需要说明的是,上述方法不仅适用于PAL制式,而且同样适用于NTSC制式和高清制式。假如图像的高度为奇数,或者不位于屏幕正中间,则只要计算和确定出第一条扫描线在当前制式下是属于第一场还是第二场即可,这对于本领域的技术人员来说属于公知常识。
从以上的处理可以看出,对于pixel-based特效本发明实现了精确到场的特技渲染,但计算量与没有精确到场的情况是一样的,因为每一场实际上只渲染了一半图像。
对于non-pixel-based特效,本发明仍然要分为两种情况进行渲染:
如果输入图像为基于帧的图像,则直接进行下一步处理,否则对输入图像进行解交织处理,也就是将输入图像解成两个与原图像大小一致的帧图像,但这两帧中的第一帧只含有原图像第一场的信息,而第二帧只含有原图像第二场的信息。
对于基于帧的输入图像进行具体特效渲染方法如下:
设输入图像的缓冲区指针为input_image_ptr,扫描线步长为input_image_stride,输出图像的缓冲区指针为output_image_ptr,扫描线步长为output_image_stride;
①以原始图像为输入图像,应用第一场的特效参数集进行第一场的特效渲染,而输出图像则是以output_image_ptr为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像。
②以原始图像为输入图像,应用第二场的特效参数集进行第二场的特效渲染,而输出图像则是以output_image_ptr+output_image_stride为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像。
上面所述的原输出图像是指根据输入图像以及当前的特效参数集来直接计算出的输出图像。
对于基于场的输入图像,在解交织为两帧图像后,分别对两个帧图像进行相应的特效渲染处理的方法如下:
设输入图像的缓冲区指针为input_image_ptr,扫描线步长为input_image_stride,输出图像的缓冲区指针为output_image_ptr,扫描线步长为output_image_stride;
(a)以解交织出的第一帧图像为输入图像,应用第一场的特效参数集进行第一场的特效渲染,而输出图像则是以output_image_ptr为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像;
(b)以解交织出的第二帧图像为输入图像,应用第二场的特效参数集进行第二场的特效渲染,而输出图像则是以output_image_ptr+output_image_stride为缓冲区指针,output_image_stride×2为扫描线步长,且图像高度为原输出图像一半的子输出图像。
上面所述的原输出图像是指根据输入图像以及当前的特效参数集来直接计算出的输出图像。
从以上的处理可以看出,对于non-pixel-based特效本发明实现了精确到场的特效渲染,而且对于基于帧的输入图像来说计算量与没有精确到场的情况是基本一样的,而对于基于场的输入图像来说,只不过是多了一个解交织的过程,而这对于大部分特效来说时间增加的相对量并不大。因此,本发明在没有明显增加处理时间的情况下实现了精确到场的高质量特效渲染方式,提高了视频图像高质量特效渲染的效率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。