1.测量
传统的双目测距需要准备两个照相机,分开一定距离放置,对着要测距的物体拍摄两张独立的照片,比如,下图中,我们在相同距离,在一块地板砖(60cm)左右两侧拍摄了两张照片:
1.双目测距的原理
双目测距的原理,利用了真实世界里两次拍照的角度差,与照相机里两次拍照的像素偏移相对镜头焦距的角度差,两个角度相等的特性。
2.数据识读:
比对两张照片中,所需要测距的物体,在两次拍照过程中的像素偏移,比如最前方的门框。直接用mspaint绘图工具手工就可以得到这个像素偏移:
上图左侧,门框的左侧,像素点坐标是:619pt(横坐标)
上图右侧,同样测量门框的左侧,像素点坐标是:613(横坐标)
所以,两张照片里,同一个标志物的像素差别是:水平方向-6个像素。
检查此时的照相机参数:96dpi, 35mm焦距。
所以,6个像素相当于:
6*1inch/96 = 1/16 inch = 25.4mm/16 = 1.5875mm
所以按照角度相等的关系:
35mm/1.5875mm = dis?/600mm
所以,最终距离 = 132.28米。这个显然不对,对吧。为什么呢?图片经过微信上传时做了尺寸缩放,微信传送,压缩后的幅面是:1279*1706,它的原始幅面是:3468*4624:
所以,修正后的像素数目是:
6*3468/1279 = 16.27像素。即:16.27/96*inch = 4.3048mm
所以:
35mm/4.3048mm = dis?/600mm
Dis = 48.78m 这个大致正确。因为是数字相机,此时的理论误差大概在:1/.16pt *48.78 = 3米。
2.误差
实际勘察了现场情况,是44.4块60cm地砖,大概的长度是:44.4*0.6 = 26.64m,
误差:(48.78 – 26.64)/26.64 = 83.1%
3.粗略校对
很容易想到,这种错误是由于手机两次拍照没有对准同一个方向造成的。注意,两张照片中,我们能看到在照片的下部,有两根垂线。由这两根垂线,我们能得到两次拍照时,相机的角度的差值:
左侧,每块地砖是60cm, 前方3块地砖=1.8米处,地砖水平,垂直接缝处的像素点x坐标是:659:
同理,得到另一张照片,相邻线的坐标是:678.
所以,相机两次拍照的像素点差值是:(678-659)pt = 19
之前我们测得的远端的像素差值是-6。所以,其实参与运算的点数其实不是-6,而是19+(-6)=13才对。
所以,实际测测量值应该是:48.78 * 6/13 = 22.51m
最终误差是:(26.64 – 22.51)/26.64 = 15%。
矫正后的误差已经非常接近理论误差:1(pt)/13(pt) = 7.6%。只差两个像素。