摄像头测距原理与代码实现

来源:互联网 发布:tensorflow最新版本 编辑:程序博客网 时间:2024/06/08 18:16

外界3D影像投射到摄像头传感器的原理其实就是针孔成像原理。

针孔成像原理,如图所示:

      

f为摄像头的焦距,c为镜头光心

模型的主要依据公式为f/d=h/H,设物体所在平面与相机平面的距离为d,物体实际高度为H,在传感器上的高度为h
根据这个模型,我们就能求出目标物体与我们的摄像头平面的距离。

分两种情况,但是这两种情况的条件都是假设实际物体与摄像机所在平面平行。

一种是当物体主线段过光心的情况,这种情况是最容易计算的, 即 h=sqrt ((横坐标之差*Dx)^2+(纵坐标之差*Dy)^2),  Dx为每个像素的宽度,Dy为每个像素的高度,

关于相机传感的尺寸,参考 http://blog.csdn.net/u011572037/article/details/78236795

  另一种就是物体主线段不过光心的情况,一般情况下都属于这个情况。

不废话,直接上程序,焦距和图像中心坐标都是相机标定的出的结果,个人推荐matlab的标定程序,比较人性化,而且准确

int width=640,height=480;double focalLength=4.2;//焦距(单位:mm)///////////////////////////////////////////////////////////////////求相机到线段的距离,注意相机平面必须与线段平面平行//所用到的主要公式f/d=h/H/////////////////////////////////////////////////////////////////int  coordinate(Point First,Point Second,Point centre,Point2d Sensor_Size,int H){First=Point(1,1);Second=Point(1,300);//先求出主光轴到两点连线的垂足的距离(实际尺寸)double h=0;//h为传感器上的高度//求垂足的坐标int  Distance_To_Centre = 0;//返回值(实际距离)Point retVal;          double dx = abs(First.x - Second.x);          double dy = abs(First.y - Second.y);          double u = (centre.x - First.x)*(First.x - Second.x) +          (centre.y - First.y)*(First.y - Second.y);          u = u/((dx*dx)+(dy*dy));            retVal.x = abs(First.x + u*dx);          retVal.y = abs(First.y + u*dy);    double centreToretVal=0;//主轴到垂足在图像上的距离centreToretVal=sqrt((centre.x-retVal.x)*Sensor_Size.x/width*(centre.x-retVal.x)*Sensor_Size.x/width+\(centre.y-retVal.y)*Sensor_Size.y/height*(centre.y-retVal.y)*Sensor_Size.y/height);int d=0;//与线段所在平面的距离h=sqrt((First.x-Second.x)*Sensor_Size.x/width*(First.x-Second.x)*Sensor_Size.x/width+\(First.y-Second.y)*Sensor_Size.y/height*(First.y-Second.y)*Sensor_Size.y/height);d=focalLength*H/h;double arctan=0;//实际垂足与光心的连线与主光轴的倾斜夹角arctan=atan((centreToretVal/focalLength));if(acos(arctan)!=0)Distance_To_Centre=d/cos(arctan);//根据倾斜角度求出实际距离return Distance_To_Centre;}


                                          


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 su室内渲染很暗怎么办 su未响应未保存怎么办 电脑工作栏没了怎么办 ps工作栏没了怎么办 草图大师文件太大打不开怎么办 su模型保存后不见了怎么办 墨汁溅到衣服上怎么办 黑裤子溅上白色颜料怎么办 解码器上墙后图像放大了怎么办 宝宝把墙画了怎么办 孩子画画勾线笔过敏怎么办 微信语音撤回了怎么办? 小天才电话手表充不上电怎么办 儿童电话手表定位不准怎么办 2岁宝宝不让刷牙怎么办 宝宝两岁蛀牙多还不刷牙怎么办 宝宝有蛀牙不肯刷牙怎么办 宝宝牙疼怎么办4岁 3岁宝宝龋齿牙疼怎么办 2岁宝宝不肯刷牙怎么办 3岁宝宝不爱刷牙怎么办 2岁宝宝不刷牙怎么办 二岁宝宝牙不好怎么办 小孩一刷牙就吐怎么办 孩子一刷牙就吐怎么办 两岁宝宝闹人怎么办 3岁宝宝不愿意刷牙怎么办 孩子牙没掉长出新牙来了怎么办 大孩子不洗澡怎么办啊 2岁宝宝不爱洗澡怎么办 手指画颜料变干怎么办 刮画纸画错了怎么办 电脑绘的图不能扩大怎么办 华腾同步课堂忘记密码怎么办 被缝纫机针扎了怎么办 大小孩抢了孩子玩具怎么办 无锡天一初中考不进天一高中怎么办 校考一个都没过怎么办 拼音会拼不会写怎么办 20岁出头很迷茫怎么办 出了社会很迷茫怎么办