一种图像处理方法转让专利

申请号 : CN201510279425.5

文献号 : CN104850233B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 冯志全

申请人 : 济南大学

摘要 :

本发明提供了一种图像处理,属于计算机人机交互界面领域。该方法包括:(1)利用摄像头输入用户手势图像,设定窗口尺寸,将脸部框出来并保存脸框的信息,即脸框的左上角的位置、高和宽;(2)根据步骤(1)保存的脸框的左上角的位置、高和宽,将窗口中的脸框位置的图像置成背景色;(3)通过肤色模型判断肤色点和非肤色点;(4)根据所述脸框在窗口中的信息,依次扫描窗口,分别找出脸框的像素点对应的小窗口;(5)对小窗口进行去噪,消除非肤色的影响;(6)获取所述小窗口的质心;(7)根据质心和小窗口的信息,得到这个小窗口的正方小窗口的半边长;(8)再次缩小小窗口:根据步骤(7)得到的正方小窗口的半边长,获得新的正方小窗口。

权利要求 :

1.一种图像处理方法,其特征在于:所述方法包括:(1)利用摄像头输入用户手势图像,设定窗口尺寸,将脸部框出来并保存脸框的信息,即脸框的左上角的位置、高和宽;

(2)根据步骤(1)保存的脸框的左上角的位置、高和宽,将窗口中的脸框位置的图像置成背景色;

(3)通过肤色模型判断肤色点和非肤色点;

(4)根据所述脸框在窗口中的信息,依次扫描窗口,分别找出脸框的像素点对应的小窗口;

(5)对小窗口进行去噪,消除非肤色的影响;

(6)获取所述小窗口的质心;

(7)根据质心和小窗口的信息,得到这个小窗口的正方小窗口的半边长;

(8)再次缩小小窗口:根据步骤(7)得到的正方小窗口的半边长,获得新的正方小窗口;

(9)根据正方小窗口的信息,依次扫描正方小窗口,分别找出肤色像素点对应的小窗口;

(10)执行去胳膊操作,只保留手势;

其中,上述步骤(7)中所述的小窗口的信息由该小窗口的高、宽、左上角位置信息组成;

该步骤(7)是这样实现的:

(71)按从上到下,从左到右的顺序扫描小窗口像素值,如果当前扫描列对应的行的非背景点的个数大于一个阈值,则结束并记下当前的列坐标,否则继续扫描下一列;

(72)按从下到上,从左到右的顺序依次扫描小窗口像素值,如果当前扫描列对应的行的非背景的个数大于一个阈值,则结束并记下当前的列坐标,否则继续扫描下一列;

(73)按从左到右,从上到下的顺序依次扫描小窗口的像素值,如果当前扫描行对应的列的非背景点的个数大于一个阈值,则结束并记下当前的行坐标,否则继续扫描下一行;

(74)在当前指针对应的窗口中,按照从右到左,从上到下的顺序依次扫描该窗口的像素值,如果当前扫描行对应的列的非背景点的个数大于一个阈值,则结束并记下当前的行坐标,否则继续扫描下一行;

(75)分别计算质心到(71)、(72)、(73)、(74)得到的坐标信息的距离;

(76)将(75)得到的四个距离中的最大的一个距离作为生成下一个小窗口的半边长,即正方小窗口的半边长。

2.根据权利要求1所述的图像处理方法,其特征在于:所述步骤(3)是这样实现的:所述肤色模型为:

r>95&&g>40&&b>20&&abs(r-g)>15&&r>g&&r>b,r、g、b是像素点对应的三个颜色分量,分别为红、绿、蓝;如果满足肤色模型,则该像素点是肤色点,否则为非肤色点,将窗口中的非肤色的2*2的小块置成背景色。

3.根据权利要求2所述的图像处理方法,其特征在于:所述步骤(5)包括:(51)获得图像的首地址和图像的高度、宽度及每行字节数;

(52)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列开始,遍历图像的像素点;

