基于OpenCV的路亚运动目标识别与长度测量研究
2018-05-23李乃乾刘杨
李乃乾 刘杨
摘 要: 针对路亚运动中需要对捕获鱼的长度进行测量的问题,本文是基于iOS平台上对目标做出识别进而测量出物体的长度。主要是通过OpenCV在iOS中对手机拍摄的鱼尺照片做出高精度的识别,保证能够快速、准确地对目标进行识别,同时既要保证高精度的测量尺寸的大小,还要保证同场竞技过程中的公平性。实验结果是测量误差降到最低。
关键词: iOS平台;路亚运动;OpenCV;目标识别;长度测量
Abstract:In view of the problem that the fishes need to be measured in the Lure movement this paper is based on the iOS platform to identify the target and then measure the length of the object. It is mainly through the high-accuracy identification of fish feet photos taken by OpenCV in iOS not only to ensure that the target can be identified quickly and accurately but also to ensure the accuracy of the measurement size and ensure the fairness in the same field competition. The result of the experiment is that the measurement error is reduced to the lowest.
Key words: iOS platform;Lure fishing;OpenCV;target recognition;length measurement
引言
中國越来越多的人喜欢路亚运动,为了给海钓运动者们创造一个共同竞技的平台,不受地域范围、场地限制地享受钓鱼运动的竞技乐趣,本次研究通过基于OpenCV的iOS移动终端实现对目标的识别,从而快速、高精度地测量出物体的长度。
作为一个主流的计算机视觉和机器学习库,OpenCV不但可以在多个操作系统上运行,而且可以灵活嵌入于物理世界的实时应用中。因其主要是轻量级而且高效,并由一系列 C 函数和少量 C++ 类构成,对Python、Ruby、Matlab等语言均提供了可以调用的接口,这就在有关图片视频处理、图像识别、机器学习等应用研究方面占据了独特优势。从设计原理来说,其实就是在开发一个通行可用的计算机视觉库,为基本的视觉应用提供开放且优化的源代码,使开发者在这个通用的架构上展开后续进一步操作。OpenCV已经设计成为具备可移植性的库,其代码可以由主流编译器进行编译 故而能够运行于大多数的商业系统。本文中通过采用OpenCV在iOS中对鱼尺牌进行高精度的识别,而将其作为钓鱼运动的直接竞技判定标准。
1 目标识别
OpenCV在iOS中对鱼尺牌进行高精度的识别,来作为钓鱼运动切实直接的竞技判定标准。在对目标识别的过程中,OpenCV的图像识别就是对特征点的采取。首先,提取识别图像中的特征点,同时判定每个图像中的点是否归属同一个图像特征;然后,提取在图像中突出且具代表意义的一些点,便可以用来识别图像。具体来说,Harris、ShiTomasi、亚像素级、SURF、Star关键点、FAST关键点、Lepetit关键点是OpenCV中的主要提取方法。经过对照与比较研究可知,SURF算法运算简单并且效率更高,为此将使用图像SURF特征进行拼接。
1.1 基本原理
SURF(Speeded Up Robust Features)是SIFT检测算法的改进版。重点是通过基于尺度空间理论来提取特征点,也就是通过检测图像局部极值点并定位到特征点的位置坐标,即局部的最亮点或最暗点。
1.2 算法流程
1.2.1 构造Hessian矩阵,计算特征值α
SURF与SIFT的不同之处有很多,关键一点就是SIFT采用了DOG图像,而SURF采用了Hessian矩阵行列式中的近似值图像。这里,随即给出了图像中一个像素点的Hessian矩阵的数学表述如下:
由于求解Hessian时要先进行高斯平滑,再通过对二阶导数求导,使模板卷积形成离散的像素点,这2种操作结合后只用一个模板代替就可以了。比如说,Y方向上的模版即如图1所示。图1展示了9×9方框滤波掩膜版,其中灰色部分掩膜版值为0,对应二阶高斯滤波系数σ=1.2,方框滤波模板和图像卷积运算后的值则分别标记为Lxx、Lxy、Lyy。
有了这个近似的模板后,计算高斯滤波和二阶导数两个步骤就可以合并为一个步骤完成。同时,又引入了积分图像,因此更提高了运算效率。
1.2.2 构造高斯金字塔
研究可知,在SIFT算法的高斯金字塔构造过程中,SIFT算法的速度获得了进一步的提升。在SIFT算法中,每一组(octave)图像的大小是不同的,下一组是上一组图像的降采样(1/4大小);但在每一组内部,彼此的图像大小是一样的,不同的只是其中采用的尺度σ的不同。而且在模糊过程中,与其关联的高斯模板大小总是不变的,就是尺度σ会发生改变。对于SURF而言,图像的大小保持固定不变,改变的只是高斯模糊模板的尺寸,然而尺度σ也是会存在一定改变的。
图2(a)是高斯模板保持不变、图像大小改变的情况,因此对SIFT算法比较适用。图2(b)是高斯模板做出了改变、图像大小固定的情况,因此对SURF算法比较合适。究其原因在于SURF算法没有降采样的过程,就使得处理速度得到提高。
1.2.3 定位特征点
首先,对特征点进行初步定维。如图3所示,将经过Hessian矩阵处理后的每个像素点与其三维领域的26个点大小进行比较。比较后发现,如果这是26个点中比较后得到的极值,便保留下来,并作为初步的特征点。
然后,与SIFT算法类似,通过三维线性插值法的运算处理将会得到亚像素级点,同时也会滤掉小于一定阈值的点。增加极值使检测到的特征点数量减少,最终只有几个特征最强点会被检测出来。
1.2.4 确定特征点主方向
为了保证旋转的不变性,SURF中对梯度直方图不予标记,然而却需标记特征点邻域中的Harr小波特征。也就是将特征点作为中心,接下来会计算半径为6s(s为特征点所在的相应尺度值)的邻域内,即汇总统计扇形内60°的点在水平和垂直方向的Haar小波回应的总和(Haar小波长取4s),并为这些回应值赋予了高斯权重系数,使得靠近特征点的回应贡献大,而远离特征点的回应贡献小。与此同时,60°范围内的回应相加后便形成新的矢量,遍历整个圆形区域。再以此为基础,选择最长矢量的方向设定为该特征点的主方向。然而,对特征点中的数值展开计算后,就会得到特征点的主方向。综上可得,绘制该过程则如图4所示。
1.2.5 构造特征描述子
在特征点周围取一个正方形框,正方形的边长为20s(s是过程检测到该特征点所在的尺度)。该正方形是带方向的,方向就是1.2.4节测试出来的主方向。通过把该框分为16个子区域,每个子区域统计25个像素的水平方向和垂直方向的haar小波特征,再利用主方向的相对位置,从而判断出水平方向和垂直方向。该haar小波特征为水平方向值之和,水平方向绝对值之和、垂直方向值之和、垂直方向绝对值之和。基于上文内容,推得这一特征构造过程可如图5所示。
這样,每个小区域就会包含4个值,对于每个特征点是16*4=64维向量,相较SIFT而言,就减少了一半,这在特征匹配过程中会大大加快匹配的速度。
至此可得 SURF采用Henssian矩阵获取图像局部的极值仍可堪称稳定。在得到主方向的过程中,由于局部区域像素梯度方向的不可或缺,就有可能找到不准确的主方向,后面特征向量的提取以及匹配却都依托于找到的主方向,即使只有些许的角度偏差也将导致后面特征匹配会出现较大误差,从而使得匹配并不成功;另外,图像金字塔的层数选取未臻紧密也会使得尺度存在误差,后面的特征向量提取过程同样会依赖相应的尺度,在这个问题上只能采用折中的解决方法,即:通过选取适量的层数来进行下一步的插值运算。
1.3 性能比较
实验中,通过对 SIFT、PCA-SIFT和 SURF三种方法给出了性能上的测试比较。源图片来自Graffiti dataset,对原始图像进行尺度、旋转、模糊、亮度、仿射变换等一系列的设计处理后,再与原图像进行匹配,统计匹配的效果,并将可重复出现性作为评价指标。测试对比结果可见表1。
由表1可知,SIFT在尺度和旋转变换的情况下得到了良好效果;SURF在亮度变化下匹配实现效果较好,模糊效果的处理要优于SIFT,而尺度和旋转的变换则不如SIFT,旋转不变上却要明显逊色于SIFT。而在算法速度上,SURF比SIFT速度则高了3倍。
2 自定义相机
作为专用的目标识别并可测量长度的相机,当鱼尺相机在可识别区域检测到目标后,就会生成可移动的标尺,用户在手机屏幕上拖拽滑移标尺校对测量物的尺寸,同时屏幕左下角也随即显示出实际尺寸,最后保存到本地相册。因此,熟悉iOS相机拍摄原理 且通过AVFoundation框架自定义相机,成功制作了内置鱼尺的拍照相机。
具体来说,AVFoundation是一个Object-C媒体数据中的高级框架。AVFoundation的构建考虑到了目前的硬件环境和应用程序,其设计过程高度依赖多线程机制。充分利用了多核硬件的优势并大量使用block和GCD机制,将复杂的计算机进程部署到后台线程来集中处理。会自动辅设硬件加速操作,确保在大部分设备上应用程序能以最佳性能运行。该框架的设计主要是针对64位处理器,因而能够发挥64位处理器的全部优势。AVFoundation 框架是基于一些功能设计类来实现图像的捕捉过程,通过这些类可以访问来自相机设备的原始数据并且控制其相关组件。为此,针对主要类的功能解析可阐释如下:
(1)AVCaptureDevice 的接口是关于相机的硬件。主要用于控制硬件特性,诸如镜头的位置、曝光、闪光灯等。
(2)AVCaptureDeviceInput 的接口是提供来自设备中的数据信息。需要使用AVCaptureDeviceInput让设备添加到session中,使用 AVCaptureDeviceInput掌控管理设备。
(3)AVCaptureOutput作为一个抽象的类,用来描述capturesession 的结果。这里,研究给出了3种关于静态图片捕捉的通用子类,分别是:捕捉静态图片,AVCaptureStillImageOutput、启用检测人脸和二维码,AVCaptureMetadataOutput、实时预览图提供原始帧,AVCaptureVideoDataOutput。
(4)AVCaptureSession 的接口。是管理输入与输出之间的数据流和在出现问题时来捕获运行时错误。
(5)AVCaptureVideoPreviewLayer作为 CALayer的子类,可以用于显示相机并摄取实时的图像。除此之外,也还涉及了数个工具性质的方法,可将 layer 上的坐标转化到设备上。
3 实验结果
通过代码编程、并经 Xcode 运行通过,安装到手机端来展开效果测试。测试后得知,能够快速、准确地对目标进行识别,同时手机屏幕上产生可移动的标尺用来测量物体的尺寸,屏幕左下角便会生成实际尺寸,最后保存到本地相册,而且也用较低的误差测量出尺寸的大小。实验仿真结果如图6所示。
4 结束语
实验结果表明,Xcode中使用OpenCV来研发实现在移动设备上的实时图像处理,能够快速、准确地对目标进行识别,测量误差也非常小。
参考文献
[1] 黎松,平西建,丁益洪. 开放源代码的计算机视觉类库OpenCv的应用[J]. 计算机应用与软件,2005,22(8):134-136.
[2] 何鹏,王连鹏,楚艳红. 基于OpenCV的机器视觉在智能手机中的应用[J]. 计算机工程与设计,2011,32(8):2901-2904.
[3] 陈雪娇. 基于OpenCV的计算机视觉技术研究[J]. 电脑知识与技术,2015,11(30):137-138,141.
[4] 阴法名. 基于OpenCV图像处理[J]. 科技信息,2009(32):220.
[5] 张家怡. 图像识别的技术现状和发展趋势[J]. 电脑知识与技术 2010,6(21):6045-6046.
[6] 胡辉. IOS环境下使用MVC模式进行APP开发的设计思路探索[J]. 数字技术应用,2015(6):204,206.
[7] GALLOWAY M. Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法[M]. 爱飞翔,译. 北京:机械工业出版社,2014.
[8] KNASTER S,MALIK W,DALRYMPLE M . Objective-C基础教程[M]. 2版. 周庆成,译. 北京:人民邮电出版社,2013.
[9] LOSSEF S V SCHWARTZ L H. Computerized literature reference system: Use of an optical scanner and optical character recognition software[J]. American Journal of Roentgenology,1990,155(3):617-619.
[10]KIM D LEE V W CHEN Y K. Image processing on multicore x86 architectures[J] . IEEE Signal Processing Magazine 2010,27(2):97-107.
[11]王福斌,李迎燕,劉杰,等. 基于OpenCV的机器视觉图像处理技术实现[J]. 机械与电子,2010(6):54-57.
[12]YAMADA S MURASE K. Effectiveness of flexible noise control image processing for digital portal images using computed radiography[J]. The British Journal of Radiology,2005,78(930):519-527.