好久没写博客了,最近在做一个教授给的任务,任务要求就是使用华硕的Xtion pro 这个设备(和微软的Kinect差不多)来识别一个一个的小机器人的位置和角度。
做之前什么都不知道,上网查了好多资料,但是中文的资料较少,所以写点东西出来一是给自己记录,而是方便以后研究这个东西的童鞋。
首先介绍一下思路:
Aruco是一个做显示增强技术的库,但是我只要它的识别坐标和角度的功能
OPENNI2 相当于是个驱动库,提供调用设备各种功能的接口,在这个项目中我要用到深度数据流和彩色数据流,其他的功能像是人体检测什么的我就不需要了。
OpenCV是个很好用的图像处理库,用它来处理和显示设备获取的图像,比如进行图像格式转换,去噪之类的操作
因为现在VS2013免费了,就用VS2013了,配置OpenCV的帖子地址如下:
http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html
然后是OpenNI2 和 OpenGL结合的一个小例子
http://www.cnblogs.com/yemeishu/archive/2013/01/11/2856859.html
最后是配置Aruco,下面链接是这个库的下载链接,最新的是1.2.5版
http://sourceforge.net/projects/aruco/files/1.2.5/
在装好环境后,测试一下Aruco
下面来说一下距离数据的作用,下图是原图经过提取轮廓后的图片,图片中间是个水壶,上面有个标签,可以看到乱七八糟的东西很多,不方便进行图像识别
写了个简单的过滤方法,因为距离数据和图像数据是对应的,所以可以设定一个距离的阈值来删掉不需要的部分,我的做法很蠢,一个像素一个像素的比较,所以速度很慢,希望大家给我点更好的建议,来几块这个速度。下面这张图就是通过距离过滤后的图像,我把标签放在小纸盒子上面。识别的还是很准的
但是我现在的问题是摄像头的距离不能太高,不然识别不出来,华硕Xtion的视频最大分辨率是1280*1024,教授要求的工作空间很大,所以要把摄像头悬挂在离地大约2.5米的地方,这样分辨率就不够用了。 就地取材买了个木棍子几个束线带就给固定了:
下图就是现在的高度下的照片
画面左上角是一个透明胶带,用来示意机器人或者标签的大小,而且也可以发现画面的噪点较多,下面就是要解决识别的问题。
另外一个问题就是虽然Xtion的深度数据的分辨率可以达到640*480,但是速度太慢,而且当彩色数据流达到1280*960分辨率后苏的也变得很慢。
另外一个问题是摄像头挂高后,摄像头到工作区域中心的距离河道边界的距离变化很大,简单通过一个阈值来二值化深度数据显然不可能,需要用一个函数来进行二值化。
下面是我现在的想法:
1.在工作空间4个角落放置四个大的标签,可以直接不用图像处理就能识别出来,来获得工作区间边界到摄像头的距离并且得到工作空间与摄像头图片之间的夹角。
2.利用而知化后的距离数据分割彩色图像的灰度图像,两个图像像素相乘?有没有更好的方法?卷积?这样得到的结果就是符合距离条件的地方有图像,不符合的地方为白色。
3.如果能直接识别出来最好(还没试,但是之前距离超过1.5米就识别不出来了),识别不出来有两个想法,如果拍摄静态图片可以得到更高的分辨率的话,那就是用距离数据来实时更新坐标信息(因为速度快),再通过静态高分辨率的照片得到机器人编号的角度信息,但是我现在还没能找到Xtion拍摄静态高分辨率图片的方法。第二个想法就是将分割后的图像线性放大提高分辨率后再处理一下图像后进行识别。
请教各位有没有更好点的解决方案,欢迎大家留言和我讨论,多谢~~
相关推荐
OpenNI2 OpenCV2 NITE2 vs2010开发环境
本文来结合下opencv的highgui功能显示kinect采集得来的颜色图和深度图。本来在opencv中自带了VideoCapture类的,使用该类可以直接驱动kinect设备,具体的可以参考下面的文章:...
详细讲述了OpenNI和OpenCV在vs开发环境下的安装配置
OpenNI_Windows_x64_2.2.0.33
机器视觉全家福之OPENNI 2.0编程简要说明机器视觉全家福之OPENNI 2.0编程简要说明机器视觉全家福之OPENNI 2.0编程简要说明机器视觉全家福之OPENNI 2.0编程简要说明
OpenNI2获取华硕XtionProLive深度图和彩色图并用OpenCV显示 详情见: http://blog.csdn.net/masibuaa/article/details/36422215
OpenNI读取深度图像与彩色图像并显示,OpenCV调用openpose模型对OpenNI彩色图像进行姿态估计
使用VS2010及opencv3.0.0版本对kinnect图像进行读取显示,openni1.5.4版本。
openni2_install,astra_driver device
openni + nite2
OpenNI2 帮助手册中文翻译,更好的掌握Openni,体感互动不可或缺
ros的openni2驱动包,可以用来打开xtion/astra/primesense等rgbd相机
本程序借助opencv与openni类库 实时提取kinect sensor探测到的数据,其中原始rgb彩色图像数据(24bit )接口已经标注明确.... 深度图与原始rgb彩色图像也已经标定完成,所以有兴趣做图像信息融合的朋友可以一试
本例是利用OpenNI和OpenCV完成.oni格式视频的采集,介绍了利用Kinect相机采集视频的方法。
openni2官方在线帮助手册的离线版,详细讲述每一个类和函数的用法
利用 OpenCV 调整了 Kinect 的深度摄像头视角,使得深度图像和彩色图像可以很好地重合,并用 OpenGL 绘制出环境的三维点云,可通过鼠标左右键的拖曳来调整观察角度和观察距离。 平台:OpenCV SVN 版 + VS2008 OpenNI...
该资源使Peoplebot机器人跟随使用ROS + OpenNI + Python + OpenCV + P2OS驱动程序的人员。 所有这些都是ROS Indigo软件包的一部分。 依赖项: cv_bridge geometry_msgs p2os_msgs 罗斯科普 红润的 sensor_msgs ...
点云1.7.2必备的openni2 32位的。kinect开发也用到的。
因为OpenNI可以获取到kinect的深度信息,而深度信息在手势识别中有很大用处,因此本文就来使用OpenNI自带的类来做简单的手势识别。... 开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2+OpenCV2.4.2
OpenNI 的安装