一种基于连续线条的人物肖像画生成方法

文档序号:25093647发布日期:2021-05-18 21:10阅读:104来源:国知局
一种基于连续线条的人物肖像画生成方法

1.本发明涉及计算机图形学、图像处理的技术领域,尤其涉及一种基于连续线条的人物肖像画生成方法。


背景技术:

2.肖像从不同角度上有不同的理解,美术意义(或摄影)上的肖像,是指通过绘画、摄影、文字等艺术手段,使肖像权人的人物形象在物质载体下再现的一种观赏造型作品。近年来,数字媒体技术正逐渐融入生活,极大地影响着人们的生活和工作方式,利用计算机生成人脸及肖像的图形在很多领域具有广泛的应用,如视频会议、网络游戏、移动数字娱乐中,使用特定算法生成的人脸、肖像等图形代替真实人脸,在数据处理、数据传送和营造气氛等方面具有重要的实用价值和意义,不仅可以提高数据传送的速度,而且能够很好地营造轻松、和谐的气氛。
3.在艺术设计等领域,采用特定的创新方法、肖像生成算法以及简易装置生成具有特定风格的肖像,并以实物的方式进行再现,通常能够以较高的价格进行销售并获利,具有较强的实际需求。
4.人脸及肖像生成能简单而形象地对人物进行描绘,涵盖了多个学科和领域,包括计算机视觉、计算机图形学和心理学等,一直以来都是图像处理领域一个热门的研究方向,人脸及肖像等的生成及风格化自诞生以来,就与艺术创作紧密的联系。随着计算机及图像处理技术的发展,人们在风格化研究上做了很多尝试,涌现出大量算法及应用。
5.申请号为201710868480.7的发明专利提出一种基于特征提取的人物肖像漫画风格化生成方法,提取人脸特征点后将人脸分解为五官、脸型、发型、服饰等组件,根据这些组件的特征与组件素材库中已有的组件素材进行匹配,最后将得到的各匹配组件合成为人物肖像,并对其进行夸张渲染;采用的肖像风格化算法将肖像的结构特征与风格化信息分开处理。申请号为201610895094.2的发明专利公开了一种自动描绘人脸线条画的方法,可以利用机器人自动绘制一幅边缘连续的人脸肖像画,并能够在肖像画上进行个性化签名,是一种自动化的、形式新颖的绘制方法。申请号为201010163881.0的发明专利提供了一种基于人脸图像的卡通人脸图形生成方法和装置,其中的方法具体包括:识别所述人脸图像,得到人脸基准线;基于所述人脸基准线以及人脸图形构件库,匹配组合得到卡通人脸图形,用以使得生成的卡通人脸图形既能满足实时性需求,又能够贴合真实的人脸图像。已有的人脸肖像生成方法,大多基于模板匹配、特征提取和边缘检测的方法,数据库中的模板数量有限,不能很好的表征现实世界中众多的人脸肖像,特征提取的参数有限,所能生成并表征的人物肖像数量有限。


技术实现要素:

6.针对现有的人脸肖像生成方法所能生成并表征的人物肖像数量有限,不能很好的表征现实世界中众多的人脸肖像的技术问题,本发明提出一种基于连续线条的人物肖像画
生成方法,思路简单,操作方便,在一定程度上能够贴合真实的人脸图像,并能输出所有的锚点编号、锚点坐标及锚点的连接顺序,便于后续的机械臂及人工连线;且具有自动化程度高、计算速度快和人物肖像还原精度高等优点。
7.为了达到上述目的,本发明的技术方案是这样实现的:一种基于连续线条的人物肖像画生成方法,其步骤如下:
8.步骤一:通过相机采集或下载待处理的彩色的人物肖像图像;
9.步骤二:采用平均值法对步骤一中的人物肖像图像进行图像灰度化,得到灰度图像;
10.步骤三:对灰度图像进行调整,并生成与调整后灰度图像大小相同的包围肖像区域的圆形蒙版;
11.步骤四:在圆形蒙版的圆形轮廓上均匀设定多个锚点,并计算各个锚点的坐标;
12.步骤五:根据步骤三得到的圆形蒙版和灰度图像得到肖像图像,在肖像图像上的圆形轮廓上选取任意两个锚点并连线,计算连线经过的像素点的像素值的均值,将均值中的最小值对应的锚点作为起始点;
13.步骤六:将步骤五得到的起始点存入数组中,依次计算后续连接点并顺序存入数组中,在与肖像图像大小相同的圆形空白画布上,以黑色的连线将数组中的起始点和后续连接点顺序连接,得到初始线肖像画;
14.步骤七:去除步骤六中初始线肖像画上的冗余,保留连线的交点,得到黑色线肖像画;
15.步骤八:检测步骤一中人物肖像图像的皮肤区域并作为感兴趣区域,循环步骤二

