本发明涉及图像数据处理领域,尤其涉及一种图片处理方法、终端和计算机可读存储介质。
背景技术:
在实际中,有些图片在某些情况下会出现肩膀缺失的情况,例如,在证件照重排版中出现肩膀缺失的情况。
实际中,对于不同用途的证件照,其尺寸要求一般不同。证件照常见的尺寸包括1寸,大1寸,2寸等等。而证件照重排版是指从一种证件照的尺寸转换到另一种证件照的尺寸。事实上当从较窄的尺寸转化到较宽的尺寸时,一个常见问题是照片中人的肩膀缺失。图1是一个原始尺寸的证件照,图2是图1中的人体区域在比原始尺寸大的新尺寸下显示的样子,可以明显看出肩膀缺失的问题,因为肩膀部分的图像在图1中是没有的,图2的中人体区域所占的面积太小,影响美观。为了避免这种情况,现有技术中,一个简单的处理方法是将人体区域水平拉升,使得人体区域能够完全占满水平方向的图像区域,如图3所示。但是这种简单处理方法使得人脸变形很厉害,很难被用户接受。
技术实现要素:
本发明实施例的主要目的在于提供一种图片处理方法、终端和计算机可读存储介质,能够自动、智能地对图片中人的肩部进行补全。
为实现上述目的,本发明实施例第一方面提供一种图片处理方法,该方法包括:
确定原始图片中的人体区域的当前肩部轮廓,对所述人体区域的左、右两肩的当前肩部轮廓分别按照如下的步骤进行肩部补全:
基于一边肩部的所述当前肩部轮廓以及所述人体区域中人脸的尺寸,预测所述一边肩部上的待补全肩部轮廓;
根据所述待补全肩部轮廓以及所述人体区域确定所述一边肩部的待补全肩部区域;
根据所述人体区域中与所述待补全肩部区域临近的区域的颜色对所述待补全肩部区域进行颜色填充。
为实现上述目的,本发明实施例第二方面提供一种终端,该终端包括:处理器、存储器及通信总线;
所述通信总线用于实现所述处理器和所述存储器之间的连接通信;
所述存储器用于存储一个或多个程序,所述处理器用于执行所述存储器中存储的一个或者多个程序,以实现如上所述的图片处理方法的步骤。
为实现上述目的,本发明实施例第三方面提供一种计算机可读存储介质,该计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上所述的图片处理方法的步骤。
本发明实施例提供了一种图片处理方法、终端和计算机可读存储介质,通过本发明实施例可在确定原始图片中的人体区域的当前肩部轮廓后,对人体区域的左、右两肩的当前肩部轮廓分别按照后叙的步骤进行肩部补全:基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部上的待补全肩部轮廓;根据待补全肩部轮廓以及人体区域确定一边肩部的待补全肩部区域;根据人体区域中与待补全肩部区域临近的区域的颜色对待补全肩部区域进行颜色填充,本实施例中待补全肩部轮廓是基于原始图片中的当前肩部轮廓以及人脸的尺寸得到,所以比较符合原始图片中用户肩部轮廓的走向,且补全后肩部的尺寸与原始图像中人脸的比例合适,另外待补全肩部的颜色与其临近的人体区域中的颜色类似,颜色过渡自然,所以本实施例不仅可以自动、智能地对图片中的人进行肩部补全,且肩部补全后的图片可以达到比较自然的视觉效果,有利于提升用户体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一张第一尺寸的证件照的示意图;
图2为图1中的人体区域在第二尺寸(比第一尺寸大)的图片中的显示效果示意图;
图3为现有技术中对图2中的人体区域的采用水平拉伸的方式得到的图片;
图4为实施例提供的图片处理方法的流程示意图;
图5为对图1进行人体区域提取得到的人体区域示意图;
图6为对图5中的人体区域进行左肩的肩部补全的示意图;
图7为按照本实施例的图片处理方法对图1进行处理后得到的肩部完整的图;
图8为实施例提供的终端的结构示意图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
由于现有技术中,裁切过度和证件照从小尺寸转换到大尺寸等都会面临图片中人的肩膀缺失的问题,为了解决该问题,本发明提出一种图片处理方法,该图片处理方法可以在原始图片的人体区域缺少一部分肩部时,智能地预测出缺失的肩部轮廓(下文中的待补全肩部轮廓),然后基于该缺失的肩部轮廓补全人体区域缺失的肩部,实现人体区域的肩部补全。
如图4所示,本实施例的图片处理方法包括:
步骤401、确定原始图片中的人体区域的当前肩部轮廓,对人体区域的左、右两肩的当前肩部轮廓分别按照步骤402-步骤404进行肩部补全;
本实施例应用在需要对原始图片的人体区域中进行肩部补全的情况下,而原始图片需要进行肩部补全的原因可以是由于对原始图片的过度剪切导致肩部的缺失,或者在需要将原始图片转换成尺寸更大的图片时出现的肩部缺失的问题。
在本实施例中,可以通过现有的识别算法识别原始图片的人体区域上的当前肩部轮廓(在原始图片中存在的肩部轮廓),例如,可以通过现有的算法将人体区域从原始图片中自动分割出来,在分割出来的人体区域上确定当前肩部轮廓。其中,实现自动分割的算法比较多,包括但不限于grabcut。参见图5,图5中的白色区域是从图1中分割出的人体区域,图5中的a和b两部分中的黑白两色的分界线认为是人体区域上的当前肩部轮廓。
步骤402、基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部上的待补全肩部轮廓;
本步骤的目的是确定原始图片的人体区域上需要补全的肩部的轮廓(即上述的待补全肩部轮廓),该待补全肩部轮廓需要和当前肩部轮廓自然过渡,且补全后的肩部和用户头部的比例需要符合人体正常的头肩比。
本实施例的一个示例中,可以在终端(或系统上)设置肩部模型,在步骤1402中结合肩部模型的数据来实现对待补全肩部轮廓的预测。可选的,基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部上的待补全肩部轮廓包括:获取预设的肩部模型,根据人体区域上人脸的尺寸调整肩部模型中肩部轮廓的大小,根据当前肩部轮廓确定肩部模型中需要保留的待保留肩部轮廓,对该待保留肩部轮廓进行处理使其与当前肩部轮廓平滑地连接,处理后的待保留肩部轮廓即为待补全肩部轮廓。
进一步的,还可以为根据性别设置男性肩部轮廓模型以及女性肩部轮廓模型,在确定待补全肩部轮廓的过程中,根据原始图片中人的性别选择对应的模型使用。
在本实施例的另一个示例中,可以不借助外在的模型,而仅仅依靠原始图片提供的信息实现对待补全肩部轮廓的确定。对于人的肩膀,若是清楚其肩部拐点,可以比较容易地推测出肩膀的轮廓,另外,可以预见,待补全肩部轮廓的长度是有限的,所以确定待补全肩部轮廓时也需要考虑到人体区域的下边缘的位置、形状等等。
所以可选的,基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部上的待补全肩部轮廓包括:
基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部的肩部拐点以及一边肩部在补全后与人体区域的下边缘的交点;根据当前肩部轮廓、肩部拐点和交点预测一边肩部上的待补全肩部轮廓。
在证件照中,人体区域的下边缘一般是一条水平的直线,一边肩部在补全后与人体区域的下边缘的交点可以看作是人体区域的下边缘的延长线与从肩部拐点延伸的肩部轮廓线的交点。
在一个示例中,基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部的肩部拐点包括:根据人体区域中人脸的尺寸以及预设的头肩比计算出人体区域中人的肩部的目标尺寸,根据该目标尺寸确定该一边肩部的肩部拐点的横坐标,将把该一边肩部的当前肩部轮廓上最外侧一点下移第一预设距离得到的点的纵坐标作为肩部拐点的纵坐标。在得到肩部拐点的基础上,可以将把肩部拐点向远离人体区域的方向移动第二预设距离得到的点的横坐标作为上述交点的横坐标,根据人体区域的下边缘确定该交点的纵坐标。
步骤403、根据待补全肩部轮廓以及人体区域确定一边肩部的待补全肩部区域;
本实施例中,待补全肩部轮廓与人体区域的边界以及人体区域的下边缘的延伸线构成的封闭区域即为本实施例的待补全肩部区域。
步骤404、根据人体区域中与待补全肩部区域临近的区域的颜色对待补全肩部区域进行颜色填充。
在进行颜色填充时,为了使得待补全肩部区域的颜色和人体区域中的颜色过渡自然,本实施例可以采用周期延展的方式,将与待补全肩部区域临近的一个固定区域的颜色向待补全肩部区域中进行周期性的延展,来填充待补全肩部区域。
本实施例中,可以基于该一边肩部的当前肩部轮廓上的两个肩部关键点的位置来确定该一边肩部的肩部拐点和该一边肩部在补全后与人体区域的下边缘的交点。可选的,基于一边肩部的当前肩部轮廓以及人体区域中人脸的尺寸,预测一边肩部的肩部拐点以及一边肩部在补全后与人体区域的下边缘的交点包括:
从一边肩部的当前肩部轮廓中选择两个肩部关键点,获取两个肩部关键点的位置;根据两个肩部关键点的位置以及人体区域中人脸的尺寸,预测一边肩部的肩部拐点的位置以及一边肩部在补全后与人体区域的下边缘的交点的位置。
为了肩部拐点和交点的位置的准确性,对于在当前肩部轮廓靠近肩部拐点的位置选择两个肩部关键点,并且两个肩部关键点之间的距离最好不低于预设阈值。上述两个肩部关键点的位置可以用坐标系中的坐标来表示。
进一步的,为了精确肩部拐点和交点的位置,本实施例中的一个肩部关键点p1是在该一边肩部的当前肩部轮廓上且在水平方向上距离人体区域的人脸最远的点,另一个肩部轮廓点p2是与p1距离不低于预设阈值的点。
可选的,本实施例中,从一边肩部的当前肩部轮廓中选择两个肩部关键点,获取两个肩部关键点的位置包括:
以横坐标从左至右增大,纵坐标从上到下增大的原则为人体区域建立坐标系;
在一边肩部的当前肩部轮廓上选择在水平方向上距离人体区域的人脸最远的点作为一个肩部关键点,记为p1,选择当前肩部轮廓上与p1的距离不低于预设阈值的一个点作为另一个肩部关键点,记为p2;
分别获取p1的坐标(p1.x,p1.y)和p2的坐标(p2.x,p2.y);
根据两个肩部关键点的位置以及人体区域中人脸的尺寸,预测一边肩部的肩部拐点的位置以及一边肩部在补全后与人体区域的下边缘的交点的位置包括:
若一边肩部为左肩,则按照公式p3.x=xf-k1*wf,和p3.y=(p1.y–p2.y)*(p3.x–p1.x)/(p1.x–p2.x)+p1.y,计算一边肩部的肩部拐点p3的坐标(p3.x,p3.y);按照公式p4.x=p3.x-wf/k2,和p4.y=h,计算一边肩部在补全后与人体区域的下边缘的交点p4的坐标(p4.x,p4.y);其中,k1和k2是正数,xf是在人体区域中的人脸上且在水平方向上距离p1最近的点的横坐标,wf是人体区域中的人脸的宽度,h为人体区域的下边缘的点的纵坐标;
若一边肩部为右肩,则按照公式p3.x=xf+k1*wf,和p3.y=(p1.y–p2.y)*(p3.x–p1.x)/(p1.x–p2.x)+p1.y,计算一边肩部的肩部拐点p3的坐标(p3.x,p3.y);按照公式p4.x=p3.x+wf/k2,和p4.y=h,计算一边肩部在补全后与人体区域的下边缘的交点p4的坐标(p4.x,p4.y);其中,k1和k2是正数,xf是在人体区域中的人脸上且在水平方向上距离p1最近的点的横坐标,wf是人体区域中的人脸的宽度,h为人体区域的下边缘的点的纵坐标。
在实际中上述的k1和k2都可以根据实际情况设置,例如将k1为0.6,k2为5,但是,考虑到不同性别,不同年龄的人的头肩比可能不同,或者用户想要达到的头肩比来设置k1值,例如想要头肩比更小,可以适当延长肩部拐点p3到p1的距离,将k1值修改的更大,例如将p3.x的公式从p3.x=xf–0.6*wf修改为p3.x=xf–0.7*wf,则补全的肩部更宽,头肩比更小。
下面以图5中人体区域的左肩为例,结合图6来对上述根据公式计算肩部拐点p3和交点p4的坐标进行说明。首先对图6中的人体区域建立如图6所示的坐标系(坐标系的圆点为图6中含有人体区域的图像的左上角的顶点。),在人体区域中将用户的人脸用尺寸匹配的矩形框框住;然后在左肩的当前肩部轮廓中,选择横坐标最小的点(也是左肩的当前肩部轮廓上在水平方向上距离人体区域的人脸最远的点)作为一个肩部关键点p1,将当前肩部轮廓上与p1的距离不低于(如等于)预设阈值(例如10个像素点)的一个点作为另一个肩部关键点p2。在坐标系中获取p1和p2的坐标(p1.x,p1.y)和(p2.x,p2.y)。
我们假设p1,p2和肩部拐点p3大致在同一条直线上。因此,确定p3的位置只需要确定p3到p1的距离。为了确定这个距离,我们首先在坐标系中确定人脸框的左边缘的横坐标为xf。假设k1为0.6,k2为5,p3的横坐标(x坐标)则按以下公式计算:
p3.x=xf–0.6*wf,其中wf是人脸框的宽度(即上述人体区域中的人脸的宽度);
p3的y坐标则为:
p3.y=(p1.y–p2.y)*(p3.x–p1.x)/(p1.x–p2.x)+p1.y。
对于左肩在补全后与人体区域的下边缘的交点p4(p4.x,p4.y),其横坐标p4.x可以在p3.x的基础上计算,如p4.x=p3.x-wf/5,其中wf的被除数可以根据实际的需要进行调整,本实施例对此没有限定;而p4与图6中人体区域的下边缘在一条直线上,所以p4.y是人体区域的下边缘上的点的纵坐标,图6中,p4.y为含有人体区域的图像的高度。
在确定肩部拐点和一边肩部在补全后与人体区域的下边缘的交点后,可以绘制待补全肩部轮廓,根据当前肩部轮廓、肩部拐点和交点预测一边肩部上的待补全肩部轮廓包括但不限于以下的两种方式:
方式一:在p1和p3之间均匀采样,在p3和p4之间均匀采样,得到两条直线段构成的轮廓线。然后用高斯平滑(在其他示例中不排除使用其他的平滑算法)的方法平滑轮廓线,使之达到自然的弧线形,该弧线即为待补全肩部轮廓。
方式二:根据p1、p3和p4三个点拟合一条参数化的平滑曲线,例如二次曲线或者贝塞尔曲线。
本实施例中,在得到p1、p3和p4之间的平滑曲线后,连接p4和人体区域的下边缘上距离p4最近的点(在一边肩膀为左肩的情况下如图6中的p7),以及p1和p7,则得到了左肩部位的待补全肩部区域。
本实施例中,可以通过对待补全肩部区域中的点的填充实现对待补全肩部区域的颜色填充,可选的,根据人体区域中与待补全肩部区域临近的区域的颜色对待补全肩部区域进行颜色填充包括:
在待补全肩部区域临近的人体区域中,为待补全肩部区域中各待填充点分别选择对应的拷贝点;其中,待填充点与其对应的拷贝点的纵坐标差在预设范围内;
将待补全肩部区域中各待填充点对应的拷贝点的颜色分别拷贝到各待填充点的位置上完成对待补全肩部区域的颜色填充。
在一个示例中,为了颜色过渡更加自然,可以将与待填充在同一水平线上的点作为其对应的拷贝点。
可选的,在待补全肩部区域临近的人体区域中,为待补全肩部区域中各待填充点分别选择对应的拷贝点包括:
基于下列方式在待补全肩部区域临近的人体区域中,为待补全肩部区域中各待填充点分别选择对应的拷贝点:
若一边肩部为左肩,则按照公式
若一边肩部为右肩,则按照公式
在一个示例中,p5可以上述的p1点,而p6可以是上述的p2。
本实施例中对图1中的人体区域按照上述的方法进行肩部补全可以得到如图7所示的图片。
参见图8,本实施例还提供一种终端81,该终端81包括:处理器811、存储器812及通信总线813;
通信总线813用于实现处理器和存储器之间的连接通信;
存储器812用于存储一个或多个程序,处理器811用于执行存储器812中存储的一个或者多个程序,以实现如上述记载的图片处理方法的步骤。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现如上述记载的图片处理方法的步骤。
采用本实施例的图片处理方法,可以自动地为需要补全肩部区域的图片进行肩部区域补全的处理,相对于现有技术中在小尺寸转大尺寸证件照中采用的水平拉伸的方式,本实施例的方法不会造成人脸的变形,还能使得补全的肩部区域无论是在线条上还是在颜色上都和原始图片中的人体区域有自然的过渡,使得补全肩部后的图片具有良好的视觉效果,有利于提升用户体验。
在本申请的计算机可读存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
以上为对本发明所提供的一种图片处理方法、终端和计算机可读存储介质的描述,对于本领域的技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。