由于各种事物影响, ToF项目被暂缓了, 趁着公司再次搬家的这段时间,重新捡起来。
先是把代码又理了一遍,抽空学习了一下numpy, 搞一点儿opencv,tensorflow和pytorch,把第二编辑器换成了VSCode(顺便看了一下markdown和简单的Latex语法),换用Python 3.7,还有vrep, openscad,steamVR HDK什么的……咦,好像扯远了……然后继续攻目前的障碍。这把终于弄通了 其实很简单的嘛。。。。
非英语母语国家的厂家写的英文文档遇上了半吊子英语水平的我的结果是世界上最远的距离变成了本来往后退一步就能到达的地方却要拼命往前跑
是的,我看文档时就和你读上句话的感受是一样的
这是我用mardkdown做的笔记, 数学公式真的好漂亮。有多漂亮呢?为了让人看不清楚,我特地使用了高斯模糊处理了一下
前面两番已经交代了深度视觉特别是ToF技术的概况,今天来谈一谈ToF具体实现上的大坑(之一,我预感我还会面临最后一个坑)。
ToF是一把用来测量距离的尺子,造一把尺子的关注点是精度,而造一批尺子关注的是制造精度的分布。
一把尺子造出来, 如何知道它是准的?有多么不准?不准了怎么办?
这就涉及到标定 & 补偿
- 标定,是指出厂前,使用另外一把更准的尺子教新尺子重新做人,标定后会得到一组标定数据
- 补偿,是在运行时,利用出厂前的标定数据,实时地对当前原始数据进行算法处理,得到最终的结果
那么为什么从传感器直接得到的原始数据不能拿来用呢?我也想呀!可我们面对的是裸片,是真实的物理世界,搞不好还有量子效应。
因为NDA的缘故, 我不能说得太具体 但参考各家公开的文档,基本情况大差不差。
造成ToF系统产生误差的重要原因是“热” 中医分内热和外热两种,电烙铁也是如此… 热导致电信号(电子、空穴移动)在硅基芯片内的传导时间发生变化,而ToF高度依赖时间测量的精度。 光速大约 30厘米/纳秒, 若要达到厘米级的测距精度,对时间的测量精度不能低于30皮秒级别
然而环境温度的变化, 芯片工作时的温升, 都会导致精度的大规模失准, 特别是像素和像素之间的温差和其它工艺因素的差别会更加劣化这种情况
不同厂家针对器件的特性,都有各自的办法来解决这个问题。有些厂家的的设计比较独到,为批量化自动生产打开了便利之门。
另外一个造成误差的主要因素是环境光, 虽说相位检测的ToF系统天生具有差分读取结构,但是过强的环境光或者环境光扰动会使得调制信号的信噪比降低。
对于这种情况,补偿算法是一方面,加强调制光照明强度,减少曝光时间,以及光学滤镜都是可以尝试的手段。
当然还有一些其它的因素,有些是特定器件相关的, 有些影响相对较小,这里不再一一熬述
听上去有点儿复杂,实现起来细节也确实很多,但 是可行的。
我想这就是个机会,将来总会有厂家把这些算法ASIC化,或者有人给出更简单的打包方案,不过目前,我将会来完成这些
毕竟朕是在暴风雨里单日骑行超过400km的人, 老子的目标在很远的地方。