单目视觉(1)
note:学习一下单目视觉,本文只代表作者写本文时的想法和理解。限于当时的水平和学习的进展,可能有些错误,望谅解。
问题提出
人眼观察世界通过两个视角来形成对空间的基本认知。模仿人眼的原理,可以使用多个摄像机同时采集同一空间中的图像,然后通过一定的算法来实现对三维空间的重建。这就是典型的双目视觉(stereo-vision)问题。由此可以衍生出多视觉(multi-vision)的重建问题。那么如果只有一台摄像机,是否可以呢?通过单个摄像头拍摄的图像来实现三维空间的重建称之为单目视觉。
基本原理
单帧测距
(一)测物体到相机的距离
单目视觉获得的图像本质上是2D的,结合相机的成像模型(初中物理,小孔成像)j就可以获知距离了,前提是你知道物体的真实大小。
- case 1: 物体在摄像机的正前方,即相机坐标系的y轴上。
如果物体在摄像机的正前方(光轴上),那么可以做一个简单的公式计算:
其中f为焦距,d为物体到相机的距离,h为物体在像上的高度,H为物体的实际高度。
焦距是相机的内参数,一旦相机确定,这个数值基本就是确定了。H为物体的实际高度,这个也是可以获取的。
为所求,那么
的获知就是成了关键。
代表了物体所成像的高度。像的获取是通过摄像机内部的感知元件作用后保留下来的,如果知道每个感知元件的物理尺寸(
)和像中包含的感知元件的个数(
),那么就能够得知像的高度
。那么式子(1)就可以转化为:
case 2: 物体在摄像机坐标系的xy平面上有偏移(即在x轴上有值)
那么物体成像并不是在图像的中间部分,而会在中间偏左或者偏右的位置。因为物体并不是在摄像机的正前方,反而存在一个水平方向的夹角
。此时光心到像中心(非图像中心)的距离与光心到物体的距离满足case 1的模型。即有:
其中 表示光心到像中心的距离, 表示光心到物体中心的距离, 表示像中心到图像中心的水平偏移距离, 表示水平偏移的像素个数。
此时,可以得到物体到摄像机的距离为:
这个符合预期,因为只是在x轴上移动了而已,并没有增加y轴上的距离。所以公式应该与 case1相同。
case 3: 当物体在z轴上有移动时,即在光轴上下移动。
可以猜想,计算公式也和前两个case相同。
(二)测物体的大小
依据之前推导的公式,如果知道了物体到摄像机的距离,那么其实可以推导出物体的一些尺寸。即:
多帧测距
多帧测距是通过摄像机拍摄运动的物体获得多幅图像,然后寻找其中相对应的部分计算出像素的相对位移,然后通过相应的算法来测算距离。(感觉有点类似双目视觉,但理论推导可能不一样)
由透镜成像原理可知:
那么则有:
References
[1] 单目视觉测距
[2] OpenCV单目平面测距
[3] 基于单目视觉的实时测距方法研究