前一段尝试了相机标定,虽然做到一半放弃了,但感觉机器视觉很多东西仍然有相当大的必要去深入了解下。就像程序员多少也要懂点计算机硬件的东西,才能从底层思维的角度去优化代码。
所以留一些痕迹。
前置基础知识
焦距,本来是一个光学中的量,当一束平行光以与凸透镜的主轴穿过凸透镜时,在凸透镜的另一侧会被凸透镜汇聚成一点,这一点叫做焦点,焦点到凸透镜光心的距离就叫这个凸透镜的焦距。一个凸透镜的两侧各有一个焦点。
光心:可以把凸透镜的中心近似看作是光心。
我们用的照相机的镜头就相当于一个凸透镜,胶片(或是数码相机的感光器件)就处在这个凸透镜的焦点附近,或者说,胶片与凸透镜光心的距离大至约等于这个凸透镜的焦距。
凸透镜能成像,一般用 凸透镜做照像机的镜头时,它成的 最清晰的 像一般不会正好落在焦点上,或者说,最清晰的 像到光心的距离(像距)一般不等于焦距,而是略大于焦距。具体的距离与被照的物体与镜头的距离(物距)有关,物距越大,像距越小,(但实际上总是大于焦距)。
由于我们照像时,被照的物体与相机(镜头)的距离不总是相同的,比如给人照像,有时,想照全身的,离得就远,照半身的,离得就近。也就是说,像距不总是固定的,这样,要想照得到 清晰的像,就必须随着物距的不同而改变胶片到镜头光心的距离,这个改变的过程就是我们平常说的“调焦”。
从上边的叙述来看,一个凸透镜的焦距是一个固定的数。也就是说,一个凸透镜的焦距是 不能调整的。相当一部分相机的镜头的焦距也是不能调整的,称之为“(固)定焦(距)镜头”,所以说,上述(我们平常)所说的“调焦”,并不是真的调整镜头的焦距!只有另一部分相机,它的镜头是“变焦镜头”,就是那些能够“变倍”的镜头,用那样的相机在进行变倍时才是真正的 “调整焦距”!
坐标系
重点是区分坐标系的原点和单位。
- 世界坐标系(真实坐标系)
- 相机坐标系: 以相机的光心为坐标原点,z轴与光轴重合,与成像平面垂直。
- 图像物理坐标系: 坐标原点为成像平面与光轴交点,单位为mm,图像的像素位置用物理单位(mm)来描述。
- 图像像素坐标系:坐标原点为图像左上角顶点,单位为像素,用来表示各像素点在像平面上的位置。
坐标系变换
注意所谓的成像平面,是在光心与世界坐标点的中间的。
如下图:
1. 世界坐标系与相机坐标系的转换
利用旋转矩阵R(3x3) 与 平移向量T(3x1)实现世界坐标系中的坐标点到相机坐标系中的映射。
2. 相机坐标系与图像物理坐标系的转换
理解了焦距和光心之后,这里的变换就只是一个近似的三角形相似法则。
3. 图像像素坐标系与图像物理坐标系的转换
这个很简单,同一平面上不同坐标系的变换而已。
4. 图像像素坐标系与世界坐标系的转换
前面几个变换的叠加,最终得到所谓得相机内外参。
内参即以上2.3.变换得乘积,外参即1.从世界坐标系到相机坐标系得变换。
Reference
[1] 《机器视觉与机器学习》宋丽梅,朱新君;机械工业出版社。
(书里的图画的很难理解,符号没有做统一,公式也有问题的地方,读起来很心累,但又有什么办法呢? 做一件细致、维护到位的事情我们都知道多费心力。)