(53)求出像素点的b、g、r分量,判断像素点是背景色还是分割的手势颜色,如果是手势颜色,则计算该像素点的上、下、左、右、左上、左下、右上、右下八个方向的像素点对应的b、g、r分量;

(54)判断八个邻域中,如果有points个点是白点,则认为此点是噪声点,并将该点置为背景色,所述的points≥4;

(55)循环步骤(53)~(54),直到处理完原图的全部像素点。

4.根据权利要求3所述的图像处理方法,其特征在于:所述步骤(6)是这样实现的:(61)根据帧指针和小窗口的高和宽,得到当前小块对应的RGB值;

(62)如果当前小块的RGB满足肤色模型,则执行步骤(63),否则执行步骤(61);

(63)计算满足肤色模型小块的坐标值的累加;

(64)当小窗口中的小块都扫描完一遍,将累加值求平均得到满足肤色模型小块的坐标值的均值,即质心。

5.根据权利要求1所述的图像处理方法,其特征在于:所述步骤(8)是这样实现的:(81)获取当前小窗口的一行字节数及即将提取出的正方小窗口的一行字节数;

(82)根据所要提取出的正方小窗口左上角的位置信息,依次获取这个正方小窗口的信息。

6.根据权利要求5所述的图像处理方法,其特征在于:所述步骤(10)是这样实现的:(101)获取当前帧窗口所对应的质心;

(102)从左到右,从上到下依次扫描每一个小块,其中行从左到右扫描到当前窗口对应的宽度Width/4,获取当前小块及下一列相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一行的扫描,否则将非背景像素点的个数累加;

(103)如果(102)得到的累加像素点个数是非零,则获取手与窗口左边界的交点;

(104)从右到左,从上到下依次扫描每一个小块,其中行从右到左扫描到3/4Width,获取当前小块及下一列相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一行的扫描,否则将非背景像素点的个数累加;

(105)如果(104)得到的累加像素点个数是非零,则获取手与窗口右边界的交点;

(106)从下到上,从左到右依次扫描每一个小块,其中列从当前窗口对应的高度3/

4Height到上扫描,获取当前小块及下一行相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一列的扫描,否则将非背景像素点的个数累加;

(107)如果(106)得到的累加像素点个数是非零,则获取手与窗口下边界的交点;

(108)根据窗口与左、右、下边界像素点所占的百分比,占最大比例的那边即胳膊所在的边;

(109)获取质心和胳膊所在边的连线,求出其方向向量;

(110)从质心到胳膊所在的边的连线中,找到手腕的位置,将非手的部分置成背景色。

7.根据权利要求6所述的图像处理方法,其特征在于:所述步骤(110)中找到手腕的位置是这样实现的:在从质心到胳膊所在的边的连线t=t/5.0处即手腕的位置。

说明书 :

一种图像处理方法

技术领域

[0001] 本发明属于计算机人机交互界面领域,具体涉及一种图像处理方法。

背景技术

[0002] 在很多提取手势中,一般不会考虑去除手腕部分,常常借用外部物体将手腕及胳膊部分遮住,这样就会只保留手势。采用上述方法并没有真正实现为使用者的服务,而是让用户适应计算机,所以为了更好的实现“以人为中心”的原则,需要考虑露出手腕进行操作的情形,因此除去手腕是必要的;同时,目前通过借用遮挡手腕及胳膊的方法并不能真正达到只保留手势的效果。

发明内容

