前些时间写了篇文章把我在做这个项目中遇到的问题以及思路说了一下,传送门:
http://jcs130.iteye.com/blog/2185533
在上篇文章的思路下作了实现,已经达到了教授的要求。
首先第一步检测四个角的坐标,经试验,在这个高度上把标记直接打印成一张A4纸的大小就可以直接识别:
我还发现,这个硬件本身的深度数据有点问题,如下图所示,靠近墙的一侧颜色较量说明距离值较近,离墙远的地方有一个小区域几乎是黑色,说明很远,所以如果想要对深度数据进行二值化处理必须要用一个可变的阈值。
我在这里用的方法是先记录四个顶点的距离,找出最远距离和最近距离并假设距离的变化是线性的,再根据实际情况在某特定区域上加加减减来确定最终的阈值。
确定阈值后执行二值化,二值化后会有很多细小的噪点,使用均值滤波器过滤并且使用膨胀的方法联通路相邻的像素点,再进行轮廓检测确定感兴趣的区域大小,如下图所示:
因为深度图像和彩色图像之间存在偏差,手动的去修正这个坐标上的偏差,并且对彩色图像依次进行放大->二值化->膨胀->腐蚀操作,再把经过处理后的图片使用ArUco进行识别,得到标记的ID以及四个顶点的坐标。如下图所示:(中间为原是大小,左边的为放大后的图片,右边为经过处理后的图片,已经可以成功识别)
下图就是程序运行时的图片输出,可以看到程序运行时的流程,为了加快处理速度,使用了CUDA显卡加速功能,速度绝对是大于教授提出的5FPS的要求了~
最后教授说比较直观的做法是在图片上画出标记的轮廓以及编号,并且输出的坐标应该是相对于实际坐标系的而不是直接输出像素坐标,另外最好可以给出让用户修改配置的功能(因为教授想把我的程序加到他另外一个程序中,所以不需要图形界面),所以我又加上了配置文件,这样用户可以通过修改配置文件来修改参数,最终效果如下图所示:(我故意把基准坐标系(红色箭头)弄歪来测试坐标变换的结果)
项目总结:
这个项目教授本来想找一个有很强的图像处理基础的同学来做,但是做完这个项目后个人觉也不需要,因为我本身接触图像处理仅限于知道些概念,具体实现表示完全不清楚,但是我觉得这个并不阻碍我最后做出这个项目,在做这个项目之前我几乎没有用过C++,也只是知道OpenCV可以用来作图像处理,也并没有实际使用的经验。这就是所谓项目驱动吧,只要是觉得自己感兴趣,就去做,不要因为自己不会做而直接拒绝,技术日新月异,我们不可能全都掌握,但是我们可以锻炼自己的学习能力,这样就可以保持自己的竞争力,与大家共勉。
最后附上最终演示视频的链接:
http://www.tudou.com/programs/view/n13nkgCPA8s/
相关推荐
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
openni2_install,astra_driver device
OpenNI读取深度图像与彩色图像并显示,OpenCV调用openpose模型对OpenNI彩色图像进行姿态估计
使用VS2010及opencv3.0.0版本对kinnect图像进行读取显示,openni1.5.4版本。
OpenNI2 帮助手册中文翻译,更好的掌握Openni,体感互动不可或缺
该资源使Peoplebot机器人跟随使用ROS + OpenNI + Python + OpenCV + P2OS驱动程序的人员。 所有这些都是ROS Indigo软件包的一部分。 依赖项: cv_bridge geometry_msgs p2os_msgs 罗斯科普 红润的 sensor_msgs ...
openni + nite2
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...
点云1.7.2必备的openni2 32位的。kinect开发也用到的。
因为OpenNI可以获取到kinect的深度信息,而深度信息在手势识别中有很大用处,因此本文就来使用OpenNI自带的类来做简单的手势识别。... 开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2+OpenCV2.4.2
优化过的OPENNI2,用于实现深度图和彩色图对齐.具体可参考blog http://blog.csdn.net/janestar/article/details/38824375 相关内容