图像处理方法及装置
文献发布时间:2023-06-19 13:45:04
技术领域
本申请涉及图像处理技术领域,尤其涉及一种图像处理方法及装置。
背景技术
随着移动终端相关技术的快速发展,移动终端的功能越来越丰富和多样化。
用户在使用移动终端上的拍照应用拍摄照片时,可以通过设置不同的贴纸进行装饰,以增加照片的趣味性。目前的拍照应用上的贴纸主要是全屏贴纸,全屏贴纸可以根据智能手机的屏幕来显示贴纸的位置。但是随着用户对拍照应用的要求逐渐变高,全屏贴纸无法满足用户的个性化需求,人脸贴纸成为了新的需求。
发明人在对人脸贴纸的研究中发现:当人脸在屏幕上的显示位置发生变化时,人脸贴纸与人脸的贴合性较差。
发明内容
本申请实施例提供一种图像处理方法及装置,以解决人脸贴纸与人脸的贴合性较差的问题。
第一方面,本申请实施例提供一种图像处理方法,包括:
在界面上显示包含人脸的图像;
响应于接收到为图像添加人脸贴纸的操作,根据所述人脸贴纸的属性信息和当前显示图像上的人脸,确定所述人脸贴纸相对所述当前显示图像中人脸的显示参数;
根据所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示对应的当前贴纸图像。
在一种可能的实施方式中,所述根据所述人脸贴纸的属性信息和当前显示图像上的人脸,确定所述人脸贴纸相对所述当前显示图像中人脸的显示参数,包括:
对所述当前显示图像进行人脸识别,获取所述当前显示图像上的人脸的人脸检测信息;
根据所述属性信息和所述人脸检测信息,确定所述显示参数。
在一种可能的实施方式中,所述人脸检测信息包括所述人脸上的多个定位点的坐标和人脸偏移角度;所述根据所述属性信息和所述人脸检测信息,确定所述显示参数,包括:
根据所述属性信息,获取所述人脸贴纸上的人脸关键点和所述人脸贴纸的宽高;
根据所述人脸贴纸上的人脸关键点和所述多个定位点的坐标,确定所述人脸贴纸在所述当前显示图像上的显示位置;
根据所述人脸贴纸的宽高、所述当前显示图像的宽高和所述人脸偏移角度,确定所述人脸贴纸的缩放比例;
其中,所述显示参数包括所述显示位置和所述缩放比例。
在一种可能的实施方式中,所述根据所述人脸贴纸上的人脸关键点和所述多个定位点的坐标,确定所述人脸贴纸在所述当前显示图像上的显示位置,包括:
针对任意一个人脸关键点,在所述多个定位点中确定所述人脸关键点对应的定位点;
根据各所述人脸关键点对应的定位点的坐标,确定所述显示位置。
在一种可能的实施方式中,所述根据所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示对应的当前贴纸图像,包括
生成所述人脸贴纸对应的纹理,所述纹理用于承载所述人脸贴纸;
根据所述纹理和所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示所述当前贴纸图像。
在一种可能的实施方式中,所述对所述当前显示图像进行人脸识别,获取所述当前显示图像上的人脸的人脸检测信息,包括:
基于第一线程对所述当前显示图像进行人脸识别,获取所述人脸检测信息;
所述生成所述人脸贴纸对应的纹理,包括:
基于第二线程,生成所述人脸贴纸对应的纹理。
在一种可能的实施方式中,所述人脸贴纸中包括多个人脸贴纸图像;所述根据所述纹理和所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示所述当前贴纸图像,包括:
在所述多个人脸贴纸图像中确定当前显示的第一人脸贴纸图像;
获取所述第一人脸贴纸图像对应的人脸贴纸位图;
根据所述显示参数和所述纹理,在所述当前显示图像上叠加所述人脸贴纸位图,显示所述当前贴纸图像。
在一种可能的实施方式中,所述在所述多个人脸贴纸图像中确定当前显示的第一人脸贴纸图像,包括:
获取各所述人脸贴纸图像的索引;
根据各所述人脸贴纸图像的索引和人脸贴纸更新时间,在所述多个人脸贴纸图像中确定所述第一人脸贴纸图像,其中,所述人脸贴纸更新时间用于指示两张人脸贴纸图像之间的显示时间间隔。
在一种可能的实施方式中,所述获取所述第一人脸贴纸图像对应的人脸贴纸位图,包括:
若内存中包括所述人脸贴纸位图,则从所述内存中获取所述人脸贴纸位图;
否则,对所述第一人脸贴纸图像进行解码处理,获取所述人脸贴纸位图。
在一种可能的实施方式中,在所述对所述第一人脸贴纸图像进行解码处理,获取所述人脸贴纸位图之后,所述方法还包括:
将所述人脸贴纸位图缓存至所述内存中。
第二方面,本申请实施例提供一种图像处理装置,包括:
显示模块,用于在界面上显示包含人脸的图像;
第一处理模块,用于响应于接收到为图像添加人脸贴纸的操作,根据所述人脸贴纸的属性信息和当前显示图像上的人脸,确定所述人脸贴纸相对所述当前显示图像中人脸的显示参数;
第二处理模块,用于根据所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示对应的当前贴纸图像。
在一种可能的实施方式中,所述第一处理模块具体用于:
对所述当前显示图像进行人脸识别,获取所述当前显示图像上的人脸的人脸检测信息;
根据所述属性信息和所述人脸检测信息,确定所述显示参数。
在一种可能的实施方式中,所述人脸检测信息包括所述人脸上的多个定位点的坐标和人脸偏移角度;所述第一处理模块具体用于:
根据所述属性信息,获取所述人脸贴纸上的人脸关键点和所述人脸贴纸的宽高;
根据所述人脸贴纸上的人脸关键点和所述多个定位点的坐标,确定所述人脸贴纸在所述当前显示图像上的显示位置;
根据所述人脸贴纸的宽高、所述当前显示图像的宽高和所述人脸偏移角度,确定所述人脸贴纸的缩放比例;
其中,所述显示参数包括所述显示位置和所述缩放比例。
在一种可能的实施方式中,所述第一处理模块具体用于:
针对任意一个人脸关键点,在所述多个定位点中确定所述人脸关键点对应的定位点;
根据各所述人脸关键点对应的定位点的坐标,确定所述显示位置。
在一种可能的实施方式中,所述第二处理模块具体用于:
生成所述人脸贴纸对应的纹理,所述纹理用于承载所述人脸贴纸;
根据所述纹理和所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示所述当前贴纸图像。
在一种可能的实施方式中,所述第一处理模块具体用于:
基于第一线程对所述当前显示图像进行人脸识别,获取所述人脸检测信息;
所述第二处理模块具体用于:
基于第二线程,生成所述人脸贴纸对应的纹理。
在一种可能的实施方式中,所述人脸贴纸中包括多个人脸贴纸图像;所述第二处理模块具体用于:
在所述多个人脸贴纸图像中确定当前显示的第一人脸贴纸图像;
获取所述第一人脸贴纸图像对应的人脸贴纸位图;
根据所述显示参数和所述纹理,在所述当前显示图像上叠加所述人脸贴纸位图,显示所述当前贴纸图像。
在一种可能的实施方式中,所述第二处理模块具体用于:
获取各所述人脸贴纸图像的索引;
根据各所述人脸贴纸图像的索引和人脸贴纸更新时间,在所述多个人脸贴纸图像中确定所述第一人脸贴纸图像,其中,所述人脸贴纸更新时间用于指示两张人脸贴纸图像之间的显示时间间隔。
在一种可能的实施方式中,所述第二处理模块具体用于:
若内存中包括所述人脸贴纸位图,则从所述内存中获取所述人脸贴纸位图;
否则,对所述第一人脸贴纸图像进行解码处理,获取所述人脸贴纸位图。
在一种可能的实施方式中,在所述对所述第一人脸贴纸图像进行解码处理,获取所述人脸贴纸位图之后,所述第二处理模块还用于:
将所述人脸贴纸位图缓存至所述内存中。
第三方面,本申请实施例提供一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面任一项所述的图像处理方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面任一项所述的图像处理方法。
第五方面,本申请实施例提供一种计算机程序产品,所述计算机程序产品包括计算机程序;所述计算机程序被执行时实现第一方面任一项所述的图像处理方法。
本申请实施例提供的图像处理方法及装置,首先在界面上显示包含人脸的图像,响应于接收到为图像添加人脸贴纸的操作后,根据人脸贴纸的属性信息和当前显示图像上的人脸,确定人脸贴纸相对当前显示图像中人脸的显示参数,并根据该显示参数在当前显示图像上叠加人脸贴纸,显示对应的当前贴纸图像。本申请实施例中的方案,每次均是先确定人脸贴纸相对当前显示图像中人脸的显示参数,然后进行人脸贴纸的叠加显示的,而当前显示图像是实时获取的,因此,能够实现人脸贴纸与人脸的较好的贴合。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的应用场景的示意图;
图2为本申请实施例提供的图像处理方法的流程示意图;
图3为本申请实施例提供的图像处理方法的模块示意图;
图4为本申请实施例提供的图像处理的框架流程示意图;
图5为本申请实施例提供的人脸示意图;
图6为本申请实施例提供的获取变换矩阵的示意图一;
图7为本申请实施例提供的获取变换矩阵的示意图二;
图8为本申请实施例提供的人脸贴纸图像的示意图;
图9为本申请实施例提供的图像处理方法的流程示意图;
图10为本申请实施例提供的贴纸图像;
图11为本申请实施例提供的图像处理装置的结构示意图;
图12为本申请实施例提供的电子设备的硬件结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
首先对本申请的应用场景进行介绍。
图1为本申请实施例提供的应用场景的示意图,如图1所示,用户可以通过移动终端上的拍照应用进行拍照。在打开拍照应用后,移动终端上的摄像头启动,显示拍摄画面,如图1中的页面11示意。
为了提高拍照应用的趣味性,拍照应用上会提供各种不同的贴纸。例如在页面11上,用户选择了一个贴纸,之后贴纸会叠加显示在摄像头获取的画面上,如图1中的页面12示意。
其中,贴纸可以包括全屏贴纸,也可以包括人脸贴纸。全屏贴纸只与屏幕的画面相关,例如固定位于画面的左上方。而人脸贴纸是与人脸的位置相关的,由于摄像头在获取画面时,摄像头可能移动,画面中的人也可能移动,因此人脸贴纸所在的位置也是会发生变化的。人脸在屏幕画面上的显示位置发生变化时,人脸贴纸与人脸的贴合性较差。
基于上述技术问题,本申请实施例提供一种图像处理方法,以提高人脸贴纸和人脸的贴合性。下面将结合附图对本申请的方案进行介绍。
图2为本申请实施例提供的图像处理方法的流程示意图,如图2所示,该方法包括:
S21,在界面上显示包含人脸的图像。
本申请实施例中的执行主体可以为终端设备,例如手机、平板等等。在终端设备上可以安装拍照应用,当拍照应用打开后,终端设备的摄像头启动,能够获取图像画面并进行预览。其中,预览的图像显示在终端设备的界面上。
本申请实施例中针对的是人脸贴纸与人脸的贴合,因此,预览的图像为包含人脸的图像,人脸的数量可以为一个或多个。当摄像头打开后,在终端设备的界面上就可以显示摄像头获取的包含人脸的图像。
S22,响应于接收到为图像添加人脸贴纸的操作,根据人脸贴纸的属性信息和当前显示图像上的人脸,确定人脸贴纸相对当前显示图像中人脸的显示参数。
当用户希望添加人脸贴纸时,可以通过操作终端设备选择想要添加的人脸贴纸。其中,各种贴纸可以预先设计好,用户只需要点击其中的某个贴纸即可。
在获取到为图像添加人脸贴纸的操作之后,终端设备可以获取人脸贴纸的属性信息,该属性信息可以包括人脸贴纸的中心点位、原始宽高、前后切换间隔等等。
然后,终端设备根据当前显示图像上的人脸,以及人脸贴纸的属性信息,确定人脸贴纸相对当前显示图像中人脸的显示参数。其中,该显示参数例如可以包括人脸贴纸在当前显示图像上的位置,人脸贴纸的缩放比例等等。
S23,根据显示参数,在当前显示图像上叠加人脸贴纸,显示对应的当前贴纸图像。
显示参数,例如人脸贴纸在当前显示图像上的位置、人脸贴纸的缩放比例等等,均需要结合图像中人脸的位置以及大小来确定。因此,本申请实施例中,需要实时获取当前显示图像,并确定人脸贴纸相对当前显示图像中人脸的显示参数,以在当前显示图像中叠加该人脸贴纸。当前显示图像是时刻发生变化的,例如当终端设备的摄像头移动或者画面中的人移动时,当前显示图像均会发生变化,因此即使人脸贴纸不变,人脸贴纸相对于当前显示图像上的人脸的的显示参数也会发生变化。
在确定显示参数后,可以在当前显示图像上叠加人脸贴纸,从而显示对应的当前贴纸图像。
本申请实施例提供的图像处理方法,首先在界面上显示包含人脸的图像,响应于接收到为图像添加人脸贴纸的操作后,根据人脸贴纸的属性信息和当前显示图像上的人脸,确定人脸贴纸相对当前显示图像中人脸的显示参数,并根据该显示参数在当前显示图像上叠加人脸贴纸,显示对应的当前贴纸图像。本申请实施例中的方案,每次均是先确定人脸贴纸相对当前显示图像中人脸的显示参数,然后进行人脸贴纸的叠加显示的,而当前显示图像是实时获取的,因此,能够实现人脸贴纸与人脸的较好的贴合。
下面结合附图对本申请的方案进行详细介绍。
图3为本申请实施例提供的图像处理方法的模块示意图,如图3所示,包括组合配置解析模块、贴纸缓存模块、纹理加载模块、人脸检测模块、显示定位模块和渲染显示模块。
组合配置解析模块用于对贴纸配置文件进行解析。贴纸配置文件中包括素材和配置信息,其中,素材即为人脸贴纸图像,一个人脸贴纸可以包括一张或多张人脸贴纸图像。配置信息即为人脸贴纸的属性信息,例如可以包括人脸贴纸的宽高,人脸贴纸中包括的人脸贴纸图像的数目,人脸贴纸的中心点位,人脸贴纸的水平和垂直方向偏移量等等。组合配置解析模型对贴纸配置文件进行解析后,将得到的人脸贴纸图像发送给纹理加载模块,并将人脸贴纸的属性信息发送给显示定位模块。
贴纸缓存模块用于进行人脸贴纸的缓存处理,具体包括对人脸贴纸图像进行解码,生成对应的人脸贴纸位图,然后存储位图以及存储位图的路径。纹理加载模块在获取人脸贴纸图像后,可以根据人脸贴纸图像生成对应的纹理。当需要获取人脸贴纸位图时,纹理加载模块可以从贴纸缓存模块中获取人脸贴纸位图。
人脸检测模块用于对当前显示图像进行人脸检测,得到人脸检测信息,并将人脸检测信息发送给显示定位模块。显示定位模块根据人脸贴纸的属性信息和人脸检测信息,确定人脸贴纸在当前显示图像上的显示参数。最后,渲染显示模块根据显示参数和生成的纹理,在当前显示图像上叠加人脸贴纸,显示当前贴纸图像。
下面将分别对上述几个模块进行介绍。
图4为本申请实施例提供的图像处理的框架流程示意图,如图4所示,主要包括应用框架、人工智能软件开发工具包(Artificial Intelligence Software DevelopmentKit,AI SDK)框架和特效框架。
在应用框架下,主要包括界面显示和贴纸选择。界面显示是指的当打开拍照应用后的界面显示。界面显示后,在AI SDK框架下会初始化视窗,进一步的,特效框架下也会进行特效的初始化,并创建特效对象,渲染环境。其中,特效对象指的是各种贴纸,本申请实施例中,主要针对的是人脸贴纸。特效的初始化是指各人脸特征的初始化,在界面上会显示各个配置好的人脸贴纸供用户进行选择。
贴纸选择是指用户在拍照应用选择想要的人脸贴纸的过程。在应用层面进行贴纸选择后,终端设备响应于用户的选择指令,在AI SDK框架下会设置贴纸,并对贴纸的类型进行判断,判断贴纸是人脸贴纸还是全屏贴纸。若为人脸贴纸,则在特效框架中设置该人脸贴纸,并解析人脸贴纸的贴纸配置文件。在解析完成后,会进行贴纸的加载和人脸检测。可选的,可以基于第一线程进行人脸检测,即基于第一线程对当前显示图像进行人脸识别,获取人脸检测信息;然后基于第二线程进行贴纸加载,即基于第二线程生成人脸贴纸对应的纹理。即人脸检测和贴纸加载通过两个不同的线程完成,提高图像处理的速度。
当人脸检测和贴纸加载均完成后,AI SDK框架下进行帧渲染。在特效框架下,首先进行特效处理,特效绘制、显示参数的计算以及混合绘制,最终显示当前贴纸图像。
下面将对上述各个部分的内容进行详细介绍。
在接收到为图像添加人脸贴纸的操作后,终端设备需要根据人脸贴纸的属性信息和当前显示图像上的人脸,确定相应的显示参数。
具体的,人脸检测模块首先获取当前显示图像,然后对当前显示图像进行人脸识别,确定当前显示图像上的人脸,并获取当前显示图像上的人脸的人脸检测信息。图5为本申请实施例提供的人脸示意图,如图5所示,通过对图像进行人脸识别,能够获取人脸上的多个定位点和人脸偏移角度。
其中,各个定位点有相应的编号,不同的定位点对应于人脸的不同部位,各个定位点可用于后续指示人脸贴纸所在的位置。例如,有的定位点为人脸上的鼻子相关的定位点,若人脸贴纸需要叠加在鼻子上,则需要根据这些与鼻子相关的定位点确定人脸贴纸的叠加位置。
人脸偏移角度指的是人脸倾斜或者偏转的角度。在摄像头预览的画面中,人脸可能并不是正对着摄像头的,例如可能左转或者右转,可能歪头等等。当人脸倾斜或者偏转时,相对于未倾斜或者偏转的人脸,人脸贴纸的显示参数也会发生变化。当前显示图像上的人脸检测信息包括人脸上的多个定位点的坐标和人脸偏移角度。
当摄像头获取预览图像后,预览图像即为当前显示图像。人脸检测模块获取摄像头输入的当前显示图像,然后通过人脸检测算法,输出当前显示图像上的人脸检测信息,包括当前显示图像上的多个定位点的坐标和人脸偏移角度。其中,多个定位点的数目以及各个定位点的位置,可以依据不同的人脸检测算法确定。
例如在图5中,通过人脸检测算法获取到人脸上的106个定位点的坐标和人脸倾斜角度。这106个定位点的坐标包括x轴的横坐标和y轴的纵坐标,人脸倾斜角度指的是人脸绕x轴、y轴以及z轴这三个坐标轴的旋转角度。
下面介绍组合配置解析模块获取人脸贴纸的属性信息的方案。
各个贴纸都是预先设置并封装好的,当用户点击选择某个人脸贴纸时,根据用户的操作,终端设备会对该人脸贴纸对应的贴纸配置文件进行解析,生成包含贴纸组合配置信息对象,该贴纸组合配置信息对象为一个类对象。
贴纸组合配置信息对象可以通过xml文件以json数据格式进行存储,其中包括人脸贴纸和属性信息。人脸贴纸为图片形式存在的贴纸素材,而属性信息即为人脸贴纸的属性信息。属性信息例如可以包括贴纸类型,贴纸中心点位,贴纸水平和垂直方向偏移量,贴纸缩放比例,贴纸开始及结束点位,贴纸原始宽高,贴纸图序列数量,贴纸前后图切换时间间隔等信息。
选择动效贴纸时,通过设置贴纸根路径,找到路径下的组合配置xml文件,以文件流方式读取配置文件,然后将文件字符串解析转换为JSON数组,遍历json数组贴纸读取参数信息生成对应的贴纸对象。
在获取当前显示图像上的人脸检测信息和人脸贴纸的属性信息后,可以根据人脸贴纸的属性信息和人脸检测信息,确定显示参数,其中,显示参数包括人脸贴纸在当前显示图像上的显示位置和人脸贴纸的缩放比例。
具体的,首先根据人脸贴纸的属性信息,获取人脸贴纸上的人脸关键点和人脸贴纸的宽高。然后,根据人脸贴纸上的人脸关键点和多个定位点的坐标,确定人脸贴纸在当前显示图像上的显示位置。根据人脸贴纸的宽高、当前显示图像的宽高和人脸偏移角度,确定人脸贴纸的缩放比例。
在获取人脸贴纸上的人脸关键点后,需要在多个定位点中确定该人脸关键点对应的定位点。例如在图5中,人脸关键点为索引为43的关键点,则在多个定位点中确定索引为43的关键点对应的定位点。
人脸贴纸上的人脸关键点包括一个或多个,若人脸关键点有多个,则可以根据各个人脸关键点对应的定位点的坐标,确定显示位置。例如,若人脸贴纸上的人脸关键点为1个,则可以在多个定位点中确定该人脸关键点对应的1个定位点,根据这1个定位点在当前显示图像上的位置,确定人脸贴纸在当前显示图像上的显示位置。其中,当人脸贴纸根据显示位置叠加在当前显示图像上时,人脸贴纸上的这1个人脸关键点与对应的这1个定位点的位置应当是几乎重合的。
若人脸关键点有多个,则可以在多个定位点中确定这多个人脸关键点对应的定位点。然后,根据这多个人脸关键点的平均坐标和对应的多个定位点的平均坐标,确定人脸贴纸在当前显示图像上的显示位置。以人脸关键点包括点A(x1,y1)和点B(x2,y2)为例,点A(x1,y1)对应的定位点为点C(x3,y3),点B(x2,y2)对应的定位点为点D(x4,y4)。
则,点A(x1,y1)和点B(x2,y2)的平均坐标值为E((x1+x2)/2,(y1+y2)/2),点C(x3,y3)和点D(x4,y4)的平均坐标值为F((x3+x3)/2,(y4+y4)/2)。然后,根据点E和点F的坐标,确定人脸贴纸当前显示图像上的显示位置。其中,当人脸贴纸根据显示位置叠加在当前显示图像上时,人脸贴纸上的点E与对应的点F的位置应当是几乎重合的。
图6为本申请实施例提供的获取变换矩阵的示意图一,如图6所示,根据贴纸配置开始和结束点对应人脸关键点索引,获取关键点位置(x,y)坐标,计算贴纸宽度和高度,同时乘以缩放系数。由于各个关键点有一定的水平和垂直偏移量,因此,需要根据水平和垂直偏移量,获取关键点位置对应的开始点坐标(x0,y0)和结束点坐标(x1,y1)。贴纸宽度和高度进行归一化处理,获取标准坐标系中的长度和高度。获取贴纸配置水平和垂直方向偏移量,并对偏移量进行归一化处理,获得在标准坐标系中的偏移值,对中心点位置进行偏移修正。根据贴纸修正中心点和宽高在标准坐标系中的位置和大小,可以获得贴纸纹理的对应顶点坐标。
图7为本申请实施例提供的获取变换矩阵的示意图二,如图7所示,防止贴纸变化造成的变形,模型矩阵平移操作首先将z轴平移到贴纸中心点。根据检测得到的人脸倾斜翻转3自由度,进行贴纸模型矩阵角度变换,在模型矩阵上分别在z,y,x轴上施加角度偏转计算。施加角度偏转之后,将z轴平移回原来原来的屏幕中心。最后将模型、投影、视图矩阵叠加获得总变换矩阵。
总变换矩阵的计算公式如下:
MVPMatrix=ProjectionMatrix*ViewMatrix*ModelMatrix (1)
其中,MVPMatrix为总变换矩阵,ProjectionMatrix为投影矩阵,ViewMatrix为视图矩阵,ModelMatrix为贴纸模型矩阵。下面分别介绍投影矩阵、视图矩阵和贴纸模型矩阵的计算方法。
对于投影矩阵的计算方式而言,可以首先获取终端设备的摄像头拍摄的图像的宽高比如下式(2):
mRatio=width/height (2)
其中,width为图像的宽,height为图像的高。
在获取图像的宽高比后,可以获取投影矩阵,投影矩阵的表达式如下式(3)示意:
其中,投影矩阵的编程实现方式如下:
Matrix.frustumM(mProjectionMatrix,0,-mRatio,mRatio,-1.0f,1.0f,3.0f,9.0f)。
对于视图矩阵的计算方式而言,视图矩阵通过编程实现方式如下:
Matrix.setLookAtM(mViewMatrix,0,0,0,6.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f)。
根据上述方式得到的视图矩阵表示如下式(4):
对于贴纸模型矩阵的计算方式而言,第一步,首先将贴纸模型矩阵初始化,初始化的过程通过编程实现如下:
Matrix.setIdentityM(mModelMatrix,0)。
贴纸模型矩阵的初始值如下式(5):
第二步,将贴纸模型Z轴平移到贴纸中心点,其中,ndcCenterX,ndcCenterY为归一化后计算的贴纸中心点在以屏幕中心点为原点的坐标系位置。第二步通过编程实现如下:
Matrix.translateM(mModelMatrix,0,ndcCenterX,ndcCenterY,0)。
通过上述步骤得到的贴纸模型矩阵如下式(6):
第三步,将贴纸模型根据人脸姿态角度进行变换。
具体的,首先将贴纸模型矩阵绕X轴偏移角度进行变换,该过程的编程实现方式如下:
Matrix.rotateM(mModelMatrix,0,pitchAngle,1,0,0)。
变换公式如下式(7):
然后,将上式得到的矩阵绕Y轴偏移角度进行变换,该过程的编程实现方式如下:
mModelMatrix=Matrix.rotateM(mModelMatrix,0,yawAngle,0,1,0);
变换公式如下式(8):
然后,将上式得到的矩阵绕Z轴偏移角度进行变换,该过程的编程实现方式如下:
Matrix.rotateM(mModelMatrix,0,rollAngle,0,0,1)。
变换公式如下式(9):
其中,rollAngle,yawAngle,pitchAngle分别是人脸绕Z轴、Y轴、X轴偏移角度。
第四步,将贴纸模型Z轴平移回屏幕中心
该过程的编程实现方式如下:
Matrix.translateM(mModelMatrix,0,-ndcCenterX,-ndcCenterY,0)。
变换公式如下式(10):
通过上述方式,即可得到总变换矩阵,从而基于总变换矩阵获取显示参数。
在获取显示参数后,可以根据显示参数在当前显示图像上叠加人脸贴纸,显示当前贴纸图像。
具体的,首先需要生成人脸贴纸对应的纹理,用于承载人脸贴纸,根据根据生成的纹理和显示参数,在当前显示图像上叠加该人脸贴纸,显示对应的当前贴纸图像。
通常,人脸贴纸中包括多个人脸贴纸图像,这多个人脸贴纸图像需要动态切换,从而显示渲染后的动态效果。因此,首先需要在多个人脸贴纸图像中确定当前显示的第一人脸贴纸图像,第一人脸贴纸图像为多个人脸贴纸图像中的一个。
人脸贴纸图像的切换可以根据人脸贴纸图像的索引来实现。首先,需要获取各人脸贴纸图像的索引,然后,根据各人脸贴纸图像的索引和人脸贴纸更新时间,在多个人脸贴纸图像中确定第一人脸贴纸图像,其中,人脸贴纸更新时间用于指示两张人脸贴纸图像之间的显示时间间隔。
图8为本申请实施例提供的人脸贴纸图像的示意图,如图8所示,例如,某人脸贴纸中包括6张人脸贴纸图像,这6张人脸贴纸图像的索引依序为001、002、003、004、005和006。索引确定了这6张人脸贴纸图像的更新顺序。当初始显示时,第一人脸贴纸图像确定为索引为001的人脸贴纸图像,后续进行人脸贴纸切换时,依次切换第一人脸贴纸图像为索引为002的人脸贴纸图像、索引为003的人脸贴纸图像,等等,直到第一人脸贴纸图像为006的人脸贴纸图像后,下一次的第一人脸图像仍然为索引为001的人脸贴纸图像。其中,任意人脸贴纸图像对应的显示时间由人脸贴纸更新时间确定。例如当人脸贴纸更新时间为1秒时,则每隔1秒进行第一人脸贴纸图像的更新。
在确定了第一人脸贴纸图像之后,需要获取第一人脸贴纸图像对应的人脸贴纸位图,其中,人脸贴纸位图的对人脸贴纸图像进行解码处理得到的。通过对人脸贴纸图像进行解码处理得到人脸贴纸位图,才能承载在纹理上进行渲染和显示。
一种可能的实现方式是,每次获取第一人脸贴纸图像对应的人脸贴纸位图时,均对第一人脸贴纸图像进行解码处理,生成对应的人脸贴纸位图。
另一种可能的实现方式是,仅在每个人脸贴纸图像第一次进行渲染显示之前,对人脸贴纸图像进行解码处理,生成对应的人脸贴纸位图,然后缓存在内存中。后续在该人脸贴纸图像需要进行渲染显示时,之间从内存中获取对应的人脸贴纸位图即可。
因此,在获取第一人脸贴纸图像对应的人脸贴纸位图时,可以首先判断内存中是否包括第一人脸贴纸图像对应的人脸贴纸位图。若内存中包括第一人脸贴纸图像对应的人脸贴纸位图,则直接从内存中获取人脸贴纸位图即可;若内存中不包括第一人脸贴纸图像对应的人脸贴纸位图,则需要对第一人脸贴纸图像进行解码处理,生成对应的人脸贴纸位图。进一步的,在生成人脸贴纸位图后,将人脸贴纸位图缓存至内存中。
图9为本申请实施例提供的图像处理方法的流程示意图,如图9所示,包括:
S901,读取贴纸配置文件。
贴纸配置文件中包括素材和配置信息,素材即为人脸贴纸图像,一个人脸贴纸可以包括一张或多张人脸贴纸图像。配置信息即为人脸贴纸的属性信息。
S902,读取当前显示图像。
当前显示图像即为通过摄像头获取的当前预览的图像,本申请实施例中,当前显示图像上包括人脸。
S903,人脸检测。
通过对当前显示图像进行人脸检测,获取人脸检测信息,人脸检测信息包括人脸上的多个定位点的坐标和人脸偏移角度。
S904,判断是否超过刷新时间,若是,则执行S905。
刷新时间即为两张人脸贴纸图像之间的显示时间间隔,超过该间隔时,则需要叠加下一张人脸贴纸图像在当前显示图像上。
S905,获取人脸贴纸图像。
S906,判断贴纸缓存是否存在,若是,则执行S908,若否,则执行S907。
当需要叠加人脸贴纸图像时,首先获取该人脸贴纸图像,然后获取该人脸贴纸图像对应的人脸贴纸位图。
S907,解码贴纸素材。
当缓存中没有该人脸贴纸图像对应的人脸贴纸位图时,需要对该人脸贴纸图像进行解码,生成对应的人脸贴纸位图。
S908,生成贴纸纹理。
在获取人脸贴纸位图后,可以生成对应的贴纸纹理,用于承载人脸贴纸位图显示。
S909,计算显示参数。
显示参数包括显示位置和缩放比例,用于指示人脸贴纸如何叠加在当前显示图像上。具体的,可以通过上述实施例中的方式计算人脸贴纸变化矩阵来获取显示参数。
S910,绘制人脸贴纸。
具体的,根据显示参数和纹理,在当前显示图像上叠加人脸贴纸位图,显示当前贴纸图像。
S911,判断贴纸是否遍历绘制,若是,则执行S904。
若人脸贴纸是遍历绘制的,即循环显示的,则执行S904,重复上述步骤即可。
在上述实施例中介绍了人脸贴纸与当前显示图像之间的叠加显示的方案。图10示例了一种人脸贴纸图像,图10为本申请实施例提供的贴纸图像,如图10所示,图像100中包括两个人脸,两个人脸上均叠加显示了人脸贴纸。从图10中可以看到,由于当前显示图像中的两个人的人脸大小略有不同,且人脸的偏移方向不同,因此相应的人脸贴纸(眼镜)进行了不同比例的缩放和偏移,以适应人脸的大小。
本申请实施例提供的图像处理方法,首先在界面上显示包含人脸的图像,响应于接收到为图像添加人脸贴纸的操作后,根据人脸贴纸的属性信息和当前显示图像上的人脸,确定人脸贴纸相对当前显示图像中人脸的显示参数,并根据该显示参数在当前显示图像上叠加人脸贴纸,显示对应的当前贴纸图像。本申请实施例中的方案,每次均是先确定人脸贴纸相对当前显示图像中人脸的显示参数,然后进行人脸贴纸的叠加显示的,而当前显示图像是实时获取的,因此,能够实现人脸贴纸与人脸的较好的贴合。
图11为本申请实施例提供的图像处理装置的结构示意图,如图11所示,包括:
显示模块111,用于在界面上显示包含人脸的图像;
第一处理模块112,用于响应于接收到为图像添加人脸贴纸的操作,根据所述人脸贴纸的属性信息和当前显示图像上的人脸,确定所述人脸贴纸相对所述当前显示图像中人脸的显示参数;
第二处理模块113,用于根据所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示对应的当前贴纸图像。
在一种可能的实施方式中,所述第一处理模块112具体用于:
对所述当前显示图像进行人脸识别,获取所述当前显示图像上的人脸的人脸检测信息;
根据所述属性信息和所述人脸检测信息,确定所述显示参数。
在一种可能的实施方式中,所述人脸检测信息包括所述人脸上的多个定位点的坐标和人脸偏移角度;所述第一处理模块112具体用于:
根据所述属性信息,获取所述人脸贴纸上的人脸关键点和所述人脸贴纸的宽高;
根据所述人脸贴纸上的人脸关键点和所述多个定位点的坐标,确定所述人脸贴纸在所述当前显示图像上的显示位置;
根据所述人脸贴纸的宽高、所述当前显示图像的宽高和所述人脸偏移角度,确定所述人脸贴纸的缩放比例;
其中,所述显示参数包括所述显示位置和所述缩放比例。
在一种可能的实施方式中,所述第一处理模块112具体用于:
针对任意一个人脸关键点,在所述多个定位点中确定所述人脸关键点对应的定位点;
根据各所述人脸关键点对应的定位点的坐标,确定所述显示位置。
在一种可能的实施方式中,所述第二处理模块113具体用于:
生成所述人脸贴纸对应的纹理,所述纹理用于承载所述人脸贴纸;
根据所述纹理和所述显示参数,在所述当前显示图像上叠加所述人脸贴纸,显示所述当前贴纸图像。
在一种可能的实施方式中,所述第一处理模块112具体用于:
基于第一线程对所述当前显示图像进行人脸识别,获取所述人脸检测信息;
所述第二处理模块113具体用于:
基于第二线程,生成所述人脸贴纸对应的纹理。
在一种可能的实施方式中,所述人脸贴纸中包括多个人脸贴纸图像;所述第二处理模块113具体用于:
在所述多个人脸贴纸图像中确定当前显示的第一人脸贴纸图像;
获取所述第一人脸贴纸图像对应的人脸贴纸位图;
根据所述显示参数和所述纹理,在所述当前显示图像上叠加所述人脸贴纸位图,显示所述当前贴纸图像。
在一种可能的实施方式中,所述第二处理模块113具体用于:
获取各所述人脸贴纸图像的索引;
根据各所述人脸贴纸图像的索引和人脸贴纸更新时间,在所述多个人脸贴纸图像中确定所述第一人脸贴纸图像,其中,所述人脸贴纸更新时间用于指示两张人脸贴纸图像之间的显示时间间隔。
在一种可能的实施方式中,所述第二处理模块113具体用于:
若内存中包括所述人脸贴纸位图,则从所述内存中获取所述人脸贴纸位图;
否则,对所述第一人脸贴纸图像进行解码处理,获取所述人脸贴纸位图。
在一种可能的实施方式中,在所述对所述第一人脸贴纸图像进行解码处理,获取所述人脸贴纸位图之后,所述第二处理模块113还用于:
将所述人脸贴纸位图缓存至所述内存中。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图12为本申请实施例提供的电子设备的硬件结构示意图,如图12所示,本实施例的电子设备包括:处理器121以及存储器122;其中
存储器122,用于存储计算机执行指令;
处理器121,用于执行存储器存储的计算机执行指令,以实现上述实施例中图像处理方法所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,存储器122既可以是独立的,也可以跟处理器121集成在一起。
当存储器122独立设置时,该对象选择设备还包括总线123,用于连接所述存储器122和处理器121。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上电子设备所执行的图像处理方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
- 信息处理装置、信息处理方法、控制装置、控制系统、控制方法、断层合成图像捕获装置、X射线成像装置、图像处理装置、图像处理系统、图像处理方法和计算机程序
- 图像处理装置和图像处理方法、图像处理方法的程序、以及具有记录在其上的图像处理方法的程序的记录介质