[0003] 本发明的目的在于解决上述现有技术中存在的难题,提供一种图像处理方法,利用摄像头输入用户手势图像,去除手腕而只保留手势。
[0004] 本发明是通过以下技术方案实现的:
[0005] 一种图像处理方法,包括:
[0006] (1)利用摄像头输入用户手势图像,设定窗口尺寸,将脸部框出来并保存脸框的信息,即脸框的左上角的位置、高和宽;
[0007] (2)根据步骤(1)保存的脸框的左上角的位置、高和宽,将窗口中的脸框位置的图像置成背景色;
[0008] (3)通过肤色模型判断肤色点和非肤色点;
[0009] (4)根据所述脸框在窗口中的信息,依次扫描窗口,分别找出脸框的像素点对应的小窗口;
[0010] (5)对小窗口进行去噪,消除非肤色的影响;
[0011] (6)获取所述小窗口的质心;
[0012] (7)根据质心和小窗口的信息,得到这个小窗口的正方小窗口的半边长;
[0013] (8)再次缩小小窗口:根据步骤(7)得到的正方小窗口的半边长,获得新的正方小窗口;
[0014] (9)根据正方小窗口的信息,依次扫描正方小窗口,分别找出肤色像素点对应的小窗口;
[0015] (10)执行去胳膊操作,只保留手势;
[0016] 其中,上述步骤(7)中所述的小窗口的信息由该小窗口的高、宽、左上角位置信息组成;该步骤(7)是这样实现的:
[0017] (71)按从上到下,从左到右的顺序扫描小窗口像素值,如果当前扫描列对应的行的非背景点的个数大于一个阈值,则结束并记下当前的列坐标,否则继续扫描下一列;
[0018] (72)按从下到上,从左到右的顺序依次扫描小窗口像素值,如果当前扫描列对应的行的非背景的个数大于一个阈值,则结束并记下当前的列坐标,否则继续扫描下一列;
[0019] (73)按从左到右,从上到下的顺序依次扫描小窗口的像素值,如果当前扫描行对应的列的非背景点的个数大于一个阈值,则结束并记下当前的行坐标,否则继续扫描下一行;
[0020] (74)在当前指针对应的窗口中,按照从右到左,从上到下的顺序依次扫描该窗口的像素值,如果当前扫描行对应的列的非背景点的个数大于一个阈值,则结束并记下当前的行坐标,否则继续扫描下一行;
[0021] (75)分别计算质心到(71)、(72)、(73)、(74)得到的坐标信息的距离;
[0022] (76)将(75)得到的四个距离中的最大的一个距离作为生成下一个小窗口的半边长,即正方小窗口的半边长。
[0023] 所述步骤(3)是这样实现的:
[0024] 所述肤色模型为:
[0025] r>95&&g>40&&b>20&&abs(r-g)>15&&r>g&&r>b,r、g、b是像素点对应的三个颜色分量,分别为红、绿、蓝;如果满足肤色模型,则该像素点是肤色点,否则为非肤色点,将窗口中的非肤色的2*2的小块置成背景色。
[0026] 所述步骤(5)包括:
[0027] (51)获得图像的首地址和图像的高度、宽度及每行字节数;
[0028] (52)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列开始,遍历图像的像素点;
[0029] (53)求出像素点的b、g、r分量,判断像素点是背景色还是分割的手势颜色,如果是手势颜色,则计算该像素点的上、下、左、右、左上、左下、右上、右下八个方向的像素点对应的b、g、r分量;
[0030] (54)判断八个邻域中,如果有points个点是白点,则认为此点是噪声点,并将该点置为背景色,所述的points≥4;
[0031] (55)循环步骤(53)(~ 54),直到处理完原图的全部像素点。
[0032] 所述步骤(6)是这样实现的:
[0033] (61)根据帧指针和小窗口的高和宽,得到当前小块对应的RGB值;
[0034] (62)如果当前小块的RGB满足肤色模型,则执行步骤(63),否则执行步骤(61);
[0035] (63)计算满足肤色模型小块的坐标值的累加;
[0036] (64)当小窗口中的小块都扫描完一遍,将累加值求平均得到满足肤色模型小块的坐标值的均值,即质心。
[0037] 所述步骤(8)是这样实现的:
[0038] (81)获取当前小窗口的一行字节数及即将提取出的正方小窗口的一行字节数;
[0039] (82)根据所要提取出的正方小窗口左上角的位置信息,依次获取这个正方小窗口的信息。
[0040] 所述步骤(10)是这样实现的:
[0041] (101)获取当前帧窗口所对应的质心;
[0042] (102)从左到右,从上到下依次扫描每一个小块,其中行从左到右扫描到当前窗口对应的宽度Width/4,获取当前小块及下一列相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一行的扫描,否则将非背景像素点的个数累加;
[0043] (103)如果(102)得到的累加像素点个数是非零,则获取手与窗口左边界的交点;
[0044] (104)从右到左,从上到下依次扫描每一个小块,其中行从右到左扫描到3/4Width,获取当前小块及下一列相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一行的扫描,否则将非背景像素点的个数累加;
[0045] (105)如果(104)得到的累加像素点个数是非零,则获取手与窗口右边界的交点;
[0046] (106)从下到上,从左到右依次扫描每一个小块,其中列从当前窗口对应的高度3/4Height到上扫描,获取当前小块及下一行相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一列的扫描,否则将非背景像素点的个数累加;
[0047] (107)如果(106)得到的累加像素点个数是非零,则获取手与窗口下边界的交点;
[0048] (108)根据窗口与左、右、下边界像素点所占的百分比,占最大比例的那边即胳膊所在的边;
[0049] (109)获取质心和胳膊所在边的连线,求出其方向向量;
[0050] (110)从质心到胳膊所在的边的连线中,找到手腕的位置,将非手的部分置成背景色。
[0051] 所述步骤(110)中找到手腕的位置是这样实现的:
[0052] 在从质心到胳膊所在的边的连线t=t/5.0处即手腕的位置。
[0053] 与现有技术相比,本发明的有益效果是:本发明较好的保留了手势,去除了手腕,为后面的获取手势轨迹及手势识别作准备。

