在内存到cache的映射中,index指的是cache的地址而tag是高位,由于内存容量比cache大而产生的。
问题1:对于32位的地址,tag+index+block_words(块中字数)+word_bytes(自种字节偏移)中,所能表示的地址也只有2^32个。那么,上G的内存是如何分配的?上T的硬盘呢?
在内存到cache的映射中,index指的是cache的地址而tag是高位,由于内存容量比cache大而产生的。
问题1:对于32位的地址,tag+index+block_words(块中字数)+word_bytes(自种字节偏移)中,所能表示的地址也只有2^32个。那么,上G的内存是如何分配的?上T的硬盘呢?
zed相机网上资料都是关于安装的教程,后续的一些使用介绍的不是很多,
因为官方文档已经介绍的很详细,这里介绍一下自己的学习过程,以备查阅,如有错误,敬请指正。
这时官方文档,所有的信息都是根据这儿得来的。
https://www.stereolabs.com/
因为zed相机属于UVC(USB video device class )设备,索引可以用作双目摄像头直接用于计算机或者嵌入式平台,和普通的双目摄像头应该没什么区别。
但是如果要使用其SDK,就需要cuda环境。一开始不知道,打算用在台式机(Intel HD Graphics 4600集成显卡)上,后来发现需要NVIDIA。只好转用我的T470(总算能干点活了)。按照这个教程下来,基本没问题。
https://blog.csdn.net/weixin_42132223/article/details/81840520
安装后在程序里面搜索zed,会发现多出几个应用。可以都打开看看(别忘了把zed相机插上)。其中zed viewer就是拍摄的图像,左下角可以看到可以录视频照相。但录的视频是SVO格式的。里面包含了很多信息。包括深度,点云什么的,所以会非常大。depth viewer可以看深度图像和点云。ZED calibratiuon是做标定的很方便,不用自己搞棋盘,直接拿摄像头去怼显示前上的该应用给的棋盘就行,这里建议用大一点的显示器。先看一下教程不是很难。还有一个ZEDFu我没用到。
以上的这些应用只能让我们看到ZED的一些功能。用来做开发,自然少不了SDK.花一个小时把这个文档大概看一些。基本上就可以上手开发了。
https://www.stereolabs.com/docs/getting-started/
zed相机比较方便的一个点是,做实时分析的时候不用随时都要插着摄像头,可以先录制好获得svo文件,然后用grab()函数直接得到的就是矫正后的图像,当然也可以参考给的opnecv例程进行图像,视频还有点云文件的保存。
因为我要识别网球。很小,距离也很远。一开始打算用点云去做,滤波后提取满足条件的聚类。但PCL库没接触过。后来看到这篇文章
https://support.stereolabs.com/hc/en-us/articles/360011977594-Can-I-get-the-3D-position-of-a-Custom-Object-a-Ball-or-a-Small-Object-
我在深度图中也看不到飞行的网球,zed开发人员也不建议直接用从深度图中去找。深度图是立体矫正匹配后得到的。于是我直接从矫正后的图像中去找两个球的对应点,得到视差。最后计算出三维坐标值。
因为我需要的帧率比较高,而且在关键时刻需要稳定,但是得到的svo文件打开时(需要SDK),发现帧率一直在变化,而且某些帧率变得很低,不太清楚为什么。一下是我录制是的代码。
1 |
|
这里要实名表扬zed的技术支持。发送了询问邮件很快就得到了恢复。最终找到了问题所在。
因为我在thinkpad T470P上使用的该摄像头。技术支持说可能是因为GeForce 940MX不支持在最大帧率下工作。后来我进行了一些实验。发现在720P下,设置为15帧和30帧基本上不会有掉帧。但在60帧时就比较严重。所以我猜想可能是因为这个问题。另外,在720p时,即使调用SDK也不能设置任意帧数,好像只有,15,30,60三个选项。
最近在做双目实际,涉及到一些点云相关的内容,不太懂。先记录一下参考网站。以后学习的话可能用得到
1.知乎上的一个参考:
https://zhuanlan.zhihu.com/p/50915322
2.这个社区有大量的资料
http://www.pclcn.org/bbs/forum.php
刚开始写入视频一直失败,显示avi文件只有6kb,经过分析和网上查找,有以下几个可能问题:
1.网上很多人说的尺寸的问题,图片尺寸一定要对应
2.刚开始在台式机上没问题,后来在笔记本上就打不开,后来发现是我每次写完视频马上打开,这时文件还没完全写入,需要等一段时间。另一个问题是python没有释放文件。这时关闭编译器后,发现视频可以正常打开,着说明代码最后没有加上videoWriter.release这一语句。
3.以上是我尝试各种方法遇到的问题。但对于我的代码不知道为什么一直写不进去,无论如何都是6kb.最后发现如果把图片先保存,在读入,再写就可以,如下代码。我也不清楚为什么。不过暂时是把问题解决,可以进行视频演示了。
1 | cv2.imwrite("image.jpg",frame) |
斜抛运动(网球,羽毛球)等轨迹与落点预测需要用到扩展卡尔曼滤波
这里记录一下自己学习所参考的网站
以及一些总结
一开始根本知道卡尔曼滤波是干什么,所以这两个介绍给了一些直观的解释
1.作者截取于某教材的航海例子:
https://www.cnblogs.com/rainbow70626/p/10786413.html
2.比较容易理解的的一个一维关于温度的例子:
https://blog.csdn.net/phker/article/details/48468591
3.辅助理解:
http://shequ.dimianzhan.com/articles/337/extended-kalman-filter-course-from-shallow-to-deep
有了直观的理解,下一步就开始进一步的看一些例子以及对公式的理解。
对公式的理解维基百科介绍的很详细:
https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2
我们用传感器(如直尺去测量长度,双目相机去定位)去测量一个变量(有规律运动的小车的位置)会得到一个数据,但由于直尺的质量或者相机的畸变等,我们的传感器会有误差。 另外,因为变量的变化是有规律的,所以我们可以从理论建模的角度(如高中的运动学公式)得到位置的预测,同理由于我们理论预测的时候忽略了一些变量或者噪声,所以得到的结果也是不准确的。卡尔曼滤波器就是基于这两个不准确的值以及两个误差。来给出最接近真实值的一个预测。
在读完温度记的那个例子后,再看这两个公式
我就有个疑问,Xk是预测值(对应那个经验温度),Zk是观测值(对应温度计读数),这两个值怎么
会有关系。后来再读一遍发现不对,Xk是实际值,不是预测值,预测值是不含误差项Wk的,下面的第
一个公式才是预测值,而Hk之所以被称为观测矩阵,是因为它会把非观测值去掉,如维基百科给的那个例子,乘
完H后,只剩下位置项,而速度是预测值所以在观测值Zk中该项为0。
另外对于几个协方差和卡尔曼增益的理解可参考维基百科给出的链接
http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf
注意,这里Kk实际上是个分式,如下所示
这里讲的和第一部分直观理解中第三个参考文献类似,可参考理解
扩展卡尔曼滤波是针对非线性过程,但预测过程相同只不过求了个Jacobi行列式在更新时把非线性过程线性化处理,等用到再进一步整理
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing
1 | $ hexo server |
More info: Server
1 | $ hexo generate |
More info: Generating
1 | $ hexo deploy |
More info: Deployment