随笔

整理一下个人总结的学习思想。拿我们现在在学的openNI丶Nite 丶opengl丶PCL举例:

       这几项技术都提供C++开发接口,需要学习C++,其中又涉及到少部分硬件方面的知识,打开设备丶关闭信息流等等,对此有大概了解即可。编程语言是有很多共性的,我Java基础学得比较多,C++入门也快很多,虽然知识面不广,也不了解C++ 11 的新特性,但工程源代码大概什么意思还是知道的(当然这也利益于工程师们对代码做的做的优化)。如果我之前没学过任何一门编程语言,来这实习我首先要做的就是快速入门工程所需要的C++知识,不求全面,够用即可。这里多说几句,Java我是在高考完的假期自学的(现在觉得这是个正确的选择),高考完的假期,身边人都在玩的时候,我却在想:上大学我的竞争优势何在?而编程语言无疑是计算机专业必需掌握的,于是就产生了学习一门编程语言的想法,各方咨询后选择了Java。

       假设我们已经入门了工程需要的C++知识,接下来具体到每项技术。openNI2是管理底层流的(可能不太恰当,但这解释很直观易懂),作用就是 打开设备丶关闭设备丶打开流丶关闭流等等......类丶方法都很少,不需要其他知识。Nite能通过OpenNI捕捉人体骨骼丶手势,用到机器学习,把一堆手画的丶标有关节位置的深度图放到模型里,模型就能找出深度图中的关节位置(目前在做的压腿无法识别也许就是官方用来训练模型的图片缺少压腿的动作)。然而Nite是闭源的,我们无法找到他用来训练模型的数据集,况且我们也缺少机器学习相关的基础知识,实习又这么短,所以暂时没法实现压腿动作的识别。但还是可以用他提供的基本骨骼跟踪丶手势识别实现一些功能的。接下来是我目前在学习的opengl,这项技术除了C++,也用到很多线性代数丶几何的知识,用变换矩阵实现平移丶缩放丶投影丶旋转等等操作。目前我读不太懂他是怎样用矩阵实现这些功能的,也没必要去关心这个,opengl已经提供了相应操作的实现,我们只需要告诉他旋转多少度丶绕哪个轴旋转即可。但是后面就涉及到光影变换丶环境遮蔽的东西,果断放弃。。。反正工程里也用不到。最后是PCL,,这是我最早放弃的一项技术,pcl(point cloud library),点云库,基本涵盖了点云处理经典算法,可以对点云实现拼接丶分割丶各种变换...说到底就是这些变换功能的实现。我连这些变换是啥意思都不知道,我学这个干嘛?

       目前我的学习正处于一个瓶径期,计算机底层知识的缺乏导致我的代码效率低下,深入Nite需要的机器学习基础我没有,opengl丶PCL 需要的计算机图形学基础丶线性代数基础,我也没有。由此,我意识到:

       应该重视计算机技术基础的学习!一步步来就是最快的,基础有了,再向上学习新技术也就变得很容易了。另外,在没有时间补基础的时候,要让自己暂时忘掉那些怀疑与不甘心,将新技术当作一个黑箱去用,千万不要纠结于它的底层细节,这好像也一种放缩的思想。

       建议多读读书丶喜欢啥读啥,多学习新思想。因为说到底,指导我们做事情的,最终还是思想,多学学哲学,总是有用的。

你可能感兴趣的:(随笔)