步骤七以肤色的连线顺序连接表征皮肤区域的起始点和后续连接点,得到肤色线肖像画,将肤色线肖像画与步骤七得到的黑色线肖像画叠加得到彩色线肖像画。
16.所述步骤二中平均值法的实现方法为:提取人物肖像图像的红绿蓝三个通道的平均值作为灰度值:
17.gray=(rc+gc+bc)/3;
18.其中,gray表示灰度图像的像素值,rc、gc、bc分别表示人物肖像图像的红、绿、蓝三个通道的像素值。
19.所述步骤三中对灰度图像进行调整的方法为:
20.以人物肖像区域为中心,以双线性插值的方式将灰度图像的大小调整为700
×
700像素;
21.所述圆形蒙版生成的方法为:
22.生成一个大小为700
×
700像素的画布图像,以画布图像的中心为原点,350个像素的宽度为半径在画布图像上画圆,并将圆形区域内的像素值设置为0,圆形区域外的像素值设置为1,得到包围肖像区域的圆形蒙版。
23.所述步骤四的实现方法为:在圆形蒙版的圆形轮廓的圆周上每隔1.8
°
均匀的设定200个锚点,以圆形轮廓的顶部最高位置处的点为初始锚点,并按顺时针方向依次计算其他锚点的坐标,依次存储到集合pins
xy
(i1,j1)中,其中,i1表示锚点的编号,取值范围为1~200;j1表示锚点的x坐标或者y坐标,取值范围为1~2,当j1=1时表示x坐标,当j1=2时表示y坐标。
24.所述肖像图像是将圆形蒙版中的值取非,然后将圆形蒙版与灰度图像进行点乘得到的;
25.所述计算连线经过的像素点的像素值的均值的方法为:
26.从半径为350的圆形轮廓上的200个锚点中任意挑选两个锚点,将这两个锚点连线,统计连线所经过的肖像图像的像素点的数量num
ij
及像素点的像素值之和sum
ij
,其中,i的取值为1~199,j的取值为(i+1)~200;如果数量num
ij
>30,则计算该连线所经过的像素点的像素值的均值ave
ij
=sum
ij
/num
ij
;否者j=j+1;统计连线所经过像素点的像素值的均值的集合ave={ave
ij
}中的最小值ave
mn
,其中,m∈i,n∈j,且m<n,则选取锚点m作为线肖像画的起始点。
27.所述统计连线所经过的肖像图像的像素点的数量num
ij
及像素点的像素值之和sum
ij
时,计算任意两个锚点a和锚点b的连线所经过肖像图像的像素点的坐标的方法为:锚点a的坐标为(pins
xy
(i,1),pins
xy
(i,2)),锚点b的坐标为(pins
xy
(j,1),pins
xy
(j,2)),锚点a和锚点b之间连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
);则:
28.(1)当锚点a的y坐标y
a
=pins
xy
(i,2)与锚点b的y坐标y
b
=pins
xy
(j,2)相等,则锚点a和锚点b处于同一行,判断锚点a和锚点b的x坐标值:
29.若x
a
>x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(x
a

x
b
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(x
a

x
b
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
b
+md
sum1

1、y坐标的值为ab_xy(md
sum1
,2)=y
a

30.若x
b
>x
a
,则锚点a和锚点b之间连线经过的像素点的数量为(x
b

x
a
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(x
b

x
a
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a
+md
sum1

1、y坐标的值为ab_xy(md
sum1
,2)=y
a

31.(2)锚点a的x坐标x
a
=pins
xy
(i,1)与锚点b的x坐标x
b
=pins
xy
(j,1)相等,则锚点a和锚点b处于同一列,判断锚点a和锚点b的y坐标值:
32.若y
a
>y
b
,则锚点a和锚点b之间连线经过的像素点的数量为(y
a

y
b
+1)个,连线经过的像素点的坐标的集合ab_xy中,索引md
sum1
的取值为1~(y
a

y
b
+1),索引md
sum2
的取值为1~2;连线上各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
b
+md
sum1

1、x坐标的值为ab_xy(md
sum1
,1)=x
a

33.若y
b
>y
a
,则锚点a和锚点b之间连线经过的像素点的数量为(y
b

y
a
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(y
b

y
a
+1),索引md
sum2
的取值为1~2;连线上各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
a
+md
sum1

1、x坐标值为ab_xy(md
sum1
,1)=x
a

34.(3)锚点a和锚点b在x方向的偏移x
offset
=|x
a

x
b
|,锚点a和锚点b在y方向的偏移y
offset
=|y
a

y
b
|,若x
offset
≥y
offset
,锚点a和锚点b的连线的斜率的绝对值小于等于1,则:
35.若y
a
>y
b
且x
a
>x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(x
a

x
b
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(x
a

x
b
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
b
+md
sum1

1、y坐标的值为ab_xy(md
sum1
,2)=round(y
b
+md
sum1
×
|(y
a

y
b
)/(x
a

x
b
)|),其中,round()为四舍
五入取整函数;
36.若y
a
>y
b
且x
a
<x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(x
b

x
a
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(x
b

x
a
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a
+md
sum1

1、y坐标的值为ab_xy(md
sum1
,2)=round(y
b
+md
sum1
×
|(y
a y
b
)/(x
a

x
b
)|);
37.若y
a
<y
b
且x
a
>x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(x
a

x
b
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(x
a

x
b
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
b
+md
sum1

1、y坐标的值为ab_xy(md
sum1
,2)=round(y
a
+md
sum1
×
|(y
a

y
b
)/(x
a

x
b
)|);
38.若y
a
<y
b
且x
a
<x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(x
b

x
a
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(x
b

x
a
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a
+md
sum1

1、y坐标的值为ab_xy(md
sum1
,2)=round(y
a
+md
sum1
×
|(y
a

y
b
)/(x
a

x
b
)|);
39.(4)锚点a和锚点b在x方向的偏移为x
offset
=|x
a

x
b
|,在y方向的偏移为y
offset
=|y
a

y
b
|,若x
offset
<y
offset
,锚点a和锚点b的连线的斜率的绝对值大于1,则:
40.若y
a
>y
b
且x
a
>x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(y
a

y
b
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(y
a

y
b
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=round(x
b
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),连线上各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
b
+md
sum1

1;
41.若y
a
>y
b
且x
a
<x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(y
a

y
b
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(y
a

y
b
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标值为ab_xy(md
sum1
,1)=round(x
a
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),连线上各个像素点的y坐标值为ab_xy(md
sum1
,2)=y
b
+md
sum1

1;
42.若y
a
<y
b
且x
a
>x
b
,则锚点a和锚点b之间连线经过的像素点的数量为(y
b

y
a
+1)个,连线经过的像素点的坐标的集合ab_xy(md
sum1
,md
sum2
)中,索引md
sum1
的取值为1~(y
b

y
a
+1),索引md
sum2
的取值为1~2;连线上各个像素点的x坐标值为ab_xy(md
sum1
,1)=round(x
b
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),连线上各个像素点的y坐标值为ab_xy(md
sum1
,2)=y
a
+md
sum1

1;
43.若y
a
<y
b
且x
a
<x
b
,则两个锚点a、b之间连线经过的像素点的数量为(y
b

y
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
b

y
a
+1),md
sum2
的取值为1~2;连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=round(x
a
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),连线上各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
a
+md
sum1

1;
44.根据连线上各个像素点的x坐标和y坐标的值,通过pr(x,y)提取像素点的像素值即灰度值,将锚点a和锚点b之间连线经过的像素点的灰度值相加得到像素值之和sum
ij

45.所述步骤六的实现方法为:
46.step1:通过步骤五的处理,得到锚点m为线画肖像的起始点,锚点n是后续连接点,且锚点m和锚点n的连线经过的所有像素点的灰度值的均值最小;将数值m存入数组sequence,将肖像图像的锚点m和锚点n的连线经过的所有像素点的灰度值设定为255;
47.step2:以锚点n为出发点,分别计算锚点n到锚点1~锚点(m

1)、锚点(m+1)~锚点
(n

1)号及锚点(n+1)~锚点200的连线经过的像素的个数,并排除其中连线所经过像素数少于30的锚点;然后采用步骤五的方法计算得到锚点p
i
是后续连接点,使得锚点n和锚点p
i
的连线经过的所有像素的像素值的均值最小;将数值n存入数组sequence中,将肖像图像的锚点n和锚点p
i
的连线经过的所有像素点的灰度值设定为255;
48.step3:同理,以得到的后续连接点p
i
作为出发点,循环step2,得到该出发点的后续连接点p
i+1
,数值p
i+1
存入数组sequence;将肖像图像的p
i
和p
i+1
号锚点的连线所经过的所有像素点的灰度值设定为255;
49.step4:以黑色的连线依次在半径为350的圆形空白画布上顺序连接数组sequence中的锚点,得到初始线肖像画。
50.所述步骤七中黑色线肖像画的获取方法为:提取初始线肖像画的第2~699行、第2~699列构成感兴趣区域,依次对感兴趣区域中的每一个像素点pixel(m1,n1)的八邻域进行分析,将像素点pixel(m1,n1)的八个邻域的像素值求和得到邻域值sneighbourhood,其中,m1的取值范围为2~699,n1的取值范围为2~699;如果像素点pixel(m1,n1)的像素值为0,并且邻域值sneighbourhood>4,则将像素点pixel(m1,n1)的像素值设定为1,得到黑色线肖像画。
51.所述步骤八中检测人物肖像图像的皮肤区域的方法为:
52.将人物肖像图像从rgb颜色空间转换为ycbcr颜色空间,其中,y是指亮度分量,cb指蓝色色度分量,而cr指红色色度分量,且归一化的转换矩阵hi为:
[0053][0054]
则亮度分量y=hi(1,1)*rc+hi(1,2)*gc+hi(1,3)*bc+16,蓝色色度分量cb=hi(2,1)*rc+hi(2,2)*gc+hi(2,3)*bc+128,红色色度分量cr=hi(3,1)*rc+hi(3,2)*gc+hi(3,3)*bc+128,rc、gc、bc分别表示原始的彩色的人物肖像图像的红、绿、蓝三个通道的像素值;
[0055]
若亮度分量y、蓝色色度分量cb或红色色度分量cr的像素的值大于236,则将像素值修改为236;若亮度分量y、蓝色色度分量cb或红色色度分量cr的像素的值小于15,则将像素值修改为15,得到ycbcr图像;
[0056]
遍历ycbcr图像中的每个像素点,计算各个像素点的肤色值skin为:
[0057]
skin(ii,jj)=(cos(2.54)*(cb(ii,jj)

109.39)+sin(2.54)*(cr(ij,jj)

152.03)

1.61)^2/(a^2)+
[0058]
(

sin(2.54)*(cb(ij,jj)

109.39)+cos(2.54)*(cr(ij,jj)

152.03)

2.42)^2/(b^2);
[0059]
其中,cb(ii,jj)表示ycbcr图像中的第ii行、第jj列的像素点的蓝色色度分量cb的值;cr(ii,jj)表示ycbcr图像中的第ii行、第jj列的像素点的红色色度分量cr的值;a、b为自定义的椭圆肤色模型的长轴、短轴,且a=25.39;b=14.03;
[0060]
如果skin<=1,则将第ii行、第jj列的像素点标记为皮肤点,所有皮肤点的集合为皮肤区域。
[0061]
所述肤色线肖像画的实现方法为:采用步骤二

步骤七中生成黑色线肖像画的方
法,再次生成表示皮肤区域的线画肖像的起点及后续连接点,并以人物肖像图像中的皮肤区域的像素点的r通道的均值作为连线的r值,以人物肖像图像中的皮肤区域的像素点的g通道的均值作为连线的g值,以人物肖像图像中的皮肤区域的像素点的b通道的均值作为连线的b值,以三个通道的r值、g值、b值为颜色的连线,依次连接表示皮肤区域的线画肖像的起点及后续连接点,构成肤色线肖像画。
[0062]
与现有技术相比,本发明的有益效果:对所获取的人物彩色肖像图像进行处理,对灰度图像计算得到起点和后续连接点,以黑色线依次连接起点和后续连接点得到线画肖像;提出了皮肤检测方法,将肖像中的皮肤区域作为感兴趣区域,计算得到皮肤区域的起点和后续连接点,以肤色作为连线的颜色,依次连接皮肤区域的起点和后续连接点,并叠加到黑色线的线画肖像上,最后实现彩色线画肖像。本发明具有下述有益效果:(1)自动化程度高,对人物彩色肖像图像自动生成彩色线画肖像;(2)计算速度快,在安装window 10企业版的thinkpad t460p笔记本电脑上(intel(r)core(tm)i7

6700hq cpu@2.6ghz,内存为16gb),运行时间小于5分钟;(3)人物肖像还原精度高,经过多位观察员的人工判读,能够有效的配准原始的人物彩色肖像图像和所生成的线肖像画。本发明为人物肖像生成提供了技术支撑,同时研究思路与方法也可以推广应用到其它字符、标志等图案的生成,具有很高的实用价值。
附图说明
[0063]
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0064]
图1为本发明的流程图。
[0065]
图2为原始的人物彩色肖像图像的灰度图。
[0066]
图3为本发明图2的灰度图像。
[0067]
图4为本发明包围肖像的圆形蒙版。
[0068]
图5为本发明在图4的轮廓上设置锚点的示意图。
[0069]
图6为本发明的感兴趣区域的肖像图像。
[0070]
图7为本发明查找线肖像画起点的流程图。
[0071]
图8为本发明两个锚点处于同一行的示意图。
[0072]
图9为本发明两个锚点处于同一列的示意图。
[0073]
图10为本发明两个锚点的连线的斜率的绝对值小于等于1的示意图。
[0074]
图11为本发明两个锚点的连线的斜率的绝对值大于1的示意图。
[0075]
图12为本发明锚点之间的1000次顺序连线构成的线肖像画的示意图。
[0076]
图13为本发明的不同次数的顺序连线所构成的线肖像画的示意图,其中,(a)为100次,(b)为300次,(c)为500次,(d)为1500次。
[0077]
图14为本发明对图12去除冗余的肖像画。
[0078]
图15为本发明中图3中皮肤区域的示意图。
[0079]
图16为本发明中皮肤区域的线肖像画。
[0080]
图17为本发明中彩色的线肖像画。
具体实施方式
[0081]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0082]
如图1所示,一种基于连续线条的人物肖像画生成方法,其步骤如下:
[0083]
步骤一:通过相机采集或下载待处理的彩色的人物肖像图像。
[0084]
人物肖像图像的来源及格式要求:可应用于本发明的肖像的来源非常广泛,可以通过相机采集目标人员的图像,从而获得人物肖像图像;也可以从网络上下载相关人物肖像的图像,也可以是来自于人物雕塑、油画等形式的图像。常见的jpg、png、bmp、tif等格式的肖像图像均可作为本发明的数据源。肖像在图像中所占的幅面不限,但人物肖像应尽可能清晰的显示在图像中。图像的宽度和高度尽量相同,确保肖像的宽高比在合理的范围内。背景中的干扰物应尽量少,以保证生成线画肖像的效果和质量。待处理的彩色的人物肖像图像的原始图像ori_img如图2所示,原始图像ori_img的大小800
×
800。
[0085]
步骤二:采用平均值法对步骤一中的人物肖像图像进行图像灰度化,得到灰度图像。
[0086]
将待处理的人物肖像图像即原始图像ori_img进行图像灰度化,常用的图像灰度化方法是平均值法,即提取红绿蓝三个通道的平均值作为灰度值:
[0087]
gray=(rc+gc+bc)/3
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
[0088]
其中,gray表示灰度图像的像素值,rc、gc、bc分别表示原始的彩色的人物肖像图像的红、绿、蓝三个通道的像素值,从而得到灰度图像gray_img,如图3所示。图像灰度化从彩色图像的红、绿、蓝三个通道转变为灰度这一个通道,减少了计算量。
[0089]
步骤三:对灰度图像进行调整,并生成与调整后灰度图像大小相同的包围肖像区域的圆形蒙版。
[0090]
以人物肖像区域为中心进行调整,采用matlab中imresize()函数实现。以双线性插值的方式将灰度图像gray_img的大小调整为700
×
700像素。这样全部流程的整体的计算量适中,计算时间较短,且最终在画布上生成的线画肖像的图像质量也能满足人工评判的要求。
[0091]
设定一个大小为700
×
700像素的画布图像,以该画布图像的中心为原点,350个像素的宽度为半径画圆,并将圆形区域内的像素值设置为0,即用黑色表示;圆形区域外的像素值设置为1,即用白色表示,如图4所示,该图像即为灰度图像gray_img的蒙版,命名为圆形蒙版mask_img。方便后续在圆形画布上进行处理和分析,最终的结果也可以用于指导圆形画框上的实物连接,形成可供销售的线画肖像商品。
[0092]
步骤四:在圆形蒙版的圆形轮廓上均匀设定多个锚点,并计算各个锚点的坐标。
[0093]
在圆形蒙版mask_img的圆形轮廓(圆周)上每隔1.8
°
均匀的设定200个锚点,并计算各个锚点的坐标。以圆形轮廓的顶部最高位置处,即圆形轮廓的零点方向的点为初始锚点,即1号锚点(anchor_point1),并按顺时针方向依次计算后序锚点的坐标,依次存储到集
合pins
xy
(i1,j1)中,其中,i1表示锚点的编号,取值范围为1~200;j1表示锚点的x坐标或者y坐标,取值范围为1~2,当j1=1时表示x坐标,当j1=2时表示y坐标,如图5所示。
[0094]
步骤五:根据步骤三得到的圆形蒙版和灰度图像得到肖像图像,在肖像图像上的圆形轮廓上选取任意两个锚点并连线,计算连线经过的像素点的像素值的均值,将均值中的最小值对应的锚点作为线肖像画的起始点。
[0095]
将圆形蒙版mask_img中的值取非,即将圆形蒙版mask_img中值为1的改为0,将值为0的改为1。然后将圆形蒙版mask_img与灰度图像gray_img进行点乘,即可得到感兴趣区域的肖像图像portrait_area,如图6所示。
[0096]
从半径为350的圆形轮廓上的200个锚点中任意挑选两个锚点,将这两个锚点连线,统计该连线所经过的肖像图像portrait_area的像素点的数量num
ij
及像素点的像素值之和sum
ij
,其中,i的取值为1~199,j的取值为(i+1)~200。如果数量num
ij
>30,则计算该连线所经过的像素点的像素值的均值,即ave
ij
=sum
ij
/num
ij
。阈值设定为30,防止出现相邻或相近的锚点间的连线的长度太短,从而影响生成先肖像画的效果。统计连线所经过像素点的像素值的均值的集合ave中的最小值ave
mn
,其中,m∈i,n∈j,且m<n,则选取m号锚点anchor_point m作为线肖像画的起始点,线肖像画的起始点的计算方法如图7所示。最小值ave
mn
对应的是两个锚点连线经过的像素点的灰度值的均值最小,该连线可最优先的体现头发、眉毛、眼睛、鼻子和嘴等灰度值较低的区域。
[0097]
其中,任意两个锚点a、b的连线所经过肖像图像portrait_area的像素点的计算方法如下:锚点a的坐标为(pins
xy
(i,1),pins
xy
(i,2)),锚点b的坐标为(pins
xy
(j,1),pins
xy
(j,2)),即锚点a的x坐标为x
a
=pins
xy
(i,1),锚点a的y坐标为y
a
=pins
xy
(i,2),锚点b的x坐标为x
b
=pins
xy
(j,1),锚点b的y坐标为y
b
=pins
xy
(j,2)。两个锚点a、b之间连线经过的像素点的坐标的集合为ab_xy。则两个锚点a、b的位置关系包含以下四种情况:处于同一行、处于同一列、两点的连线的斜率的绝对值小于等于1、两点的连线的斜率的绝对值大于1,从而对这两个锚点a、b的连线经过的像素点进行统计和分析。
[0098]
(1)两个锚点a、b处于同一行
[0099]
如果锚点a的y坐标y
a
=pins
xy
(i,2)与锚点b的y坐标y
b
=pins
xy
(j,2)相等,则两个锚点a、b处于同一行。然后判断锚点a和锚点b的x坐标值:
[0100]
如果x
a
>x
b
,示意图如图8所示,则两个锚点之间连线经过的像素点的数量为(x
a

x
b
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(x
a

x
b
+1),md
sum2
的取值为1~2;对应的连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
b
+md
sum1

1,各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
a

[0101]
如果x
b
>x
a
,则两个锚点之间连线经过的像素点的数量为(x
b

x
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(x
b

x
a
+1),md
sum2
的取值为1~2;对应的连线上各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a
+md
sum1

1,各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
a

[0102]
(2)两个锚点a、b处于同一列
[0103]
如果锚点a的x坐标x
a
=pins
xy
(i,1)与锚点b的x坐标x
b
=pins
xy
(j,1)相等,则两个锚点a、b处于同一列,然后判断锚点a和锚点b的y坐标值:
[0104]
如果y
a
>y
b
,示意图如图9所示,则两个锚点之间连线经过的像素点的数量为(y
a

y
b
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
a

y
b
+1),md
sum2
的取值为1~2;对应的连线上各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
b
+md
sum1

1,各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a

[0105]
如果y
b
>y
a
,则两个锚点之间连线经过的像素点的数量为(y
b

y
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
b

y
a
+1),md
sum2
的取值为1~2;对应的各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
a
+md
sum1

1,各个像素点的x坐标值为ab_xy(md
sum1
,1)=x
a

[0106]
(3)两个锚点a、b的连线的斜率的绝对值小于等于1
[0107]
设定两个锚点a、b在x方向的偏移为x
offset
=|x
a

x
b
|,在y方向的偏移为y
offset
=|y
a

y
b
|。如果x
offset
≥y
offset
,则表示两个锚点a、b的连线的斜率的绝对值小于等于1,斜率的坡度较为舒缓。
[0108]
如果y
a
>y
b
且x
a
>x
b
,示意图如图10所示,则两个锚点a、b之间连线经过的像素点的数量为(x
a

x
b
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(x
a

x
b
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
b
+md
sum1

1,各个像素点的y坐标的值为ab_xy(md
sum1
,2)=round(y
b
+md
sum1
×
|(y
a

y
b
)/(x
a

x
b
)|),其中,round()为四舍五入取整函数。
[0109]
如果y
a
>y
b
且x
a
<x
b
,则两个锚点a、b之间连线经过的像素点的数量为(x
b

x
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(x
b

x
a
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a
+md
sum1

1,各个像素点的y坐标的值为ab_xy(md
sum1
,2)=round(y
b
+md
sum1
×
|(y
a y
b
)/(x
a

x
b
)|),其中round()函数的功能为通过四舍五入取整。
[0110]
如果y
a
<y
b
且x
a
>x
b
,则两个锚点a、b之间连线经过的像素点的数量为(x
a

x
b
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(x
a

x
b
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
b
+md
sum1

1,各个像素点的y坐标的值为ab_xy(md
sum1
,2)=round(y
a
+md
sum1
×
|(y
a

y
b
)/(x
a

x
b
)|),其中round()函数的功能为通过四舍五入取整。
[0111]
如果y
a
<y
b
且x
a
<x
b
,则两个锚点a、b之间连线经过的像素点的数量为(x
b

x
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(x
b

x
a
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标的值为ab_xy(md
sum1
,1)=x
a
+md
sum1

1,各个像素点的y坐标的值为ab_xy(md
sum1
,2)=round(y
a
+md
sum1
×
|(y
a

y
b
)/(x
a

x
b
)|),其中,round()函数的功能为通过四舍五入取整。
[0112]
(4)两个锚点a、b的连线的斜率的绝对值大于1
[0113]
设定两个锚点a、b在x方向的偏移为x
offset
=|x
a

x
b
|,在y方向的偏移为y
offset
=|y
a

y
b
|。如果x
offset
<y
offset
,则表示两个锚点a、b的连线的斜率的绝对值大于1,斜率的坡度较为陡峭。
[0114]
如果y
a
>y
b
且x
a
>x
b
,示意图如图11所示,则两个锚点a、b之间连线经过的像素点的数量为(y
a

y
b
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
a

y
b
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标的值为ab_xy(md
sum1
,1)=round(x
b
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
b
+md
sum1

1,其中,round()函数的功能为通过四舍五入取整。
[0115]
如果y
a
>y
b
且x
a
<x
b
,则两个锚点a、b之间连线经过的像素点的数量为(y
a

y
b
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
a

y
b
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标值为ab_xy(md
sum1
,1)=round(x
a
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),各个像素点的y坐标值为ab_xy(md
sum1
,2)=y
b
+md
sum1

1,其中,round()函数的功能为通过四舍五入取整。
[0116]
如果y
a
<y
b
且x
a
>x
b
,则两个锚点a、b之间连线经过的像素点的数量为(y
b

y
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
b

y
a
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标值为ab_xy(md
sum1
,1)=round(x
b
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),各个像素点的y坐标值为ab_xy(md
sum1
,2)=y
a
+md
sum1

1,其中,round()函数的功能为通过四舍五入取整。
[0117]
如果y
a
<y
b
且x
a
<x
b
,则两个锚点a、b之间连线经过的像素点的数量为(y
b

y
a
+1)个,连线经过的像素点的坐标的集合为ab_xy(md
sum1
,md
sum2
),其中,md
sum1
的取值为1~(y
b

y
a
+1),md
sum2
的取值为1~2;对应的各个像素点的x坐标的值为ab_xy(md
sum1
,1)=round(x
a
+md
sum1
×
|(x
a

x
b
)/(y
a

y
b
)|),各个像素点的y坐标的值为ab_xy(md
sum1
,2)=y
a
+md
sum1

1,其中,round()函数的功能为通过四舍五入取整。
[0118]
根据连线上各个像素点的x坐标和y坐标的值,通过pr(x,y)提取像素点的像素值(即灰度值);将锚点a和锚点b之间连线经过的像素点的灰度值相加即得到像素值之和sum
ij

[0119]
步骤六:将步骤五得到的起始点存入数组中,依次计算线肖像画的后续连接点并顺序存入数组中,在与肖像图像大小相同的圆形空白画布上,以黑色的连线将数组中的起始点和后续连接点顺序连接,得到初始线肖像画。
[0120]
step1:通过上面的处理过程,得到了第m号锚点anchor_point m为线画肖像的起点start_point,并得到n号锚点是后续连接点,并且m和n号锚点的连线所经过的所有像素点的灰度值的均值最小。将数值m存入数组sequence。将肖像图像portrait_area的m和n号锚点的连线所经过的所有像素点的灰度值设定为255,以减小该条连线对后续所要产生的连线的影响。
[0121]
step2:以n号锚点为出发点,分别计算该锚点到1号~(m

1)号、(m+1)号~(n

1)号及(n+1)号~200号共198个锚点(排除了m号锚点,因为m号锚点刚和n号锚点连线)的连线所经过的像素的个数,并排除其中连线所经过像素数少于30的锚点。然后采用步骤五的方法,并计算得到p
i
号锚点是后续连接点,使得n号和p
i
号锚点的连线所经过的所有像素的像素值的均值最小。将数值n存入数组sequence。将肖像图像portrait_area的n和p
i
号锚点的连线所经过的所有像素点的灰度值设定为255,以减小该条连线对后续所要产生的连线的影响。
[0122]
step3:同理,以新得到的后续连接点p
i
作为出发点,重复step2,得到该出发点的后续连接点p
i+1
,数值p
i+1
存入数组sequence。将肖像图像portrait_area的p
i
和p
i+1
号锚点的连线所经过的所有像素点的灰度值设定为255,以减小该条连线对后续所要产生的连线的影响。重复执行996次。
[0123]
通过以上步骤,得到数组sequence,该数组共存储1001个锚点编号,以黑色的连线,依次在半径为350的圆形空白画布上顺序连接数组sequence中的锚点,如图12所示。数
组sequence中存储的锚点的数量并非越多越好,数量太少,不能较好的刻画人物肖像的细节;数量太多,则生成的线画肖像太过浓密,过多的线条会遮盖细节。本发明设定数组sequence存储的锚点的个数在1000左右,做到了非常好的均衡,整体上可以非常好的还原人物肖像,细节上也能很好的体现出来。
[0124]
设定step1~step3循环的次数,分别为100、300、500和1500次,则分别得到不同大小的数组sequence,对应的就会产生图13(a)、(b)、(c)所示的分别为100、300、500和1500次顺序连线所构成的线肖像画。
[0125]
步骤七:去除步骤六中初始线肖像画上的冗余,保留连线的交点,得到黑色线肖像画。
[0126]
针对图12,提取该图的第2~699行、第2~699列所构成感兴趣区域,依次对该区域中的每一个像素点pixel(m1,n1)的八邻域进行分析,将pixel(m1,n1)的八个邻域的像素值求和得到邻域值sneighbourhood,其中,m1的取值范围为2~699,n1的取值范围为2~699。如果像素点pixel(m1,n1)的像素值为0,并且邻域值sneighbourhood>4,则将pixel(m1,n1)的像素值设定为1。对比图14和图12,明显发现图14在一定程度上减少了无关线段的干扰,使得肖像画更为精炼准确。
[0127]
步骤八:检测步骤一中人物肖像图像的皮肤区域,循环步骤二

步骤七以肤色的连线顺序连接皮肤区域内的起始点和后续连接点,得到肤色线肖像画,将肤色线肖像画与步骤七得到的黑色线肖像画叠加得到彩色线肖像画。
[0128]
检测原始的人物肖像图像中的皮肤区域;并以同样的方法针对皮肤区域生成起始点和199个后续连接点,并依次连线,其中连线的颜色为肤色,即生成表征皮肤区域的肤色连线的线肖像画。
[0129]
将原始的彩色的人物肖像图像从rgb颜色空间转换为ycbcr颜色空间,其中,y是指亮度分量,cb指蓝色色度分量,而cr指红色色度分量。设定归一化的转换矩阵hi为:
[0130][0131]
则亮度分量y=hi(1,1)*rc+hi(1,2)*gc+hi(1,3)*bc+16,蓝色色度分量cb=hi(2,1)*rc+hi(2,2)*gc+hi(2,3)*bc+128,红色色度分量cr=hi(3,1)*rc+hi(3,2)*gc+hi(3,3)*bc+128,rc、gc、bc分别表示原始的彩色的人物肖像图像的红、绿、蓝三个通道的像素值。通过以上方法计算得到的y、cb、cr这三个分量中的像素的值,如果大于236,则将像素值修改为236;y、cb、cr这三个分量中的像素的值,如果小于15,则将像素值修改为15,得到ycbcr图像。遍历ycbcr图像中的每个像素点,采用公式(3)计算各个像素点的肤色值skin为:
[0132]
skin(ii,jj)=(cos(2.54)*(cb(ii,jj)

109.39)+sin(2.54)*(cr(ij,jj)

152.03)

1.61)^2/(a^2)+
[0133]
(

sin(2.54)*(cb(ij,jj)

109.39)+cos(2.54)*(cr(ij,jj)

152.03)

2.42)^2/(b^2);(3)
[0134]
其中,cb(ii,jj)表示ycbcr图像中的第ii行、第jj列的像素点的蓝色色度分量cb的值;cr(ii,jj)表示ycbcr图像中的第ii行、第jj列的像素点的红色色度分量cr的值;a、b
为自定义的椭圆肤色模型的长轴、短轴,a=25.39;b=14.03。如果skin<=1,则将第ii行、第jj列的像素点标记为皮肤点,可以用于表示肖像中的皮肤,所有皮肤点的集合为皮肤区域,皮肤区域如图15中的白色区域所示。
[0135]
采用上述公式(2)、(3)的方法可计算并标记出原始彩色的人物肖像图像中的所有可以用于表示皮肤的像素点。将所有可用于表示皮肤的像素点的集合作为感兴趣区域,采用上述的生成黑色的线画肖像的方法,再次生成表示皮肤区域的线画肖像的起点及后续连接点,并以原始的人物彩色肖像图像中的皮肤区域的像素点的r通道的均值作为连线的r值,以原始的人物彩色肖像图像中的皮肤区域的像素点的g通道的均值作为连线的g值,以原始的人物彩色肖像图像中的皮肤区域的像素点的b通道的均值作为连线的b值,则以r值、g值、b值三个值为颜色的连线,依次连接表示皮肤区域的线画肖像的起点及后续连接点,即可构成肤色线肖像画,如图16所示,可以看出以肤色作为连线的颜色,多条连线很好的覆盖了皮肤区域,对还原人物肖像的肤色具有一定的帮助;将该肤色的线肖像画叠加到黑色线肖像画上,最终构成了彩色的线肖像画,如图17所示,可以看出黑色线肖像画对人物的头发、眉毛、眼睛、鼻子、嘴巴和脸部轮廓具有很好的表征,在此基础上叠加的肤色的线肖像画很好的还原了皮肤区域,最终生成的线肖像画具有一定的层次感,且细节还原度高。
[0136]
本发明首先获取原始的人物彩色肖像图像,然后进行图像灰度化,生成包围肖像的圆形蒙版,在圆形蒙版的圆周上均匀的布设锚点,并计算各个锚点的坐标;计算线肖像画的起点,提出两个锚点的连线所经过的像素的查找方法;依次计算线肖像画的后续连接点,实现锚点的顺序存储,以黑色连线依次连接起点和后续连接点,生成黑色的线肖像画;去除黑色的线肖像画的冗余,保留交点,得到较为精细的黑色线肖像画;检测原始的人物彩色肖像图像中的皮肤区域,并以同样的方法针对皮肤区域生成起点和200个后续连接点,并依次连线,其中设定连线的颜色为肤色,肤色连线叠加到黑色线肖像画上,得到彩色线肖像画。本发明的方法具有自动化程度高、计算速度快和人物肖像还原精度高等有益效果,为人物肖像画生成提供了技术支撑,同时该研究思路与方法也可以推广应用到其它字符、标志等图案的生成,具有很高的实用价值。
[0137]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1