做机器视觉哪个软件好?
我当年大二做视觉的时候也是一脸懵逼,所以来答一下吧,希望能有帮助。
虽然被邀请了,但由于没有做过这个项目,所以也算是强答吧?如果有答得不对的地方,也欢迎大家指出。
首先,这个比赛应该是要求利用视觉系统识别羽毛球位置,并估计出羽毛球速度、预测击球点。
好了,提取几个可能会用到的关键技术点:①立体视觉(标定);②目标检测(图像处理);③机器人控制(实时性);④kalman滤波/粒子滤波。
①立体视觉(标定)
要想得到羽毛球的位置,就需要使用立体视觉技术,根据使用的设备不同,标定难易也不同:
1)如果是打算自己用两个相机组成双目视觉系统
那么需要进行两个相机之间的标定+相机系统与世界坐标系(球场)的标定。
2)如果是购买现成的立体视觉传感器(内参已经标定好),如kinect或其他双目相机
那么就只需要标定相机系统与场地坐标系之间的相对位姿。
由于标定只需要进行一次,所以对计算效率等要求并不高。但是,编程难度而言,对于视觉入门者来说,还是比较难的。
所以,这部分要求容易实现(有源代码或者能直接使用的标定库),对实时性无要求。那么,Matlab(
Camera Calibration Toolbox for Matlab)和OpenCV(
Camera calibration With OpenCV)都是可以的。语言的话,用Matlab就是采用它自己的语言,用OpenCV的话,建议C++。
②目标检测(图像处理)
这个应该是这个项目的主要内容。就是如何根据采集到的图像得到羽毛球位置。
还是根据传感器分为两种做法:
1)双目相机:
如果是采用双目相机,那方法就是通过分别检测羽毛球在两幅图像中的位置,通过前面标定数据,利用简单的几何关系计算出羽毛球的3D坐标(如下图)。
要从每幅图像中处理得到羽毛球位置,可能会用到的图像处理技术有
阈值分割、二值化、膨胀腐蚀等形态学处理、连通域处理、关键点提取等。
那么,这些工作Matlab(
Image Processing Toolbox)和OpenCV(
imgproc,
feature2d)也都可以做。
区别是Matlab比较好调试、对于初学者也比较友好。OpenCV处理比较快。
2)kinect等
如果是能直接拿到点云数据(就是一堆xyz坐标点,大概如下图)
那么,就可以采用简单的点云分割、欧氏聚类等算法可以实现(具体效果不清楚)。如果是要处理点云,那么自然是建议采用PCL(
Point Cloud Library (PCL))了,编程语言是C++。据说新版本Matlab(
3-D Point Cloud Processing)里面也有点云处理的功能,但似乎处理速度极慢(存疑?)。
③机器人控制(实时性)
由于比赛过程中,需要实时检测羽毛球位置,对算法的实时性要求较高。因此,Matlab只能放弃了,要连机器人的话还是C++比较实用。
④kalman滤波/粒子滤波
这一步其实很重要,前面三步只是计算当前图片/点云中的羽毛球位置,而打羽毛球时,我们需要得到羽毛球的速度、并估算出羽毛球下一时刻的位置和击球点。
当然,粒子滤波在目标跟踪领域很常用,但是由于羽毛球可以建立动力学模型,所以我比较推荐kalman滤波。
这些算法都很容易实现,网上也一大堆博客教程。MATLAB还是C++都可以。
⑤DL
好吧,如果不想从传统视觉的方法做,想利用深度学习的话,那么前面的当我没说,直接根据你使用的深度学习库选择语言与平台即可。
综上,如下:
最后,不论是OpenCV,PCL还是MATLAB,确定之后,就直接去看他们的教程吧
OpenCV,
PCL,
Matlab。都很容易就能掌握的。
图像处理的基础知识,可以看冈萨雷斯的《数字图像处理》,有中文版:
Rafael Gonzalez, C., and E. Richard Woods. "Digital image processing."Pearson Education (2002).
版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。