附图说明

[0054] 图1 本发明方法的步骤框图。

具体实施方式

[0055] 下面结合附图对本发明作进一步详细描述:
[0056] 本方法在框脸的基础上进行的添加,具体流程图如图1所示:
[0057] 首先假设大框(指图像)是:400*30,400*300是做的一个假设,也可以做其他大小的假设,该发明对其他大框都是适用的。
[0058] 具体实现步骤:
[0059] (1)首先,实现框脸功能并保存脸位置的信息,即框的左上角的位置、高和宽;
[0060] (2)根据步骤(1)框信息(指框的左上角的位置、高和宽),将400*300窗口(Back_new(Back_new是定义指向图像的指针,其设置图像的大小是400*300))中的框位置(是指步骤(1)得到的框)的图像置成背景色即黑色;
[0061] (3)将400*300窗口中的非肤色(通过肤色模型来进行判断的,如果(r>95&&g>40&&b>20&&abs(r-g)>15&&r>g&&r>b)条件成立,则该像素点是肤色点,否则认为是非肤色点)的2*2的小块置成背景色即黑色
[0062] (4)在400*300中根据(1)中获取的脸的高和宽来提取出相应的小窗口pBGR_Buffer(根据框脸在大窗口中的信息如高、宽、左上角信息,依次扫描400*300的窗口,分别找出框脸的像素点对应的小窗口)
[0063] (5)对小窗口进行去噪,消除非肤色的影响
[0064] 具体步骤为:
[0065] (51)获得图像的首地址和图像的高度、宽度及每行字节数;
[0066] (52)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列开始,遍历图像的像素点;
[0067] (53)求出像素点的b、g、r分量,判断像素点是背景色还是分割的手势颜色,如果是手势颜色,则计算该像素点的上、下、左、右、左上、左下、右上、右下八个方向的像素点对应的b、g、r分量;
[0068] (54)判断八个邻域中,如果有points个(如大于等于4个)点是白点,则认为此点是噪声点,并将该点置为背景色;
[0069] (55)循环步骤(53)(~ 54),直到处理完原图的全部像素点。
[0070] (6)获取pBGR_Buffer对应小窗口的质心(采用下面的函数D2POINT_int GetRedHand_zhixin来实现),假设是:small_tt
[0071] (7)根据质心small_tt和小窗口的信息(指小窗口的高、宽、左上角位置信息),得到这个小窗口的正方小窗口(指小窗口是正方形即边长等长)的半边长(采用下面的函数int Small_edge得到的)
[0072] (8)由于(7)所求的半边长edge大(由于前面所求的正方小窗口并不是最小包围盒,所以这个正方小窗口并不能保证其四边与肤色像素点都有交点),所以现在根据实时需要缩小窗口的边长,实现去手腕的主要思路是:保证小窗口的边界至少有一边与手有交点,所以下面就是去实现再次缩小小窗口
[0073] (9)根据(8),得到新的小窗口(采用下面的函数Small_CutImageGesture实现的):new_imageinformation
[0074] (10)从pBGR_Buffer指向的小窗口中提取出与手至少有交点的小窗口即指针(根据正方小窗口的信息如高、宽、左上角信息,依次扫描正方小窗口,分别找出肤色像素点对应的小窗口):Small_pBGR_Buffer
[0075] (11)执行去胳膊(去胳膊是为手势识别、手势交互做准备)的函数(最后可在露出胳膊的情形下较好只保留手势,这为后面进行手势识别准准备,同时也使手势质心位置的准确性得到极大的提高):
[0076] Remove_arm(Small_pBGR_Buffer,new_imageinformation,1,1)
[0077] 其中:Small_pBGR_Buffer是指向小窗口的指针;
[0078]      new_imageinformation是小窗口的属性信息
[0079] 主要函数说明如下:
[0080] 1:D2POINT_int GetRedHand_zhixin (BYTE *pIBuffer,int h,int w)[0081] 说明:本函数只要首先获取窗口肤色的质心
[0082] 输入:当前帧图像的指针pIBuffer、窗口分成小块的高:h和宽:w
[0083] 输出:当前帧图像的质心坐标X和Y
[0084] 其中D2POINT_int是新定义的一个结构体,如下:
[0085] struct D2POINT_int
[0086] {
[0087] int x;/////实现记录坐标X
[0088] int y;/////实现记录坐标Y
[0089] };
[0090] 实现的具体步骤是:
[0091] (1)根据帧指针和小框的高和宽,可得到当前小块对应的RGB值
[0092] 这主要是通过依次扫描行列获取每个像素点的R,G,B值
[0093] (2)根据肤色模型(r>95&&g>40&&b>20&&abs(r-g)>15&&r>g&&r>b(这是肤色模型,其中的r,g,b是像素点对应的三个颜色分量,分别为红,绿,蓝)),如果当前小块的RGB满足这个肤色模型,则执行步骤(3),否则执行步骤(1)(主要是通过让行或者列的控制变量累计即可完成)
[0094] (3)计算满足肤色模型小块的坐标值的累加(将满足肤色模型的位置相加,肤色模型位置是通过行列的控制变量来表示的)
[0095] (4)当窗口中的小块都扫描完一遍,则得到满足肤色模型小块的坐标值的均值(均值就是指累加求平均,也可以理解为质心)。
[0096] 2:int Small_edge(BYTE *pImageSrc,D4POINT ImageInformation,D2POINT zhixin)
[0097] 说明:本函数主要实现当前窗口至少与手的边界相交
[0098] 输入:指向当前窗口的指针:pImageSrc、当前窗口的位置信息:ImageInformation、质心位置信息:zhixin(在总步骤分别pBGR_Buffer,
imageinformation,Small_tt1)
[0099] 输出:获取根据输入信息得到的窗口的半边长即实现包围手的最小边界长[0100] 具体实现步骤:
[0101] (1)    在当前指针对应的窗口中,按从上到下,从左到右的顺序扫描窗口像素值,如果当前扫描列对应的行的非背景点的个数大于一个阈值(根据实验得到的),则结束并记下当前的列坐标,否则继续扫描下一列。
[0102] (2)    同样对当前指针对应的窗口中,按从下到上,从左到右的顺序依次扫描该窗口像素值,如果当前扫描列对应的行的非背景的个数大于一个阈值,则结束并记下当前的列坐标,否则继续扫描下一列。
[0103] (3)    在当前指针对应的窗口中,按照从左到右,从上到下的顺序依次扫描该窗口的像素值,如果当前扫描行对应的列的非背景点的个数大于一个阈值,则结束并记下当前的行坐标,否则继续扫描下一行。
[0104] (4)    在当前指针对应的窗口中,按照从右到左,从上到下的顺序依次扫描该窗口的像素值,如果当前扫描行对应的列的非背景点的个数大于一个阈值,则结束并记下当前的行坐标,否则继续扫描下一行。
[0105] (5)    分别计算参数zhixin到(1)、(2)、(3)、(4)得到的坐标信息的距离[0106] (6)    将(5)得到的四个距离中的最大的一个距离作为生成下一个小窗口的半边长。
[0107] 3:void Small_CutImageGesture(BYTE *pImageSrc,BYTE
[0108] *imagedataCut,D4POINT ImageInformation,D4POINT New_ImageInformation)[0109] 说明:本函数实现从小窗口中再提取出更小窗口
[0110] 输入:当前帧图像的指针pImageSrc、更小窗口的指针imagedataCut、当前窗口位置信息ImageInformation、更小窗口位置信息ImageInformation
[0111] 输出:得到所要提取的更小窗口的指针
[0112] 具体实现步骤:
[0113] (1)   首先,得到当前窗口的一行字节数及即将提取出的小窗口的一行字节数;
[0114] (2)   根据所要提取出的小窗口左上角的位置信息,依次获取这个更小窗口的信息,最后imagedataCut就指向所要提取位置的信息
[0115] 4:void Remove_arm(BYTE *pImageBuffer,D4POINT ImageInformation,int h,int w)
[0116] 说明:本函数主要实现去胳膊,保留手
[0117] 输入:当前窗口的指针pImageBuffer、窗口的位置信息ImageInformation、将窗口所分小块的高和宽即h和w
[0118] 输出:去除胳膊,保留手
[0119] 具体实现步骤:
[0120] (1)首先,获取当前帧窗口所对应的质心
[0121] (2)从左到右,从上到下依次扫描每一个小块,其中行从左到右扫描到Width(指当前窗口对应的宽度的上部分)/4,获取当前小块及下一列相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一行的扫描,否则是非背景像素点个数的累加(即将非背景的像素点的个数相加)。
[0122] (3)如像素点个数(是指上面累加的个数)是非零,则获取手与窗口左边界的交点(通过行列依次扫描该窗口的像素点)
[0123] (4)从右到左,从上到下依次扫描每一个小块,其中行从右到左扫描到Width-(Width/4),即扫描到3/4Width,获取当前小块及下一列相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一行的扫描,否则是非背景像素点个数的累加。
[0124] (5)如像素点个数是非零,则去获取手与窗口右边界的交点
[0125] (6)从下到上,从左到右依次扫描每一个小块,其中列从Height(指当前窗口对应的高度的一部分)-(Height/4),即从3/4Height到上扫描,获取当前小块及下一行相邻小块的像素值,如果相邻下一个像素值是背景,则进行下一列的扫描,否则是非背景像素点个数的累加。
[0126] (7)如像素点个数是非零,则去获取手与窗口下边界的交点
[0127] (8)根据窗口与左、右、下边界像素点所占的百分比,占最大比例的那边就是胳膊所在的边。
[0128] (9)得到窗口肤色像素点的质心(是指前面得到的质心)和胳膊所在边(是指窗口与左、右、下边界像素点所占的百分比,占最大比例的那边就是胳膊所在的边)的连线,求出其方向向量
[0129] (10)从质心到胳膊边界(是指窗口与左、右、下边界像素点所占的百分比,占最大比例的那边就是胳膊所在的边)的过程中,在t(t是一个变量)=t/5.0时就大概得到手腕的位置,此刻就可以将非手的部分置成背景色。
[0130] 上述技术方案只是本发明的一种实施方式,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施方式所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。