单目视觉学习(1)

单目视觉(1)

note:学习一下单目视觉,本文只代表作者写本文时的想法和理解。限于当时的水平和学习的进展,可能有些错误,望谅解。


问题提出

人眼观察世界通过两个视角来形成对空间的基本认知。模仿人眼的原理,可以使用多个摄像机同时采集同一空间中的图像,然后通过一定的算法来实现对三维空间的重建。这就是典型的双目视觉(stereo-vision)问题。由此可以衍生出多视觉(multi-vision)的重建问题。那么如果只有一台摄像机,是否可以呢?通过单个摄像头拍摄的图像来实现三维空间的重建称之为单目视觉。


基本原理

单帧测距

(一)测物体到相机的距离
单目视觉获得的图像本质上是2D的,结合相机的成像模型(初中物理,小孔成像)j就可以获知距离了,前提是你知道物体的真实大小。

小孔成像

  • case 1: 物体在摄像机的正前方,即相机坐标系的y轴上。
    如果物体在摄像机的正前方(光轴上),那么可以做一个简单的公式计算:
    f d = h H ( 1 )

    其中f为焦距,d为物体到相机的距离,h为物体在像上的高度,H为物体的实际高度。

焦距是相机的内参数,一旦相机确定,这个数值基本就是确定了。H为物体的实际高度,这个也是可以获取的。 d 为所求,那么 h 的获知就是成了关键。 h 代表了物体所成像的高度。像的获取是通过摄像机内部的感知元件作用后保留下来的,如果知道每个感知元件的物理尺寸( δ )和像中包含的感知元件的个数( n ),那么就能够得知像的高度 h = n δ 。那么式子(1)就可以转化为:

(1) f d = n δ H ( 2 ) (2) d = f H n δ ( 3 )

case 2: 物体在摄像机坐标系的xy平面上有偏移(即在x轴上有值)
那么物体成像并不是在图像的中间部分,而会在中间偏左或者偏右的位置。因为物体并不是在摄像机的正前方,反而存在一个水平方向的夹角 α 。此时光心到像中心(非图像中心)的距离与光心到物体的距离满足case 1的模型。即有:

(3) d = f H n δ ( 3 ) (4) f = f 2 + l 2 ( 4 ) (5) l = n x δ     ( 5 ) (6) α = arctan ( l f ) ( 6 )

其中 f 表示光心到像中心的距离, d 表示光心到物体中心的距离, l 表示像中心到图像中心的水平偏移距离, n x 表示水平偏移的像素个数。
此时,可以得到物体到摄像机的距离为:
d = d cos α = H f 2 + ( n x δ ) 2 n δ f f 2 + ( n x δ ) 2 = H f n δ ( 7 )

这个符合预期,因为只是在x轴上移动了而已,并没有增加y轴上的距离。所以公式应该与 case1相同。

case 3: 当物体在z轴上有移动时,即在光轴上下移动。
可以猜想,计算公式也和前两个case相同。

(二)测物体的大小
依据之前推导的公式,如果知道了物体到摄像机的距离,那么其实可以推导出物体的一些尺寸。即:

H = n δ d f ( 8 )

多帧测距

多帧测距是通过摄像机拍摄运动的物体获得多幅图像,然后寻找其中相对应的部分计算出像素的相对位移,然后通过相应的算法来测算距离。(感觉有点类似双目视觉,但理论推导可能不一样)

序列图像
由透镜成像原理可知:

(7) 1 z 1 + 1 d 1 = 1 f ( 9 ) (8) 1 z 2 + 1 d 2 = 1 f ( 10 ) (9) h 1 z 1 = H d 1 ( 11 ) (10) h 2 z 2 = H d 2 ( 12 )

那么则有:
d 1 h 1 = d 2 h 2 ( 13 ) ( )

N O T E :

References

[1] 单目视觉测距
[2] OpenCV单目平面测距
[3] 基于单目视觉的实时测距方法研究


猜你喜欢

转载自blog.csdn.net/xholes/article/details/79687230
今日推荐