有的读者可能对于计算机视觉中2D和3D视觉的区别仍然较为模糊,此处根据某篇论文中的解释,介绍如下:
2D视觉包含:目标检测、人脸识别、图像分割,侧重于图像处理等技术。
3D视觉是近几年的热门领域,主要包含三维感知、SLAM、三维重建和三维理解等研究方向。
近期,有师妹、师弟,以及之前的同事私下里问我计算机3D视觉该如何入门?(仅仅是因为笔者一直在研究3D视觉吧,不然怎么可能会问我呢
之前一直忙于工作,都没有好好回答这个问题。今天笔者诚惶诚恐地结合自己的经历,以及由原先的机器视觉转向VSLAM过程中的一点思考,与大家简单聊一聊。
首先,简单从我自己的一些经历开始说起。
我开始的第一个图像处理的项目,是在老师的指导下,开始研究椭圆中心检测的算法。
那时候,跌跌撞撞地一路摸索着前行,只有一点大学时候选修过的C语言的基础,关于图像与C++的基础几乎为零。原本大学所修专业是机械呀,怎么现在却要和计算机视觉杠上了呢?
既然任务已经布置下来了...
那就硬着头皮干吧,总归要能让自己顺利毕业哇,不然岂不是要让村里人笑话了。
于是,开始学习安装Visual Studio,开始手撕C++,开始找各种渠道下载论文,为此,还总结过一篇文章《那些你所不知道的文献下载网址经验总结》,开始学习图像处理、开始接触卡尔曼滤波、粒子滤波,开始研究相机标定、目标跟踪,期间遇到问题,便会及时与老师及实验室的师兄们讨论交流。
研究生毕业时,在老师与师兄弟们的协助下,完成了光笔系统的开发,参见《立体视觉动态测量技术》,不知不觉中,对三维视觉的认知与好感度越来越强烈。
工作之后,有幸仍在3D视觉行业中找了份差事,开始接触手眼标定、结构光标定与三维成像,也开始接触点云后处理。
在团队的努力下,第一代3D相机产品在18年底落地,参见《3D Scanner相机:为工业机器人装上“火眼金睛”》,3D视觉带给我的更多的是快乐。
现在的我开始接触VSLAM产品的开发,VSLAM对算法以及编程能力的要求更加彻底,尤其最近进行并行化编程,对代码能力又提出了新的要求。
之前一直还在怀疑自己从机器视觉转向VSLAM,会不会由于知识点变化太大而极难入门?会不会因为windows系统切换为ubuntu系统而导致编程实现有困难?
经过这一个多月的学习,以及对高翔《视觉SLAM》十四讲的理解,发现机器视觉与VSLAM存在着很多共通的地方,比如1)都会涉及点云模块;2)都可以基于OpenCV开发;3)C\C++编程;4)GPU加速;5)相机标定等。
所以,归根结底,无论是机器视觉还是VSLAM,都是计算机视觉的一种应用,唯一的较大区别是两者对于测量精度要求稍有区别而已。
回到正题,那么我们如何高效地学习3D视觉技术呢?
笔者总结的方法如下(针对一般学习者):
1、以视觉项目为导向。
《林肯传》中讲述林肯的学习方法的精髓便是,不会为了学习而学习,学习要带着问题出发,这样才能事半功倍。
2、找到一些志同道合的小伙伴。
一个人学习总是容易会放弃,遇到问题,及时请教与沟通,会让自己节省很多入坑的时间。
3、充分利用业余时间给自己充电
目前,对于3D视觉,很多平台都开设有专门的课程,比如小象学院、深蓝学院等,不过这些平台的费用一般都较为昂贵。
4、反复研读经典书籍。
比如《Learning OpenCV》、冈萨雷斯的《数字图像处理》等。
5、及时关注最新的CVPR等国际会议中的计算机视觉相关的论文。