——2020.10.20

开始学习SLAM。想着从SLAM开始然后做三维重建。前面的李群李代数以及旋转四元数有点复杂。都看过了一遍。但不太理解就先放放。希望接下去能够顺利进行。数学基础可能不是很好,公式推导书中以及写得十分详细,主要是记录我看SLAM的笔记,以及一些理解。

相机通过把三维世界的坐标点映射到二维图像平面。从单位米到单位像素。这个过程能够用一个几何模型进行描述。我们从最简单的针孔相机模型说起。

设O-x-y-z为相机坐标系。O为摄像机的光心,也就是摄像头的针孔。现实世界的空间点的P,经过小孔O投影之后成像P‘。因为成的是倒像所以要加一个负号。我们对所成的像进行关于O点镜像对称。

大多数的相机输出的图像都不是倒像——相机自身的软件会帮你反转,所以也就是对称的成像平面。在相机中,我们最终获得的是一个一个的像素,我们要对他进行采样以及量化。我们在物理成像平面固定一个像素平面o-u-v。我们在像素得到P‘的像素坐标。

像素坐标系通常的定义方式:原点o’位于图像的左上角,u轴向右,v轴向下。像素坐标系与成像平面直接差了一个缩放和一个原点的平移。

上面是关于相机内参的推导方式。上式中的K便是相机内参(内参数矩阵)。相机的内参在出厂后便已经确定。我们也可以通过标定的方式来确定相机内参。除了内参之外还有对应的外参。我们使用的P是在相机坐标系下的坐标。但是,因为相机是在世界坐标系下运动的,所以,相机的位置需要用相机的旋转矩阵以及位移组成。

所以上式中对应的R,t便是相机的外参,随相机的运动而变化。然后我们对其进行归一化处理之后。得到对应的二维齐次坐标Pc=[x/z,y/z,1]T,便是对应屏幕上的uv坐标。

为了得到更好的成像效果,我们需要在镜头前增加一层透镜,这样会导致对图形有影响。也就是会产生畸变。而畸变分为两种一种是径向畸变,第二种就是切向畸变。第一种导致的原因是光线在穿过透镜的时候会导致光线的折射,导致原先在现实生活中的直线在图像中呈曲线。这种现在越靠近边缘越明显,又因为透镜成中心对称,则在图像中呈径向对称。又分为两种一种是桶形畸变,一种是枕形畸变。桶形是由于图像放大率随着光轴的距离增加而减小,枕形则反之。

在相机组装过程中不能使得透镜和成像平面严格平行会引入切向畸变。

我们可以用数学表达式对其进行表述。可以用笛卡尔坐标系以及极坐标的形式来对屏幕上面的点进行描述。[X,Y]T->[Xcorrected,Ycorrected]T这个过程就是纠正过后的坐标。要注意他们现在是归一化平面上的点,不是像素平面上的点。

上式是对应的径向畸变的坐标调整公式。对于畸变比较小的图像中心区域,畸变主要是k1起作用。对于畸变比较大的边缘区域则是k2起作用。对于畸变比较大的镜头采用k3.下面则是切向畸变对坐标的调整。主要由系数p1,p2进行修正.

通过我们学习上面的两个模型,针孔相机模型以及畸变模型。我们可以把整个过程进行梳理。从相机坐标系(X,Y,Z)->像素平面(u,v)
1.将三维空间点投影到归一化图像平面。
2.对归一化平面上的进行径向畸变和切向畸变纠正。

3.将纠正后的点通过内参数矩阵投影到像素平面。得到该点在图像平面的正确位置。

我们可以选择先对图像进行去畸变,然后讨论他在空间中的位置。也可以先考虑图像中的某个点。进行去畸变,然后讨论他在空间中的位置。

双目相机模型
通过左右摄像机得到视差来判断物体距离我们的位置,计算得到视差之后估计每一个像素的深度。

在左右摄像机,我们可以把他们看成两个针孔相机。他们是水平放置的,意味着两个相机的光圈中心位于x轴上,他们之间的距离称为双目摄像机的基线。现在空间中一点P,在左眼以及右眼中各呈一像。由于基线的存在,两个成像位置不同,理想情况下,两个像只有在x轴上有差异。

视差与距离成反比,视差越大,距离越远。由于最小视差是一个像素,于是深度具有一个理论最大值。由fb决定。实际上看上去公式十分的简洁,但是d在u行中不好确定。可能双目估计需要使用GPU或FPGA来计算。

RGB-D相机

1.红外结构光。
2.飞行时间法(ToF)。
RGB-D都需要向探测目标发射一束光线。在结构光中,根据返回的结构光图案,计算物体与自身的距离。飞行时间法,通过计算光线返回时间,ToF能直接对整个图像发射激光得到深度。而不用逐一像素进行发射。RGB-D需要多个相机进行放置,同时因为条件过于苛刻,为了排除户外因素必须在室内,对于透明的物体因为接受不到反射光则无法确定其位置。

图像
我们从灰度图开始说起。每个像素位置对应一个灰度值。用一个字节来表示我们可以用二维矩阵来表示可以设定第一个下标为行,第二个下标为列。然后在像素平面内原点在左上角。但当我们想记录比颜色更多的信息的时候我们的一个字节就不够用了。比如说我们需要记录深度可能需要用十六位整数进行记录。当我们使用彩色图片的时候,则需要通道的概念此时RGB便需要24位,3个字节。当有透明度的时候则又要增加一位。用通道的方式进行访问。

最新文章

  1. WPF PlacementTarget技巧
  2. 学习 Mobile App 网站制作的11个优秀案例
  3. linux中send函数MSG_NOSIGNAL异常消息
  4. ffmpeg-20160811-bin.7z
  5. 【学习笔记】【C语言】变量
  6. aes 解密出现 java.lang.NumberFormatException: Invalid int: "ch"
  7. [ffmpeg 扩展第三方库编译系列] 关于需要用到cmake 创建 mingw32编译环境问题
  8. 《CSS网站布局实录》学习笔记(四)
  9. Linux常用命令3--如何设置IP地址?如何更改系统时间?
  10. matlab imshow()函数显示白色图像问题
  11. 关于并行计算的Scan操作
  12. <知识整理>2019清北学堂提高储备D1
  13. Mesos源码分析(16): mesos-docker-executor的运行
  14. Deployment Descriptor Web.xml
  15. 细说移动端 经典的REM布局 与 新秀VW布局
  16. Fiddler4入门——手机抓包
  17. Json1:使用gson解析、生成json
  18. Maven从私服上下载所需jar包——(十四)
  19. MQ内存消耗与积压分析
  20. Javascript鼠标事件大全

热门文章

  1. 第七章用Python实现对Excel文件中的数据进行md5加密
  2. 19JS输出杨辉三角
  3. 固定代码格式化程序插件-Prettier JetBrains
  4. 直播软件搭建,姓名,身份证input验证过滤
  5. centos8使用kubeadm搭建高可用k8s集群
  6. Enhancement S_ALR_87011964 Asset Balance Report to add custom column
  7. linux升级系统内核版导致死锁
  8. python存储xml格式数据
  9. sudo apt update 没有 Release 文件
  10. Linux下查找并杀死 zombile 和 stopped 进程