基于安卓平台的尺寸测量技术研究
2019-12-12何志豪陶青川
何志豪 陶青川
(四川大学电子信息学院 四川 成都 610065)
0 引 言
随着智能电表、用电信息采集终端等计量设备的大量推广应用,计量设备的质量一致性问题逐渐成为电力相关部门关注的热点问题。质量一致性即要求被检设备与标准设备的质量状况保持一致,主要包括外观标识、型号尺寸、印刷电路板元器件及性能指标的一致性[1]。其中,尺寸检测是近年来研究的热点问题之一[2],而在目前已知检测方式中,智能电表现场尺寸检测以人工方式为主,要求工作人员使用尺子测量智能电表的尺寸,然后将测量尺寸与标准尺寸进行比对,最后记录检测结果。这种人工检测方式存在许多不足,比如检测易受人工影响、效率低、自动化程度差、检测时间长等。为了避免人工检测工作中存在的弊端,不少专家学者进行了一系列的基于机器视觉的计量设备一致性检测相关研究。如邓桂平等[3]设计了智能电能表质量一致性检测系统,虽然该系统在一定程度上实现了对不同型号智能表的外观型式、硬件PCB板和软件通信规约三方面的一体化一致性检测,且解决了人工检测所存在的一些问题。但是由于相关检测系统均需要复杂且昂贵的机械自动化装置,且系统多应用于生产线上,暂无法满足在现场工作环境中使用的需求。
本文针对上述智能电表现场一致性检测工作中存在的问题,结合电力部门现场工作的特点和尺寸测量的需求,提出一种基于安卓平台的智能电表尺寸测量技术。该技术通过摄像机标定、智能电表特征点提取及匹配、三维重建和尺寸计算,实现了在现场工作环境下智能电表的尺寸检测。该系统不需要复杂又昂贵的机械自动化装置,测量准确率和效率高,降低了检测的人力成本,缩短了检测时间,提升了检测的自动化水平,适用于现场测量。
1 系统概述
1.1 系统框架设计
在安卓平台下实现智能电表尺寸测量,需要通过Android NDK将利用JNI编写实现尺寸测量算法的C/C++代码嵌入到Android应用程序中[4],然后在Android手持终端上进行尺寸检测工作。该系统实现过程如下:首先,利用JNI作为接口编写实现尺寸测量算法的C/C++代码;其次,通过Android NDK进行编译,生成Java可调用的共享动态库;然后编写Java端代码,利用JNI接口调用动态库;最后通过Android SDK生成安卓平台下的应用程序。系统框架设计如图1所示。
图1 系统框架设计图
1.2 基本工作原理
文中利用安卓手持终端进行图像采集,在Java端调用尺寸测量算法完成测量工作,测量结果显示在手持终端上。基于安卓平台的智能电表尺寸测量,其核心是尺寸测量算法,算法主要包括摄像机标定、特征点提取及匹配、三维重建和尺寸计算四个部分,算法流程如图2所示。
图2 尺寸测量算法流程图
智能电表尺寸测量算法具体流程如下:首先,使用安卓手持终端进行图像采集,利用张正友标定法完成摄像机标定;其次,融合智能电表轮廓特征和Hu矩,从采集的图像中识别智能电表,完成智能电表特征点提取和匹配;然后,根据摄像机标定中二维图像坐标到三维世界坐标的对应关系,每个特征点匹配对都可以建立超定线性方程组,采用最小二乘法求取方程组解完成三维重建;最后,计算智能电表特征点间三维世界坐标的欧式距离,完成尺寸测量。
2 尺寸测量算法设计
2.1 摄像机标定
2.1.1摄像机模型
摄像机标定需要选取适当的摄像机模型,之后通过相应实验与计算来确定摄像机内外部参数[5]。真实世界物体表面某特征点的三维几何位置与其在二维图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型的参数就是摄像机内外部参数[6]。本文摄像机标定算法中选取的摄像机模型是针孔摄像机模型[7],如图3所示。
图3 针孔摄像机模型
图3的针孔模型中,有以下四个坐标系:世界坐标系OwXwYwZw、摄像机坐标系OcXcYcZc、像面坐标系O1xy和像素坐标系O0uv,其中像面坐标系与像素坐标系统称为图像坐标系。在本文针孔模型中,取空间点P,P点在上述四个坐标系中的坐标对应为:(Xwp,Ywp,Zwp)、(Xcp,Ycp,Zcp)、(xp,yp)和(u,v)。空间点P在像素坐标系中坐标值(u,v)变换到世界坐标系中坐标值(Xwp,Ywp,Zwp)需要经过如下步骤:
步骤1像素坐标系到像面坐标系的变换,变换关系如下:
(1)
式中:(u0,v0)为O1点在像素坐标系O0uv中的坐标;dx、dy为每个像素在x轴、y轴上对应的真实物理尺寸。
步骤2像面坐标系到摄像机坐标系的变换,变换关系如下:
(2)
式中:c为摄像机的有效焦距;ρ为系数。
步骤3摄像机坐标系到世界坐标系的变换,变换关系如下:
(3)
式中:R为3×3阶旋转矩阵;T为3×1阶平移矩阵。
步骤4像面坐标系到世界坐标系的变换,将式(1)和式(3)代入式(2)即可得到如下变换关系:
(4)
式中:ax=c/dx,为u轴上的等效焦距;ay=c/dy,为v轴上的等效焦距;M为3×4矩阵,称为投影矩阵;M1由摄像机内参数ax、ay、u0、v0决定,因其只与摄像机内部结构有关,故称为内参数矩阵;M2由摄像机相对于世界坐标系的外参数决定,称为外参数矩阵[8]。
2.1.2标定流程
摄像机模型中的摄像机内外参数是通过相应实验和计算才能得到,而实验和计算的过程被称为摄像机标定[9-10]。文中根据张正友标定法,提出一种基于Opencv的摄像机标定方法[11]。具体标定流程如图4所示。
图4 摄像机标定流程图
这种方法首先需要在智能电表旁放置一个平面棋盘格标定模板[12],利用安卓手持终端从不同角度采集3幅图像;其次分别从采集的图像中提取棋盘格角点信息,若角点信息提取成功则继续提取亚像素角点信息,否则重新采集图像进行标定;然后利用所有角点信息计算出摄像机内外参数和畸变参数;最后利用前述得到的摄像机内外参数和畸变系数计算空间三维点反投影坐标,再根据反投影坐标与亚像素角点坐标之间的偏差评价标定结果,完成摄像机标定。
2.2 特征点提取及匹配
2.2.1Hu矩
矩是描述图像特征的算子,Hu提出了不变矩的概念,Hu矩对图像具有旋转、平移和比例变化的不变性[13-14]。文中在灰度化、滤波和边缘提取等图像预处理的基础上,提取图像的Hu矩。
假设图像f(x,y)大小为M×N,其(p+q)阶几何矩定义如下:
(5)
其(p+q)阶几何中心矩定义如下:
(6)
当图像发生旋转和平移时,mpq会随之改变,upq虽具有平移不变性,但会因旋转而发生改变,归一化中心矩可以使几何中心矩具有旋转不变性和比例不变性,其定义如下[15]:
(7)
Hu利用二阶和三阶归一化中心矩的线性组合构成了7个具有旋转、平移和比例不变性的不变矩,其定义如下:
φ1=η20+η02
(8)
(9)
φ3=(η30-3η12)2+(3η21-η03)2
(10)
φ4=(η30+η12)2+(η21+η03)2
(11)
φ5=(η30-3η12)(η30+η12)[(η30+η12)2-
3(η21+η03)2]+(3η21-η03)(η21+
η03)[3(η30+η12)2-(η21+η03)2]
(12)
φ6=(η20-η02)[(η30+η12)2-(η21+η03)2]+
4η11(η30+η12)(η21+η03)
(13)
φ7=(3η21-η03)(η30+η12)[(η30+η12)2-
3(η21+η03)2]+(3η12-η30)(η21+
η03)[3(η30+η12)2-(η21+η03)2]
(14)
令testhu={testhu[k]|k=1,2,…,7}表示待测图像的Hu矩集合,temphu={temphu[k]|k=1,2,…,7}表示模板图像的Hu矩集合。本文中,采用hudis来度量两幅图像的Hu矩相似度。
(15)
2.2.2特征点提取及匹配算法
智能电表特征点的提取及匹配也是进行尺寸测量的关键步骤,特征点提取及匹配好坏直接影响尺寸测量准确率。考虑到文中的尺寸测量技术是在现场工作环境下实现,因此提出了一种融合智能电表轮廓特征和Hu矩进行特征点提取及匹配的方法,算法具体步骤如下:
步骤1设模板图像为temp和待测图像为test,检测test中的轮廓,形成候选轮廓集F。
步骤2设标准智能电表的宽为W,高为H,根据智能电表的矩形外观特征和W/H比值删选合适轮廓并更新候选轮廓集F。
步骤3计算temp的Hu矩,记为temphu;分别计算F中每个轮廓对应区域的Hu矩,记为testhu,并建立索引。
步骤4利用式(15),将F中每个轮廓对应的testhu与temphu进行相似性度量,形成相似度度量集S。
步骤5将S中度量值按从小到大进行排序,选取S的最小值来索引对应轮廓,完成test中智能电表区域定位。
步骤6再选取一幅测试图像,分别进行步骤1-步骤5。
步骤7分别从两幅测试图像的智能电表区域中取最小外接矩形,并提取矩形的四个顶点,形成顶点集D1和D2。
步骤8按照智能电表顶点对应关系将D1、D2进行排序,排序后D1中的点与D2中的点一一匹配,依次返回匹配结果,完成特征点提取及匹配。
2.3 三维重建
空间任意一点在像素坐标系中二维坐标值变换到世界坐标系中三维坐标值的过程,称为三维重建[16]。经过上述摄像机标定和特征点提取及匹配,可以得到智能电表目标匹配点的二维像素坐标值,再进行三维重建便可求取三维空间坐标值。假设一空间点P在世界坐标系下的三维坐标为(Xwp,Ywp,Zwp),经过安卓手持终端在不同位置的拍摄,空间点P在位置1和位置2拍摄图像中的像素坐标分别取为p1(u1,v1)、p2(u2,v2),并由前述摄像机模型中投影矩阵给出如下定义:
(16)
假设位置1和位置2拍摄图像对应的投影矩阵分别为Mf、Ms,对于p1(u1,v1)和p2(u2,v2),可由式(4)分别得到:
(17)
(18)
式中:系数Zc1、Zc2分别为p1和p2在对应摄像机坐标系下的坐标值。
式(17)和式(18)分别经过变换和分解移项处理可消除系数Zc1、Zc2,得到位置1平面投影方程和位置2平面投影方程如下:
(19)
(20)
联立式(19)和式(20)得到超定线性方程组,表示为:
(21)
为了便于表示,式(21)可记为下式:
AX=B
(22)
经过摄像机标定和特征点提取及匹配过程后,Mf、Ms、(u1,v1)、(u2,v2)都是已知量,式(21)中只有三个未知量,通过式(22)的求解可以得到空间点P的三维坐标值。本文采用最小二乘法求取式(22)的一个近似解作为三维空间坐标的一个估计,近似解求解表达式如下[17]:
X=(ATA)-1ATB
(23)
2.4 尺寸计算
经过三维重建后,可以得到智能电表特征点的三维空间坐标,这些坐标包含了特征点间真实物理尺寸信息,任意两特征点的距离可以用欧式距离度量。假设用于标示智能电表尺寸信息的特征点为P1(X1,Y1,Z1)、P2(X2,Y2,Z2)、P3(X3,Y3,Z3),P1P2和P1P3分别代表智能电表的宽、高,利用式(24)便可计算出智能电表尺寸。
(24)
3 实验与分析
文中技术实验的操作界面使用Java语言编写,尺寸测量算法使用C++语言实现,利用Android NDK、JNI实现Java端与算法的交互。实验开发平台是Android Studio 2.3.3,其中涉及到的NDK版本号为androidndkr16b,SDK版本号为26.0.2,OPENCV版本号为3.0.0。为了验证文中安卓平台下尺寸测量技术的有效性,采用具有拍照功能的安卓终端作为实验设备,实验设备的配置信息如表1所示。采用国网上海市电力公司电力科学研究院提供的单相费控智能电表(标准尺寸为157mm×111mm)作为实验待测物。
表1 实验设备配置信息表
利用前文所述实验设备和待测物进行实验,实验运行界面和实验结果界面如图5所示。
(a) 实验运行界面图 (b) 实验结果界面图图5 实验界面图
此外,利用iPhone测距仪测量待测物作为对比实验。iPhone测距仪测量步骤如下:(1) 打开iPhone的“测距仪”,此时摄像头也会被打开;(2) 界面中会出现一个圆圈,圆圈中有一个小圆点,将这个圆点对准待测尺寸的一端,点击按钮选定起点;(3) 沿着待测尺寸方向移动,当小圆点对准待测尺寸的末端时,再点击按钮选定终点,随后测量结果就会显示在屏幕中。按照上述步骤使用iPhone测距仪测量待测物尺寸,实验效果图如图6所示。
(a) 测量高实验图 (b) 测量宽实验图图6 iPhone测距仪实验图
利用本文方法和iPhone测距仪进行多组实验,分别随机选取其中10组实验结果,实验结果如表2所示。可以看出,本文方法测量值在标准值附近波动,误差较小且测量精度为毫米级,而iPhone测距仪仅能粗略测量智能电表的厘米级尺寸,测量值在标准值上下波动较大,难以应用于智能电表的实际尺寸测量工作中。相比之下,本文方法的技术测量精度、准确率更高,满足实际工作需求。
表2 实验结果对比表
根据表2数据通过计算得到两种方法的测量高和宽的准确率,如图7、图8所示。可以看出,本文方法测量准确率相对稳定,最低值也保持在95%以上,而iPhone测距仪测量准确率波动较大,且准确率大都略低于本文方法的测量准确率。
图7 测量高准确率对比图
图8 测量宽准确率对比图
通过统计本文方法和iPhone测距仪实验时的平均测量准确率和平均耗时来衡量两种方法的测量性能,性能对比如表3所示。可以看出,iPhone测距仪的测量准确率稍低且耗时长,这是因为它的测量精度为厘米级以及它的测量步骤更复杂。而本文方法的测量精度高至毫米级,操作步骤较简易,故本文方法测量性能更佳,更能满足智能电表的尺寸测量工作需求。
表3 测量性能对比表
4 结 语
针对当前智能电表一致性检测工作中存在的诸多问题,同时结合电力部门现场工作的特点和尺寸测量的需求,本文提出了基于安卓平台的智能电表尺寸测量技术。该技术通过摄像机标定、智能电表特征点提取及匹配、三维重建和尺寸计算,实现了在现场工作环境下智能电表的尺寸检测。系统不需要复杂又昂贵的机械自动化固定装置,操作简易,人机交互界面友好,测量精度可至毫米级,测量准确率高达95%以上,测量耗时短,提升了检测的自动化水平,适用于现场测量工作。与iPhone测距仪进行实验对比,结果表明iPhone测距仪只能粗略测量尺寸且耗时长,而本文方法应用于现场智能电表尺寸测量工作时,测量性能更佳,能够最大程度满足现场工作的需求,具有很高的实用价值。