专利名称:眼睛对电脑光标自动定位控制方法和系统的制作方法
技术领域:
本发明涉及人机交互和计算机视觉控制技术,尤其是眼睛对电脑的光标自动定位方法和系统。
背景技术:
电脑自从进入使用GUI(图形用户界面)的时代以来,鼠标(包括机械和光电式)的光标定位逐渐成为电脑操作中不可或缺的输入工具,其重要性对于部分初级使用者来说甚至高于键盘。的确,在进行某些操作时,鼠标其输入效率要远高于键盘。但从另一方面来讲,当使用者无法使用鼠标时,包括在特种场所的输入控制信号——输入便会变得极为不便——对于手部残疾者来说这点尤为突出——因为他们除了无法使用鼠标以外,也无法使用键盘。这造成的直接后果是,对于此类人群,操作计算机便是“不可能完成的任务”。
除此之外,传统鼠标还有一项缺点,便是长时间使用会对腕部肌肉造成物理性伤害,令使用者产生酸痛感,严重时甚至造成长期性的难以治愈的肌肉疾病。此点已得到医学研究证明。出于此类原因,我们迫切的需要一种新的技术来解决此问题。即使用另一种输入设备来代替鼠标,帮助使用者来操作电脑的光标。
用眼睛可以做到这一点。因为电脑最主要的输出设备无疑是显示器。对于任何使用者,离了别的输出设备是可以使用电脑的,单显示器不行。而我们接受显示器输出信息的器官是眼睛。也就是说,无论如何使用电脑,我们必须使用眼睛来接受电脑反馈的信息。于是相应的,若我们的眼睛可以接受电脑反馈的信息,那我们的眼睛也可以提供信息告知电脑我们如何使用电脑。
2004年9月20日有报导渥太华信息技术研究所的发明家Dmitry Gorodnichy发明了一种新的计算机导航系统,该系统放弃了传统的鼠标,而选择鼻子来引导图标进行网页浏览。眨巴一下左眼或右眼,就相当于点击左右鼠标。但未公布技术的细节。
发明内容
本发明的目的是提出一种以眼睛实现对电脑(包括具有GUI的电器或监视器)的光标自动定位方法和系统,包括以眼睛对电脑的光标进行控制。
本发明的目的是这样实现的眼睛对电脑的光标自动定位和控制方法和系统,其特征是首先系统进行初始化以摄像头分别拍摄使用者注视电脑监视器四个角时的眼部图像,将图像变换成灰阶式数组,对数组动态处理,对剩余的值中最大有效区域进行均值处理选取其中心,算出每幅图像的瞳孔中心位置,根据这四个点瞳孔中心位置和系统显示的部分属性建立模型获取四极点对应的全图坐标后,根据四点算出其中心位置M。以四点建立四边形,再将四边形修整为矩形,算出矩形的长与宽,并与显示器的长宽相除,算出分别的比例KW,KH,此比例用于确定眼睛控制监视器位置时瞳孔位置与监视器的光标对应位置的关系。
本发明改进是根据上述四个点瞳孔中心位置和系统显示的部分属性建立模型将图像变换成灰阶式数组,对数组动态处理,并根据阈值对数组进行处理(包括对数组的边角进行处理,使无效区的值失效,对于眼球外部区域的黑色阈值数据全部使其无效),对剩余的值中最大有效区域进行处理多维多次均值选取其中心,获取四极点对应的全图坐标后,根据四点算出其中心位置M。以四点建立四边形,根据四边形对角线算出坐标与水平线的偏转量K。再将四边形修整为矩形,算出矩形的长与宽,并与显示器的长宽相除,算出分别的比例KW,KH。
自动跟踪时的点的发送,拍摄获得实时眼部图像后,根据前文的方法获得对应坐标N。算出M,N的距离及过M,N的直线的斜率,减K后获得相对斜率,之后以此斜率和两点距离、KW、KH算出监视器上的对应位置,之后通过系统函数移动光标。
用眼睛发送类似于鼠标单击的命令本发明的方法和系统设有“单击”命令也将是用眼睛发送。此事件具体定义为,当鼠标在某一可以接受单击命令的区域内停留两秒,系统自动发送一个单击命令到目标区域。
当然,可以定义眨眼为双击。根据此中心选定热区,热区适当降低阈值重新二值化,对二值化过的热区重新选取黑区中心,中心值是否有效,根据事先建立的模型发送光标到相应位置。
这之后便可算出瞳孔大致中心。此时采用的算法可以叫做单线扫描。程序从Boolean型数组第一横行逐点扫描,在第一次扫倒点的横行记一次,再到第一次没扫倒点的横行记一次,取两次均值。竖行同理。虽说该算法会在图片有两块黑色区域时产生错误(例如眼角处也取得较大黑区),但这种机率较小。
第一次取中心代码根据上述计算。通过系统初始化,可建立位置对应模型,以方便之后的使用过程中光标的放置。
图1是本发明的RGB颜色模型,用于将彩图转为灰阶数组 图2是本发明原像未处理图2a,经处理后图2b变化成黑白图像的示意图 图3是以不同阀值二值化图像变换示意图,图3a原图,图3b以170为阈值二值化,图3c阈值为180,图3d阈值为190,图3e阈值200,图3f阈值为210 图4是本发明主流程处理示意图,图5是流程的具体示意图
具体实施例方式 瞳孔中心位置判断算法模块程序将实时采集使用者眼部图片。获得图片后,本程序需先将图片转为灰阶数组,即值的范围为0-255,尺寸与原图片相同。此转换需获取每点RGB分量值。为了加快速度,使用LockBits函数,锁定并读取此段内存,直接获得各点各分量的Byte型值。处理一幅320*240的Bitmap用此函数需耗时0.01秒,较使用GetPixel的0.16秒更具效率。此部分代码为 Dim bmpData As System.Drawing.Imaging.BitmapData=bmp.LockBits(rect,Imaging.ImageLockMode.ReadOnly,Imaging.PixelFormat.Format24bppRgb) Dim ptr As IntPtr=bmpData.ScanO Dim numBytes As Integer=rect.Width*rect.Height*3 Dim rgbValues(numBytes)As Byte System.Runtime.InteropServices.Marshal.Copy(ptr,rgbValues,0,numBytes)即将Bitmap型变量每点各分量复制入Byte型数组。
RGB颜色模型如图1所示,由于使用摄像头为黑白,图片中所有值均为灰度。根据RGB颜色模型,所有灰度值均在正方体的对角线上,也就是说R红、G绿、B蓝三者值相同。因此转灰阶时,只需抽取这三者中的任意一个。图中C青,M绛,Y黄,Bl黑,W白。又由于此时数组为一维,所以之后需进行以下操作Dim bmArrayS(rect.Width,rect.Height)As Short Dim t As Integer For h As Short=0 To rect.Height-1 For w As Short=0 To rect.Width-1 bmArrayS(w,h)=256-rgbValues(t)t+=3 Next 即每隔两点在一位数组里去一个值,排列在新建的二维数组内。新建二维数组与原图具有相同尺寸。这时的二维数组便是原图灰阶的量化数组。此转化即将图片转为Short型数组,可利于后期处理素的的加快。接下来,为了降低图片中噪音点对结果的影响,采用了模糊算法,即对3*3的范围内取均值。实际测试结果显示,该算法不但可洗去图片中噪音点,还可使各色块边缘较为圆滑。
图2是摄像图像经处理后变化图像,图3是以不同阀值二值化图像变换示意图,均是根据左右不同的眼睛的的拍摄的图像而进行的图形抽象, 若以170为阀值,则信息的损失最少,但同时,得到的无效信息也越多,如最左边的大片黑色区域,该区域会对结果产生很大影响,而且瞳孔周围仍有很多会对结果产生或多或少黑点;若以190为阀值,瞳孔周围的黑点消失了,但左侧黑色色块依然存在;若以210为阀值,左侧黑色色块消失了,但与此同时,瞳孔中的很多有效点也将被过滤掉,这有可能造成程序最后无法取得任何有效值。瞳孔的颜色相对其他区域是稳定的,一般都在200以上。据此,可通过二值化将瞳孔与眼球周围区域区别开,即提取出瞳孔区域。
二值化代码为 Dim bmArrayB(rect.Width,rect.Height)As Boolean For m=0 To rect.Height-1 For n=0 To rect.Width-1 If bmArrayS(n,m)>=fa Then bmArrayB(n,m)=True Else bmArrayB(n,m)=False End If Next n,m 经过这些处理,计算结果还有可能被图片边角的连续性黑色色块干扰(如经过模糊处理的效果显示图片中的左图的左上角的小面积黑区)。针对这些无效区,增加了一块自己命名为“去边角”的算法,作用为洗去图片边角连续的无效黑色区域。这样便可得到瞳孔的大致区域。“去边角”代码为(主要根据区域座标或位置来去边角连续的无效黑色区域) 如For n=0 To rect.Height-1 For m=0 To rect.Width-1 If bmArrayB(m,n)Then bmArrayB(m,n)=False Else Exit For End If Next 这之后便可算出瞳孔大致中心。此时采用的算法可以叫做单线扫描。程序从Boolean型数组第一横行逐点扫描,在第一次扫倒点的横行记一次,再到第一次没扫倒点的横行记一次,取两次均值。竖行同理。虽说该算法会在图片有两块黑色区域时产生错误(例如眼角处也取得较大黑区),但这种机率较小。
第一次取中心代码为 Dim x1,x2,y1,y2 As ShortDim ifFound As BooleanifFound=FalseFor m=0 To rect.Height-1<!-- SIPO <DP n="4"> --><dp n="d4"/>If ifFound=False ThenFor n=0 To rect.Width-1If bmArrayB(n,m)=True Theny1=mifFound=TrueExit ForEnd IfNextElseDim falsetime As Short=0For n=0 To rect.Width-1If bmArrayB(n,m)=False Then falsetime+=1NextIf falsetime=rect.Width Then y2=mifFound=FalseGoTo20End IfNext20For m=0 To rect.Width-1If ifFound=False ThenFor n=0 To rect.Height-1If bmArrayB(m,n)=True Thenx1=mifFound=TrueExit ForEnd IfNextElseDim falsetime As Short=0For n=0 To rect.Height-1If bmArrayB(m,n)=False Then falsetime+=1NextIf falsetime=rect.Height Then x2=mifFound=False<!-- SIPO <DP n="5"> --><dp n="d5"/>GoTo 30End IfNext30 此时取得的瞳孔中心与真实值相比,存在一定偏移。对此较为简单的解决方法当然是适当降低阀值。但若这样带来的问题也显而易见,即边角处无效点的增多。为解决此问题,采用的是对热区二次处理的方法,即在通过之前的处理之后,获得瞳孔中心大致位置,之后再以此位置为中心,自动选择一块矩形区域。在此区域内降低阀值再二值化处理一次。这样一来即可获得较多有效值,又可降低取得边角处无效值得机率。
选取热区代码为 Dim x1C,x2C,y1C,y2C As Shortx1C=x1*2-x2If x1C<0Then x1C=0x2C=x2*2-x1If x2C>rect.Width-1Then x2C=rect.Width-1y1C=y1*2-y2If y1C<0Then y1C=0y2C=y2*2-y1If y2C>rect.Height-1 Then y2C=rect.Height-1Dim bmHotB(x2C-x1C+2,y2C-y1C+2)As BooleanFor m=0 To y2C-y1C+1For n=0 To x2C-x1C+1If bmArrayS(n+x1C,m+y1C)>=fa-10ThenbmHotB(n,m)=TrueElsebmHotB(n,m)=FalseEnd IfNextNext 在此处理之后,程序将重新计算一次热区的黑区中心。这次的中心与之前的相比较为准确。
第二次选取中心代码为 For m=0 To y2C-y1C+1If ifFound=False ThenFor n=0 To x2C-x1C+1If bmHotB(n,m)=True Theny1=mifFound=TrueExit ForEnd IfNextElseDim falsetime As Short=0For n=0 To x2C-x1C+1If bmHotB(n,m)=False Then falsetime+=1NextIf falsetime=x2C-x1C+2Then y2=mifFound=FalseGoTo 40End IfNext 此时获得的中心为热区相对坐标,还需转化为全图坐标。
此部代码为 FindPointWithLockbits.X=(x2-x1)\2+x1C+x1+2+rect.X FindPointWithLockbits.Y=(y2-y1)\2+y1C+y1+2+rect.Y 使用PIVM1.9G 640MB测试,采用此算法系统光标位置刷性率约为每秒10帧。
此后便须将数组进行二值化处理,转为Boolean型数组,即True or False。此操作可减少甚至消除图片中图片中的大量无效信息。当然二值化处理的使用也是具有条件的,即关注区域灰度较为稳定,或存在一定规律性。(为更好的表示处理效果,后面的黑白单色图中黑色为True,白色为False。)这时在阀值的选取上便有一定的要求,因为选取不同的阀值往往对处理结果会有很大的影响。(图3)可以很好的说明该问题用眼睛发送类似于鼠标单击的命令 为了尽量脱离鼠标,本系统“单击”命令也将是用眼睛发送。此事件具体定义为,当鼠标在某一可以接受单击命令的区域内停留两秒,系统自动发送一个单击命令到目标区域。
特制的UIUI(图形界面)的各按钮均较大。这是因为本系统目前精准度并未达到可控制常见操作系统的要求,在此情况下大按钮可使操作更为简单。本发明的UI(用户界面)目前具有以下功能 ·图片浏览(自动加载“我的文档”中“图片收藏”内的JPG文件,“上”/“下”浏览上一幅/下一幅) ·文本浏览(自动加载桌面上的TXT文件,“上”/“下”浏览上一篇/下一篇) ·资源管理(磁盘查看,类似于Windows资源管理器) ·计算器 ·游戏 ·Mp3播放(自动加载My Music目录下Mp3文件,依次播放) ·时间显示 本发明当然可以用于数字电视的控制中,也可以使用于其它具有GUI的电器或监视器。
本发明的系统构成是包括无线或有线摄像头一套(可自带红外或黑白),如输出模拟信号则通过外接视频采集盒一个(USB接口)转化成数字信号;采用USB接口的数字摄像头更为简便的低成本。数字摄像头可以将模拟信号转为数字信号,可以是头戴式或置于监视器的侧边或角部,加上本发明完成的系统软件和UI用户界面显示和控制软件,构成一API程序将监视器的光标纳入控制,从而将构成ETMSA(Auto)-UI;ETMSA(Auto)-Cap(UIUser Interface,用户界面),获取图像并对光标进行控制。
本发明的系统模型可以基本健全及瞳孔中心位置判断,目前光标在监视器上的自动定位的精度可以达到20-40mm2分辨率,可以通过高分辨率的摄像设备和分辨率高的标线进行定位。实际使用时光标定位与使用者实际注视部位一般会有不超过1.5cm的偏移较好,可以通过较大的控制图标,并设计专用UI,间接解决了光标定位不够准确的问题。
权利要求
1、眼睛对电脑的光标自动定位和控制方法,其特征是首先系统进行初始化以摄像头分别拍摄使用者注视电脑监视器四个角时的眼部图像,将图像变换成灰阶式数组,对数组动态处理,对剩余的值中最大有效区域进行均值处理选取其中心,算出每幅图像的瞳孔中心位置,根据这四个点瞳孔中心位置和系统显示的部分属性建立模型获取四极点对应的全图坐标后,根据四点算出其中心位置M。以四点建立四边形,再将四边形修整为矩形,算出矩形的长与宽,并与显示器的长宽相除,算出分别的比例KW,KH,此比例用于确定眼睛控制监视器位置时瞳孔位置与监视器的光标对应位置的关系。
2、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是对灰阶式数组动态处理,对剩余的值中最大有效区域进行处理多维多次均值选取其中心。
3、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是以四点建立四边形后,根据四边形对角线算出坐标与水平线的偏转量K;再将四边形修整为矩形,算出矩形的长与宽,并与显示器的长宽相除,算出分别的比例KW,KH。
4、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是根据阈值对数组进行处理
5、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是对根据中心选定热区,热区适当降低阈值重新二值化,对二值化过的热区重新选取黑区中心,中心值是否有效,根据事先建立的模型发送光标到相应位置。且对数组的边角进行处理,使无效区的值失效,对于眼球外部区域的黑色阈值数据全部使其无效。
6、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是自动跟踪时的光标点位置控制信号的发送,拍摄获得实时眼部图像后,获得对应坐标N。算出M,N的距离及过M,N的直线的斜率,减K后获得相对斜率,之后以此斜率和两点距离、KW、KH算出监视器上的对应位置,之后通过系统函数移动光标。
7、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是用眼睛发送单击的命令光标在某一可以接受单击命令的区域内停留两秒,系统自动发送一个单击命令到目标区域。
8、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是用眨眼为双击。
9、根据权利要求1所述的眼睛对电脑的光标自动定位和控制方法,其特征是根据瞳孔大致中心后采用单线扫描方法程序从Boolean型数组第一横行逐点扫描,在第一次扫倒点的横行记一次,再到第一次没扫倒点的横行记一次,取两次均值。竖行同理。
10、眼睛对电脑的光标自动定位和控制系统,其特征是系统构成是包括无线或有线摄像头一套(可自带红外或黑白),如输出模拟信号则通过外接视频采集盒一个(USB接口)转化成数字信号;采用USB接口的数字摄像头更为简便的低成本。数字摄像头可以将模拟信号转为数字信号,可以是头戴式或置于监视器的侧边或角部,加上本发明完成的系统软件和UI用户界面显示和控制软件,构成一API程序将监视器的光标纳入控制。
全文摘要
眼睛对电脑的光标自动定位和控制方法,先系统进行初始化以摄像头分别拍摄使用者注视电脑监视器四个角时的眼部图像,将图像变换成灰阶式数组,对数组动态处理,对剩余的值中最大有效区域进行均值处理选取其中心,算出每幅图像的瞳孔中心位置,根据这四个点瞳孔中心位置和系统显示的部分属性建立模型获取四极点对应的全图坐标后,根据四点算出其中心位置M。以四点建立四边形,再将四边形修整为矩形,算出矩形的长与宽,并与显示器的长宽相除,算出分别的比例KW,KH,此比例用于确定眼睛控制监视器位置时瞳孔位置与监视器的光标对应位置的关系。
文档编号G06F3/01GK1889016SQ20061008608
公开日2007年1月3日 申请日期2006年7月25日 优先权日2006年7月25日
发明者周辰 申请人:周辰