「Coursera」Robotics:Perception

「Coursera」Robotics:Perception

传送门:Coursera – Robotics : Perception

【写在前面】本课程属于宾夕法尼亚大学Robotics专项课程中的第四项课程。课程讲师来自宾夕法尼亚大学EAS(School of Engineering and Applied Science,机械与应用科学学院)的两位计算机信息科学领域的教授Kostas DaniilidisJianbo Shi。其中较为熟悉的是Jianbo Shi,史建波毕业于UC Berkeley,导师是计算机视觉领域大牛Jitendra Malik。其最有影响力的研究成果:图像分割。其于2000年在PAMI上多人合作发表”Noramlized cuts and image segmentation”。这是图像分割领域内最经典的算法。主页:www.cis.upenn.edu/~jshi/ 和 www.cs.cmu.edu/~jshi/。本课程研究如何根据安装在机器人上的摄像机获得的图像和视频转换成特征和光流等表示形式,从而根据二维平面的信息来提取摄像机所在的位置和机器人移动方向的三维信息,实现定位和导航等高层次应用实现。

 Week 1 – Geometry of Image Formation

通过清楚的示例展示了摄像机的凸透镜成像原理以及虚焦和聚焦原理的讲解。凸透镜成像原理:凸透镜焦点与焦距是固定的,这是物理性质。物距u、像距v、焦距f的关系为 1/f=1/u+1/v 。

简单的单视图几何(Single View Geometry)说明:现实生活中平行线在图像中会相交于一点,也就是所谓的Vanishing Point。这个相交的点位置可能在图像内,也可能在图像外,可能是垂直方向,也可以是现实生活中的水平线(Vanishing Line)方向上。而你在图像中看到相互平行线或许在现实环境中是相交的。

Jianbo Shi会用丰富的图示和讲解告诉你,如何通过已知图像中某物体(人)的高度来解算出这个物体(人)旁边的你的身高。更是会告诉你如何用iphone手机的摄像头来验证单视图几何中这一平行线会相交的特征。

透视投影(Perspective Projection)是一个比较基础的图像相关的知识点,这对很多摄影爱好者以及绘画爱好者来说算是基本功。类比于一个中心投射出来的光线将物体投影到影平面,如何实现三维空间中的三维坐标以及其投影在影平面上的二维坐标之间的相互转换是透视投影的研究重点。Jianbo Shi介绍了基于投影平面上两点根据公式计算可以直接获取投影平面上的投影线,也紧接着介绍了旋转和平移的概念,涉及到空间坐标系和相机坐标系之间的转换。

我们在图像处理中最重要的数据来源是相机。数码相机图像拍摄的过程实际上是一个光学成像的过程。相机的成像过程涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系以及这四个坐标系的转换。

在简单构建了相机的投影模型以及介绍针孔成像的原理之后,Jianbo Shi提供了滑动变焦(Dolly Zoom,拉长物体离相机的距离,同时增大相机焦距)这种高逼格视觉效果的实现讲解以及相机位置变化对成像的影响。

2D Image to 2D pixel :二维图像到二维像素的转换,是来自于和图像(像素平面)中心点之间的比例来进行缩放的。已知单位像素的宽和高来确定二维图像相应坐标在像素平面中相对于中心点的偏移。

3D World to 2D pixel:三维空间坐标到二维像素空间坐标的转换。我们可以根据二维图像到三维空间坐标的转换(如下图中下层公式所示)结合相机坐标系到二维图像的转换(如下图上层公式所示中)来实现三维空间坐标到二维像素空间坐标的转换(如视频中所示)。

3rd person to 1st person 3D Mapping : 根据旋转矩阵和平移矩阵来实现从第三人称视野到第一人称视野的转换,把周围的三维空间数据转化到同一个移动相机的坐标体系下进行3D Mapping。

同样,也可以实现二维空间第一人称视野到二维像素转换,以及三维空间第一人称视野到二维像素转换,也就是之前所提及的3D World to 2D pixel中的公式模型。

