最新三维交互技术算法及FPGA实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最新三维交互技术算法及FPGA实现

三维交互技术算法及FPGA实现概述:本算法设计主要采用双摄像头,基于双目视觉技术来定位3维手势。图像采集输入:图像输入只采集亮度信号,并且经过二值化,只采集255和0图像。存入到sdram。手部边缘提取总体思路如下:对获得的图像进行腐蚀。使用7*7的结构元,得到pHand然后再对腐蚀得到的图像进行膨胀。使用7*7的结构元,得到pHandOpen。对pHandOpen进行腐蚀运算。使用3*3结构元,得到pErode。使用pHandOpen 减去 pErode ,得到手部边缘,记为pHand。连通域判断总体思路如下:对边缘提取的图像进行漫水填充,使用areaNum对连通区域的个数进行计数漫水填充算法:1. 逐行扫描,当碰到第一个非0数据时(红色格),使用四连通进行填充,并且逐行进行,直到把这个连通域填充完毕,并把这个区域设为值1。2.继续逐行扫描,碰到非0和非1的数据时(绿色格),使用四连通进行填充,并且逐行进行,直到把这个连通域填充完毕,并把这个区域设为值2.3. 以此类推……NOTE:这里最多能有256个连通区域,值得注意算法实现考虑:考虑一个3*2窗口:P为像素值,为0或1.考虑块的标记值:如下:由这里看出,需要存储由标记值标记灰度的图像。以便后来进行去除其它干扰点时使用。以及在做标记处理的时候。必须同步读取标记好的数据。从头搜索像素:第一个点或第一行,左边点和上边点扩充0值。其他空白处不考虑。标记值初始化为1:连通域像素点个数计数值:开辟一个数组Sum[]:同时开辟等价关系数组K:等价关系数组为1个下标代表联通块,数组值代表这块标记的灰度值,如果两块的灰度标记值相等,则认为这两块是连通的。下面用lab()来表示K数组里面的值。1.Pn(0)如果为0.则窗口继续移动,如果1:判断if Pn(0)=Pn-1(0),则Ln(0)=Ln-1(0)Else if Pn(0)=Pn(1) 则Ln(0)=Ln(1), else 都不等:Pn(0)=Z, 把Z写入Z为下标的K数组,Z++;计数:判断if Pn(0)=Pn-1(0), 则下标为Ln-1(0)的Sum数组值+1;Else if Pn(0)=Pn(1) 则Ln(1)的 Sum数组值+1.2.两个块等价关系判断:如果 Pn(0)=Pn(1),Ln(0)!=Ln(1)而说明这两块是等价的。Ln(0)和Ln(1)标记是等价的。步骤一:如果Ln(0)Ln(1):并且lab(Ln(0))=Ln(0) 则说明Ln(0)块还未与其他块相连,或者是相连块里面标记最小的。则Lab(Ln(0))=lab(Ln(1)),让其与Ln(1)块相连。如果Lab(ln(0))!=Ln(0),则证明Ln(0)块已经于其他块相连,因此需要找到这一个块中标记最小得块,即Lab(t)=t的块,t为块标记。这里我们采取追踪标记的办法,令t=Lab(ln(0));即t是与lab(Ln(0))块相连的块,如果lab(t)=t则t块就是最小的块,以t和Ln(1)块比较。然后再重复步骤一:步骤二:Ln(0)Ln(1):并且lab(Ln(1))=Ln(1),则说明Ln(1)还未与其他块相连,或是相连块中最小标记的。则lab(Ln(1))=Ln(0)。如果lab(Ln(1))!=Ln(1),则证明Ln(1)块已经于其他块相连,因此需要找到这一个块中标记最小得块,即Lab(t)=t的块,t为块标记。这里我们采取追踪标记的办法,令t=Lab(ln(1));即t是与lab(Ln(1))块相连的块,如果lab(t)=t则t块就是最小的块,否则继续追踪,然后以t和Ln(0)块比较。然后再重复步骤一:3.遍历等价关系表数组,以(标记值内的值)作为数组下标的单元的值去跟新原值:用C语言表示即:*p=*(*p)。4.把每个等价的计数单元相加,找出最大值。5.根据等价关系数组更新图像。6.把除最大连通域部分图像清零。保留最大的连通分量总体思路如下:如果areaNum的值为零,代表这帧图像中没有连通域,则直接返回零值。如果areaNum不为零,进行逐行扫描,建立一个数组pAreaPixs[j],比较当前像素的pTemp[j]和areaNum的大小,如果pTeam[j]的值小于等于areaNum的值且pTeam[j]的值大于零,则pAreaPixs[pTeam[j]-1]加一。此时pTeam[j]的值为上一步中区域的赋值,扫描结束整副图像,最后得到一个数组,其中的最大值为连通域的最大值maxLen,进而得到最大连通域的maxIndex(实际上也是areaNum-1)。通过判断pTemp[j]和maxIndex+1的值是否相等,来标记出最大的连通分量,作为手指的区域。提取指尖坐标思路如下:如果没有连通分量,直接返回;有连通分量,寻找轮廓的起始点,遍历所

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档