1、队伍 LBYTE,Android手机摄像头实现长度测量,随着智能手机的飞速发展,智能手机的使用逐渐普及起来, 智能手机提供的摄像功能越来越强,摄像的像素越来越清晰, 那么,除了摄像,我们能不能利用智能手机提供的摄像功能 来扩展一些新的功能呢?,当你在上海旅行时,看到了东方明珠时,是不是既想把它照下来,又想如果要是同时能把它的高度计算 出来多好啊?,当你在北京博物馆参观时,看到了青铜鼎时,是不是既想把它照下来,又想知道这个鼎的高和宽呢?,我们队伍设计的基于Android手机摄像头实现长度测量 的程序就是来实现上面的需求的。这样我们可以不用尺子来测量距离。,市场上已有的一些先进的测量仪器,虽然市场
2、上出现了这些先进的测量距离的仪器,使人们不用尺子就能测量物体的高度,但是他们往往比较昂贵且不易携带。,Contents,我们的目标 不接触目标物体,不使用尺子就能测量人的高度、桌子的长度、远方物体的距离,无需通过高端昂贵的专业仪器,只需要使用随手可得的带摄像头手机就能完成这些功能。,目标软件的特点,移动:运行在Android智能手机上,随时随地可以使用。实用:我们身上不会带上尺子,但手机却是随身携带的物品,如果需要测量,拿出手机拍两幅物体的照片就能够得到长度信息;另外有的时候条件不允许接触测量,比如危险物品、贵重物品以及难以触及的物品,但使用这款软件就无需接触实现距离的测量。易用:分别从两个角
3、度拍摄物体的两幅图片,选择始点和终点,程序就会计算出两点的距离展示给用户。,如何实现?,使用初等凸透镜成像公式? 理想情况,假定f可变焦、成像点清晰 实际情况,焦距一般固定,三维物体距离不同,无法在f下得到清晰像点,清晰不好判断、坐标系统不好固定。,实现方法古典+现代,射影几何与计算机视觉对极几何 基于针孔摄像头模型,空间中一点M到像平面点m的映射要经过投影矩阵P的转换(图2),sm=KR | TM,其中K是摄像头参数矩阵,R、T是摄像头坐标系相对于世界坐标系的旋转和平移矩阵,sm是像点的齐次坐标。,对极几何,空间物体点通过两个投影矩阵投影到左右两幅图像上,根据三维重构的理论,只需要得到这两个
4、投影矩阵以及两个像点在图像上的坐标就可以使用三角法定位目标点三维坐标。,根据投影矩阵的构成,获取摄像头参数矩阵K、拍摄第二幅图像时候摄像头经历的刚体变换旋转和平移 (R | T)矩阵是整个系统实现的关键。,获取手机摄像头参数矩阵K,使用张正友标定法”Flexible Camera Calibration By Viewing a Plane From Unknown Orientations”,这个方法操作比较容易,只需要做一幅黑白棋盘(显示器打开这样一幅图片也可以),用手机摄像头从不同角度拍摄大约10幅棋盘的图片,使用他们算法实现的标定程序就可以得到摄像头参数矩阵。,获取旋转平移矩阵R,T,
5、如果以拍摄第一幅图的摄像机坐标系作为参考坐标系,那么第一个摄像头位置的R就是单位矩阵I,T没有平移为零。 运用对极几何的理论,第二个位置的R和T可以利用两幅图片的对应关系求出来,只要找到7对以上的匹配点就可以把两幅图像的内在关系计算出来,当然匹配的点越多越准确,后继的操作也就越精准。,对应点匹配,人工目测匹配 优点:确保100%准确 缺点:费时,匹配的点少,算法自动匹配 优点:快速,匹配点多 缺点:复杂环境下匹配不准确,计算R和T,使用匹配的特征点对计算出基本矩阵F,根据匹配点的数目可以选择使用7点法、8点法、RANSAC等计算F的算法 计算本质矩阵E,E等于K的转置矩阵左乘F再左乘K 对E进
6、行SVD分解,得到的U矩阵的最后一列乘以单值即为平移向量T,U矩阵左乘反对称矩阵再左乘V转置矩阵即得到旋转矩阵R。,Android手机上的实现,界面:简洁友好,分为操作栏和帮助栏,操作栏的竖排按钮体现了操作的流程,帮助栏有使用方法的详细介绍。选择匹配点也简单好玩,因为只需要选择七个点就足够计算本质矩阵,进入选点界面后可以看到七个彩色小点排成北斗七星形状,通过触摸移动这些小点到特征明显的位置比如角点。处理:为了实现实时处理,核心运算代码会调用到OpenCv(开源计算机视觉库),编写好C+程序之后通过NDK把源代码编译成可以供Android端java程序调用的动态链接库。,使用方法,1)从两个不同角度拍摄目标。 2) 在第一幅图片上移动彩色小点,选择七个处于三维空间的点;右图需找到和左图相匹配的七个点。 3)点击测量距离按钮得到7个点两两以厘米为单位的实际距离,并返回第一和第二个点之间的距离。,Thank You !,