我们可以根据简单的图像操作来获取图像中心H和投影中心O。在图像中根据两条平行线(现实生活中互相平行的线)所相交的两个Vanishing Point(A,B)来确定水平线,并根据垂直方向的的Vanishing Point(C)来构建一个三角形。在此三角形平面上确立一点,构建侧面全为直角三角形的四面体(唯一的四面体),如此我们获得投影中心O。从投影中心O跟三角形ABC的orthocenter(即三角形各边高的交点,垂心)H之间的连线就是视轴。

相机在使用过程中定是会存在不同程度上的畸变(径向畸变:这是由于透镜先天条件原因(透镜形状),成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越厉害。切向畸变:这是摄像机安装过程造成的,如当透镜不完全平行于图像平面的时候产生的。),我们一般使用棋盘来进行相机的矫正(Camera Calibration),当然棋盘的作用是在于提取角点。课程内使用的是类似于Matlab官网提供的工具包Camera Calibration Toolbox for Matlab进行可视化的相机矫正。

这周的课程作业实现的就是Dolly Zoom(滑动变焦)。课程中的视频示意图中所示的D2和D1给我造成了歧义。真正意义上的D1是红色实线所示(其中包括focal length),D2是蓝色实线所示(其中同样包括force length)。以上距离都是相距光点(原点O或O’)的距离。

因此,在使用Matlab进行Dolly Zoom的编程实践中,对各变量之间的关系解读很重要。d1,ref 和d2,ref 分别表示两个物体距离原点(Origin或者是pos)的距离,都会包括当前的焦距(fref或者是f)。根据等比三角形原理构建两个位置(Origin和pos位置)下同一个物体和两个物体的关系等式来求解并实现compute_focal_length.m和compute_f_pos.m。

代码运行的最终的Dolly Zoom效果如图所示。

Week 2 – Image Projection

我们可以根据Vanishing Points来估计出相机的旋转矩阵。图像中所寻找到的Vanishing Point也是和现实空间中无穷远处的点存在着相机的旋转变换的。如果能够在水平方向上以及垂直方向各找到满足数量的Vanishing Points并根据旋转转换方程来联立求解估计出矩阵内参。

射影变换(projective transformation)也叫做单应(homography或者Collineation)。从几何意义上讲,2D homography是用来计算一堆在同一个三维平面上的点在不同的二维图像中的投影位置的,是一个一对一的映射。变换之间存在一个变换矩阵H,我们称之为单应矩阵。

使用四个点来估计射影变换的一个典型应用是Virtual Billboards 。根据水平方向(非特指)的两个Vanishing Points (A,B)以及四条Vanishing Lines(C,D)所相交的特定两个点来进行对projective transformation的估计。

在射影变换有一个恒定的东西叫做交比(Cross-Ratio)。课程中列举了两个特别简单易懂的例子告诉如何利用交比来根据像素比较求解图像中的实际距离问题。这个概念还是比较实用而且通俗易懂,已知图像中某物体高度,来求解另外一个物体的高度,还是可以考虑尝试用交比来求解问题的。

提到射影变换之后,我们把这种变换放入到实际的问题求解中去。问题环境就是 Two View Soccor Metrology,从两个视图角度来评估球是否越线得分。(讲道理,这部分我没太懂,之后找个时间来填这部分的坑)

Image Projection的课程实践是projective transformation在视频流中的实现。在视频流中的球门框内放入宾大的logo,其最主要的目的是为了求解单应矩阵H。在实践说明书还是有些许错误可能会误导最后的编程结果。将宾大logo变换到视频流中,那么射影变换公式应该是logo_pts ~ H*video_pts。

根据如图所示的公式我们来求解类似于Ah = 0的方程,其中h是H矩阵内部九个参数的9*1列向量,而A是一个8*9的矩阵,并非9*8矩阵。矩阵A其中包括了四个点对应的上图2*9矩阵。通过SVD奇异值分解( [U,S,V] = svd(A) )后,向量h的结果是V矩阵的最后一列,将h重新构建成3*3矩阵H。

Week 3 – Pose Estimation

3个月之后更新

Week 4 – Multi-View Geometry

3个月之后更新

发表评论