记录:成像与坐标系转换
来源:互联网 发布:apache 跨域访问配置 编辑:程序博客网 时间:2024/05/16 16:56
这里是我在对Kinect标定参数时发现的一些可能会导致像我一样的初学者犯下的错误以及误区,所以在这里mark一下。如果有错误的地方,希望能在评论区解释一下,感激不尽。
首次简单介绍一下后面操作需要用到的Kinect设备的参数:
Kinect的视角场(FOV)—垂直方向43度,水平方向57度,整体的三维模型为“金字塔”形状。最大深度4m,最小深度0.6m。
下面介绍一下这篇文章需要先了解的一些基础知识:
1.由于光沿直线传播,所以对于远近不一的物体,人眼可以看到这些物体表现为在一个平面上。
2.图像坐标系:是基于图像平面的一种坐标系,默认为以矩形左上角的点为原点,水平向左为x轴的正方向,垂直向下为y轴的正方向。(为了方便后面计算,这里我通过Kinect获得的图像分辨率为640*480)。
3.摄像机坐标系:是以摄像头中心为原点的空间坐标系,就像在“金字塔”形状的空间内,这里默认是以垂直地面向下为y轴正方向,水平面垂直金字塔底面(我通常都假想为一个图像的成像的平面)的方向是z轴的正方向,与z轴,y轴组成平面垂直向右为x轴正方向。
4.坐标系转换:
这里转换后的坐标系坐标用w表示
用M表示辅助矩阵
转换前的坐标系的坐标用c表示
就有
其中,R是3*3的正交单位矩阵,t是三维平移向量,矢量
下面进入正题
1.图像坐标系向摄像头坐标系的转换
首先,我们需要了解物体成像,尤其是针孔成像的特点,发现对于一个物体的不同深度值,相同长度下
由相似三角形计算可以得到
所以对于摄像头坐标系中的坐标矩阵向量
2.摄像头坐标系向任意空间坐标系的转换
这里必须声明一点,因为在实际测量时,摄像头坐标系的原点是很难精确确定位置的,也就是说如果要获得精确的物体坐标,就必须将坐标系转换到一个具有更容易确定的原点的空间坐标系中。
方法就是使用坐标系转换公式,顺便提一下,这种根据实际测量值进行参数计算的超大计算量的工作,完全可以交由
如果以为只要测几组数据处理一下获得一个转换前的矩阵向量和一个转化年后的矩阵向量形成一个方程组求解就可以了,那就大错特错了,在使用
这个方程组在
根据这样的方法就可以分别得到四组解作为原始方程组的四个方程的系数,换句话说,也就是辅助矩阵
附:
在标定的过程中会出现很多噪点,导致数据不是很精确,但是由于能力不足,没有去做相应的数据处理,导致出现很致命的问题,最典型的可能就是对于图像中显示的地面,在我的坐标系中应该在y轴的值是大于0的,但是由于不精确的数据所得到的辅助矩阵,会通过第二行(如果仔细看过矩阵乘法以及演算过坐标系转换公式的人可以看得懂为什么说是第二行,这里不再赘述)以外的数据对整个转换后的计算结果(矩阵)产生影响,造成小于0,也就是说在我的原点的上方(试问我怎么会选一个地面以下的一个点去做测量,呵呵);另外就是,验证过程中发现,越靠近地面,我经过转换得到的y值误差越大,这些都是不精确的数据带来的误差。
为什么要说这个失败的历史呢?因为我在发现数据不准的情况下没想过是数据不精确的问题所带来的,而是怀疑过像素转毫米的数学思想的正确性。下面是我对于摄像头成像的错误想法,引以为戒。
在面对物厚度的物体(小纸条,因为我是用小纸条定在卷尺上进行数据采集的)或不能看到厚度(墙面)时,Kinect的成像图片可以准确判断水平方面横坐标距离,当从侧边斜视一个具有一定厚度的物体时,由于成像原理(同一分辨率下,深度越大,单位像素对应的长度越长)以及Kinect深度图像的显示图片原理(平面不可能知道三维空间中厚度,深度,所以看不到的部分,应该是被物体厚度遮住了,呈现黑色即无数据)
所以我认为通过像素转毫米的计算公式,应该是将图像坐标系中的每个点都进行积分,对于离散型的点来说,就是累加,当然,最后的结果错的更加离谱
- 记录:成像与坐标系转换
- 相机成像原理(四个坐标系转换)
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
- 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
- 球面坐标系与直角坐标系转换
- 轨迹同步与坐标系转换
- 三维坐标系介绍与转换
- 关于坐标系转换与点在坐标系之间的转换
- 直角坐标系与极坐标系了解与转换
- 地方坐标系与国家坐标系转换方法探讨
- 关于84坐标系与54坐标系转换问题
- GCJ-02 坐标系与百度坐标系的转换算法
- 数码相片框标坐标系与扫描坐标系转换
- 世界坐标系与像素坐标系的点互相转换
- 各地图API坐标系统比较与转换(WGS84坐标系、火星坐标系、百度坐标系、搜狗坐标系、图吧坐标系)
- mybatis中的#和$的区别
- 使用Docker快速部署ELK环境(最新5.5.1版本)
- 链式队列的基本操作
- 2017.8.09 SSL 模拟赛
- java8的特性
- 记录:成像与坐标系转换
- 2017年全国电子设计大赛A题问题重述
- Bartender条码使用方法C#
- 浅析Date与Calendar
- 闲聊软件测试自动化(1):测试自动化的好处我们知道多少?
- faster-rcnn:制作自己的数据集
- 装箱问题
- MediaCodec学习笔记
- 使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,但使用BeanListHandler 和 BeanHandler则一直返回null