利用android手机摄像头智能测量物体距离,高度

时间:2024-04-08 11:47:15

经过在下调研了利用手机摄像头智能测距,半个月断断续续得出几个方法,附上两个demo,然而东西都比较垃圾,比起人们想要的,差距十万八千里。

为了科技的进步,我就自不量力地抛砖引玉了,希望能有大牛阅读到这篇博客的时候,能给我一些指导,不胜感激。


方法一: 由针孔摄像头推导结果。多次测量取像素因子法。

这是一位叫张拭心朋友的做法,然后他的理论依据,算法都没有介绍,也不知道来自哪里。经过询问他本人也没有给出回答。代码是已知了高度求距离,或者已知了距离求高度。

 以下公式是我从他的代码里读出来的:

D = Th/(|sh-y*2|)*(Dx)^2

H = TD*|sh-y*2|/(Dx)^2

Ddistance 距离

HHeight 高度

ThtargetHeight  目标高度

ShscreenHeight 手机屏幕高度

y:手指在屏幕上的y

Dx:像素因子,误差因子 (默认34

上面的公式理论基础是针孔摄像头成像算法(我猜的,因为看针孔成像算法,好像有点类似)。然后缺少推导过程的公式,无法判断准确性。摄像头的参数用 Dx^2代表。仅可参看,不可当真。希望有读者大大能给我教教真正的做法,谢谢。

附上demo  demo不是我写的,但我是穷逼,要1个积分。

方法二:三角函数法

 利用android手机摄像头智能测量物体距离,高度

如图所示,利用三角函数,得出公式,物体的高度H = h((tan(a)+tan(b)))/tan(b)

 

h代表的是 地面到摄像头中心的距离。可以根据摄像头摆放的位置测量而出。

摄像头到物体的距离 D = h/tanB

 

上半部分的高度 H1 = D*tanA

 

物体的总高度 H = H1+h

 

所以 H = h/tanB*tanA+h

    = h*tanA/tanB + h*tanB/tanB

    = h*(tanA+tanB)/tanB

 

可是我听说,计算tanAtanB需要根据手机成像后的像素弧度来得出,目前,我不具备这样的水平,需要对摄像头和像素有一定的了解。有谁能告诉我 角A和角B如何求出来?

拍照时的要求是:需要被测物体和相机在同一水平面,否则计算需要更复杂的方式。


方法三:参照物法

利用android手机摄像头智能测量物体距离,高度


参照物法测量更准确,但是测量步骤较复杂。

1. 拍照的时候,必须有一个已知高度的参照物

2将参照物和被测物体放置在同一水平面上。

3.    相机垂直 参照物和被测物之间的连

4.  拍照之后,需要在屏幕上手动设置参照物的高度连线,被测物的高度连线。

参照物法更准确,因为不涉及手机摄像头的参数,以及像素因子,但测量步骤较繁琐。

附上大牛的demo,当然demo也不是我写的,但本人真的是穷逼,要1个积分


三种方法对比及结论:

第一种方法,如果能多次测量,得出最准确的像素因子,则是最方便的测量方式。然后公式推导过程需要有理论的支持。(目前尚未找到相关文献)。

 

第二种方法,难度在于像素弧度计算tanAtanB。 目前个人技术达不到,如果有能精确计算像素弧度,成像角度,则可行。

 

第三种方法:操作繁琐,编程相对容易,从技术角度而言,完全可行。