一、概述
根据人体工程学及人体数据普查结果,结合画家素描时的基本要求,人的图像特点有:
(1)身高为头高的7到8倍,西方向种人为8(达芬奇用的比例),黄种人为6~7.5。
(2)根据服装设计界的数据国内男子身高与肩宽的比例为167:45,女子肩宽与臀围的比例(臀围比肩宽)162:90。服装设计师一般取肩宽为1.8个头长,躯干为2.9个头长。
(3)画家对人身高数据的掌握基本遵守:立七、坐五、盘三半,即人体站立为7个头高、人体坐姿为5个头高,人体蹲位为3.5个头高。小孩身高为3~4个头高。
(4)人正常情况下头部在上方,头部下边的脖子较细,肩部较宽。
(5)人在运动的过程中,由于四肢的运动、头部的摆动、农服的飘动等冈素使得其图像变化较其它运动目标大。但运动频率属于低频。
(6)人可以以腰部为中心做弯腰和后仰运动。
(7)一般情况下,人体肤色出现在头部、手部或颈部。
总上所述,可以初步确定人的图像高宽比如下:立姿3.5~8.5:1,坐姿4.5~5.5:1,蹲姿3.5~4.5:1。可以制作一个头、脖、肩的“凸”模裂,头作为定位基点。
二、数据结构
使用的人体外形模型如图所示,其数据结构为:
struct model_body
{
char name[20];
int lx,ly; //高为ly,宽为lx
struct data_pointermcdel_data;
struct blob_data_poimer model_blob_data;
}
struct data_pointet
{
chat id[3]; //000 is people model
int lxl, lx2, lyl, ly2; //模型外接矩形的左上和右下顶点坐标。
int lheadx, lheady; //头部相对外接矩形竖向中线对称,故只记左侧下方顶点坐标即可,
//头部上方与外接矩形[(xl,y1),(xl,y2-)]对齐。
int lneckx, lnecky; //脖子相对外接矩形竖向中线对称,故只记左侧F方顶点坐标即可,
//脖子与头部下方[(lheadx,y1),(Iheadx',y2)]对齐。
int lshouldy; //肩部相对外接矩形竖向中线对称,故只记左侧下方顶点Y坐标
//肩部宽度为外接矩形宽度。
int feature_1; //头部宽度
}
struct blob_data_pointer
{
char id[3]; //000is people model
char blob_id[3]; //blob id
int lx1, lx2, ly1, ly2: //blob的左上和右下项点坐标。
int color_v; //blob颜色信息
Struet blob_data_pointer *nextone; //链表
}
由于许多情况下,受发式、帽子、围巾、眼镜、口罩以及人的正面、侧面等的影响,很难得到人体头部的真实外形图像。匹配算法中要考虑一个匹配修正因子。本章以图像中人体头部的宽度与人体头部模穗的宽度比为模型实际参数的修正值。
外形匹配算法的数学描述如下:
对二值图像B(m,n),人体头部外形模型记为[l,k,r,q](l为行坐标最小值,k为行坐标最大值,r为列坐标最小值,q为列坐标最大值),如果有:
匹配不成功,否则匹配成功。式中:Q为匹配值,m,n为像素的行列坐标最大值。