基于计算机视觉的Android手机摄像头实现长度测量

原创 2016年08月29日 14:53:38
前言:该项目创作于几年前,当时采用的技术和开发环境想必现在已经得到了大大的改进,欢迎有了解最新技术进展的同行来交流指点。

Android
手机摄像头实现长度测量

1.功能简介
使用手机摄像头拍摄目标物体两个角度的图片,运用两视点几何的原理得到物体的三维坐标点,从而实现无接触测量距离。

2.软件特点
移动:运行在Android智能手机上,随时随地可以使用。
实用:我们身上不会带上尺子,但手机却是随身携带的物品,如果需要测量,拿出手机拍两幅物体的照片就能够得到长度信息;另外有的时候条件不允许接触测量,比如危险物品、贵重物品以及难以触及的物品,但使用这款软件就无需接触实现距离的测量。
易用:分别从两个角度拍摄物体的两幅图片,选择始点和终点,程序就会计算出两点的距离展示给用户。

3.系统设计

实现方法——古典+现代:
使用初等凸透镜成像公式?
理想情况,假定f可变焦、成像点清晰
实际情况,焦距一般固定,三维物体距离不同,无法在f下得到清晰像点,清晰不好判断、坐标系统不好固定。

3.1射影几何与计算机视觉对极几何


3基于针孔摄像头模型,空间中一点M到像平面点m的映射要经过投影矩阵P的转换(如下图),sm=K[R | T]M,其中K是摄像头参数矩阵,R、T是摄像头坐标系相对于世界坐标系的旋转和平移矩阵,sm是像点的齐次坐标。



空间物体点通过两个投影矩阵投影到左右两幅图像上,根据三维重构的理论,只需要得到这两个投影矩阵以及两个像点在图像上的坐标就可以使用三角法定位目标点三维坐标。


根据投影矩阵的构成,获取摄像头参数矩阵K、拍摄第二幅图像时候摄像头经历的刚体变换——旋转和平移 (R | T)矩阵是整个系统实现的关键。

3.2获取手机摄像头参数矩阵K:
使用张正友标定法”Flexible Camera Calibration ByViewing a Plane From Unknown Orientations”,这个方法操作比较容易,只需要做一幅黑白棋盘(显示器打开这样一幅图片也可以),用手机摄像头从不同角度拍摄大约10幅棋盘的图片,使用他们算法实现的标定程序就可以得到摄像头参数矩阵。



如果以拍摄第一幅图的摄像机坐标系作为参考坐标系,那么第一个摄像头位置的R就是单位矩阵I,T没有平移为零。
运用对极几何的理论,第二个位置的R和T可以利用两幅图片的对应关系求出来,只要找到7对以上的匹配点就可以把两幅图像的内在关系计算出来,当然匹配的点越多越准确,后继的操作也就越精准。

3.3对应点匹配
人工目测匹配    优点:确保100%准确       缺点:费时,匹配的点少



算法自动匹配    优点:快速,匹配点多     缺点:复杂环境下匹配不准确



3.4计算R和T
使用匹配的特征点对计算出基本矩阵F,根据匹配点的数目可以选择使用7点法、8点法、RANSAC等计算F的算法
计算本质矩阵E,E等于K的转置矩阵左乘F再左乘K
对E进行SVD分解,得到的U矩阵的最后一列乘以单值即为平移向量T,U矩阵左乘反对称矩阵再左乘V转置矩阵即得到旋转矩阵R。

3.5Android手机上的实现

因为只需要选择七个点就足够计算本质矩阵,进入选点界面后可以看到七个彩色小点排成北斗七星形状,通过触摸移动这些小点到特征明显的位置比如角点。为了实现实时处理,核心运算代码会调用到OpenCv(开源计算机视觉库),编写好C++程序之后通过NDK把源代码编译成可以供Android端java程序调用的动态链接库。


使用方法

1)从两个不同角度拍摄目标。
2)在第一幅图片上移动彩色小点,选择七个处于三维空间的点;右图需找到和左图相匹配的七个点。
3)点击测量距离按钮得到7个点两两以厘米为单位的实际距离,并返回第一和第二个点之间的距离。



文中的图片无法显现,可下载pdf版
点击打开链接

详情猛戳


版权声明:本文为博主原创文章,未经博主允许不得转载。

手机摄像头测距原理

手机摄像头测距原理

Android 实现 拍照测距 的APP

应朋友需求做了款拍照测距的APP,可以测出你到目标物体的距离。 源码发到了Github上,欢迎star、下载 github地址:点击打开链接 主要难点: 1.自定义相机 2.SurfaceView...

DRuler 拍照测距原理

拍照测距原理

如何用摄像头来测距(opencv)

 如何用摄像头来测距(opencv)作者:郭世龙       最近一直忙着找工作,blog都长草了,今天把以前作的一个东西放上来充充门面吧。记得在哪看到过老外做的这个东西,觉得很好玩,就自己也做了一个...
  • xylary
  • xylary
  • 2007年10月25日 19:01
  • 17623

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Opencv4Android之人脸检测与识别

本文基于Opencv,大体介绍在Android平台上实现人脸检测和人脸识别。

Android camera预览参数以及实际图像大小设置

参考一下两篇博文: http://www.cnblogs.com/skyseraph/archive/2012/03/26/2418665.html http://blog.csdn.net/y...

Android sdk开发之一 测距功能

转载地址: 本示例代码说明:基于最新开发包Android sdkv2.1.3 开发的测距功能DEMO,且手把手教会您配置KEY及运行DEMO的方法 示例操作:点击DEM...

AndroidBLE--Measuring distance(测量距离)

iBeacon介绍 iBeacon是苹果在2013年WWDC上推出一项基于蓝牙4.0(Bluetooth LE | BLE | Bluetooth Smart)的精准微定位技术,当你的手持设...

【计算机视觉】双目测距(五)--匹配算法对比

原文: http://www.cnblogs.com/polly333/p/5130375.html 三种匹配算法比较 BM算法: 该算法代码: view plainco...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于计算机视觉的Android手机摄像头实现长度测量
举报原因:
原因补充:

(最多只允许输入30个字)