基于嵌入式与OpenCV的电缆护套拉伸长度测量
2016-06-27高振斌李盼生
高振斌,李盼生
(河北工业大学 电子信息工程学院,天津 300401)
基于嵌入式与OpenCV的电缆护套拉伸长度测量
高振斌,李盼生
(河北工业大学 电子信息工程学院,天津 300401)
摘要:针对电缆护套拉伸长度测量智能化和稳定性的要求,使用以IMX.6Q芯片为主处理器的嵌入式平台,搭载200万像素USB工业相机,采用机器视觉的方法对其进行测量。将开源图像处理OpenCV函数库移植到嵌入式Linux系统上,使用数学形态学和颜色阈值分割的方法来进行电缆护套标记点的定位。阈值分割方法采用直方图最频值法和最大类间方差法,可以实时地对电缆护套标记点进行跟踪,从而精确地测量出电缆护套拉伸长度。
关键词:OpenCV;嵌入式Linux;电缆护套拉伸长度测量;机器视觉
在如今的电气时代,可以说人们的生产生活已离不开电的供应,在电给人们提供方便的同时,用电的安全隐患问题应运而生。由于电线电缆的质量不过关,而引发的火灾时有发生,可见对电线电缆护套材料进行检测必不可少。
随着计算机技术的发展,图像处理技术越来越广泛地应用于非接触式测量。非接触式测量不但可以提高测量的精度,减少人为误差,还可以提高生产的效率和经济利益,正在被大量应用于实时生产过程[1]。现在电缆护套拉伸长度测量大多是以PC机或DSP+FPGA系统为核心的。但是这些系统存在软硬件成本高,开发周期长等缺点。随着嵌入式微处理器技术的不断成熟,图像处理越来越多地被运用到嵌入式系统中。开放源代码的机器视觉类库OpenCV(Intel Open Source ComputerVision Library)由英特尔公司开发,是一套可免费获得的由一些C函数和C++类所组成的库,用来实现一些常用的图像处理及计算机视觉算法[2]。本文设计了一款以嵌入式Linux与OpenCV为基础的电缆护套拉伸长度测量系统,不但能缩短研发的周期,而且减少了系统软硬件的成本。
1系统总体结构设计
系统在结构上分为4层: 系统硬件平台、操作系统、OpenCV库和应用软件。系统结构层次图如图1所示。
应用层 电缆护套拉伸长度测量系统库层 OpenCV函数库,OpenCV依赖库,基本C库内核层 Linux内核硬件层 USB接口CPU工业相机电容式触摸
图1系统架构
在图1中系统架构的最底层是硬件层,它是系统的基础。硬件层使用飞思卡尔公司生产的IMX.6Q 4核处理器,时钟频率为1.2 GHz,使用2G BDDR3,8G NandFlash,可以满足实时图像处理的需要。配备200万像素的USB工业相机和800×480电容式触摸屏。内核层使用的是Linux3.0.35内核,经过剪裁后移植通过SD卡烧写到NandFlash中。库层使用的是OpenCV2.4.8函数库,在移植之前Linux已经自带基础C库,还需要安装libgtk2.0-dev,libavcodec-dev,libavformat-dev,libjpeg62-dev,libtiff4-dev,libswscale-dev,libjasper-dev等OpenCV的依赖库[3]。应用层包括图像处理算法和用户交互界面,图像处理算法直接调用OpenCV函数库,用户交互界面调用QT2.4.8函数库。
2基于嵌入式与OpenCV的电缆护套拉伸长度测量方法
2.1标记点特征及先验知识
背景幕布的颜色笔者选择为黑色或白色。由于不同厂家生产的电缆护套的颜色千差万别,如果单纯从灰度值阈值分割来检测标记点很容易受到阴影和反光的影响,从而出现误检和漏检,因为颜色比灰度包含更多的视觉信息,所以通过颜色的不同来识别标记点,可以增强图像处理算法的鲁棒性,所以选择三原色:红、绿、蓝为标记点的颜色,易与黑色和白色区分,可以消除一部分阴影和反光的干扰。在具体选择背景幕布和标记点颜色时,要保证背景幕布颜色、标记点颜色和电缆护套颜色相差尽量大。为了方便选取电缆护套和标记点区域,电缆护套在图像中应处于垂直或水平位置。电缆护套的拉伸部分由电机驱动的拉力机完成。
2.2基于嵌入式和OpenCV电缆护套标记点定位方法
对运动物体定位的方法一般有帧差法[4]、光流法[5]、背景减法[6]、扩展的EM算法、能量运动检测、基于数学形态学的检测[7]等,常用的目标跟踪算法有基于区域的跟踪、基于运动估计的跟踪、基于目标模型的跟踪和基于主动轮廓的跟踪等[8]。为了同时满足实时性和准确性的要求,使用数学形态学和颜色阈值分割的方法来进行电缆护套标记点的定位。
本文方法的主要思路是:结合不同颜色空间中图像的特点,电缆护套和标记点的颜色和轮廓特征来识别标记点,得到两个标记点之间的像素距离,从而计算电缆护套被拉伸的实际距离。首先对拍摄的RGB颜色空间图像转化为HSV颜色空间图像,因为H通道表示色调,即颜色信息,所以将H通道图像单独取出。然后将RGB颜色空间图像转化为灰度图像,选择感兴趣区域,通过阈值分割转化为二值图像,并进行形态学图像处理,查找轮廓,从而得到护套电缆所在区域。然后将H通道图像的护套电缆所在区域设为感兴趣区域,通过阈值分割,得到二值化图像,然后进行形态学图像处理,查找与标记点面积相符的轮廓,根据得到的轮廓计算标记点中心坐标。本方法流程图如图2所示。
图2 电缆护套标记点定位方法流程图
2.2.1阈值分割算法的选择
在标记点定位方法中,进行了两次图像二值化,因此要选择合适的阈值分割算法非常重要。下面是常用的阈值分割算法:最大熵阈值分割算法[9],基于灰度期望值的阈值分割算法[10],最大类间方差法(OSTU)[11],直方图最频值法[12]。
为了选取电缆护套轮廓而进行阈值分割时,因为背景幕布和电缆护套相对于标记点所占有的像素个数要多很多,所以直方图在背景幕布和电缆护套灰度值附近会出现两个波峰,而标记点附近不会出现大的波峰,所以选择直方图最频值法,将两个波峰之间的波谷处的灰度值作为分割阈值,可以有效地将背景幕布和电缆护套分开。而为了选取标记点而进行阈值分割时,因为排除了背景幕布的干扰,只对电缆护套和标记点进行分割。因为方差是图像灰度分布均匀性的一种度量,方差越大说明构成图像的两部分差别越大,而部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,所以使用最大类间方差法,可以很好地将标记点和电缆护套分开。但是最大类间方差法在遍历每一个灰度值时计算量大,耗时长,不能满足实时性,因此对此方法进行修改,只对图像灰度期望值附近的灰度值进行遍历,减小了计算量,可以满足测量的实时性。
2.2.2读取图像
本文所使用的工业相机可以拍摄得到1 600×1 200像素大小的彩色图像,首先利用cvCreateImage函数分别开辟一个1 600×1 200大小的彩色图像的内存,然后直接调用摄像头驱动接口函数read_frame来读取工业相机拍摄的每一帧照片的彩色图像。
2.2.3选择感兴趣区域
因为电缆护套拉伸长度检测要求在护套拉伸过程中实时地进行拉伸长度测量,所以为了保证实时性,减少图像处理算法的计算量,本文采取只对感兴趣区域内的图像信息进行处理。
在电缆护套拉伸之前,通过手指点击触摸屏,Qt库函数mousePressEvent就会将手指点击屏幕的坐标传递给主程序,然后按住显示屏不放移动手指,函数mouseMoveEvent就会将手指移动位置的坐标传递给主函数,然后将这两个坐标转化为图像像素的坐标,就可以将以这两个点为对角线顶点的水平方向矩形所确定的区域作为感兴趣区域。利用函数cvSetImageROI对图像经行设置,以后对图像进行处理就只是针对感兴趣区域进行处理了。感兴趣区域图像如图3a所示。
a 感兴趣区域图像 b 二值化图像 c 形态学处理后的二值化图像图3 感兴趣区域图像、二值化图像、形态学处理后的二值化图像比较图
2.2.4确定电缆护套的位置
首先利用cvCvtColor函数将RGB图像转化为灰度图像。转化后的灰度图像的灰度直方图如图4中原灰度直方图所示,图中有两个大的波峰,分别代表电缆护套和背景的灰度信息。但原灰度直方图中会出现微小的波动,会导致找到错误的波谷,因此设计一个平均滤波器来平滑原直方图。平均滤波器窗口大小W=3,滤波器三个元素取值分别为ω(-1)=0.333 3,ω(0)=0.333 3,ω(1)=0.333 3,并且∑μω(μ)=1。在此基础上灰度直方图g0(t)与平均滤波器ω(μ)的离散卷积公式定义为
(1)
其中:[·]为下取整操作[13]。
经过平均滤波器平滑后的灰度直方图如图4中均值滤波后的灰度直方图所示。使用直方图最频值法选取阈值,对图像进行二值化。二值化后图像如图3b所示。因为标记点被划分为电缆护套还是背景是未知的,如果划分为背景,那么电缆护套就会在标记点处出现断裂,这是不愿看到的,因此为了避免出现这种情况,对二值化后的图像进行开运算,可以使电缆护套在标记点处连接。为了消除电缆突起的毛刺和凸起,对图像进行闭运算。形态学处理后的二值化图像如图3c所示。因为电缆护套基本处于垂直或水平方向,所以计算选定电缆护套轮廓的水平和垂直最短距离和中心轴可以计算出电缆护套区域的最大内接矩形。然后再将计算出的最大内接矩形设置为图像的感兴趣区域,用于进行下一步处理。
a 原灰度直方图
b 均值滤波后的灰度直方图图4 灰度图像的原灰度直方图和均值滤波后的灰度直方图
2.2.5确定标记点的位置
首先利用cvtColor函数将RGB空间图像转化 成HSV空间图像,再调用cvSplit函数将图像分离为H,S,V对应的单通道图像。其中H通道图像如图5a所示。然后利用最大类间算法对H分量对应的单通道图像进行二值化,得到的二值化图像如图5b所示。得到的标记点区域可能因为反光的影响,使单个标记点出现孔或识别为多个标记点,所以要对标记点区域先进行开运算,再进行闭运算。经过实验证明,可以很好地消除反光的影响。经过形态学处理后的图像如图5c所示。
a H通道图像 b 电缆区域二值化图像
c 形态学处理后图像 d 标记点轮廓图像图5 H通道图像、电缆区域二值化图像、形态学处理后图像和标记点轮廓图像对照图
2.3拉伸长度计算
因为本文使用的标记点粘贴在电缆护套上,所以只要求出标记点轮廓的中心,就是标记点的中心。使用cvGetSeqElem函数求出标记点轮廓向上每一个点的坐标xn,yn,轮廓上标记点的个数为N,轮廓的中心坐标为xc,yc,则
(2)
(3)
如图5d中白色闭合曲线表示识别标记点的轮廓,黑色实心点表示标记点的中心。
当相机与电缆护套的位置固定,并且相机平面与电缆护套平面平行,设相机两个相邻像素间距离对应现实生活中的实际距离为Lp,两个标记点中心之间的像素点个数为n,电缆护套拉伸长度L=Lp·n。标定的过程如下:选取两个标记点,用游标卡尺计算出两个标记点中心之间的距离m,然后用图像处理软件计算出两个标记点中心之间的像素个数d,则Lp=m/d。
3实验结果和误差分析
3.1实验结果
实验结果如图6所示,矩形框为感兴趣区域,白色闭合曲线为标记点轮廓。测量长度如图6右下角文本框所示。
图6 实验结果(截图)
测量结果如表1所示。
表1测量结果
标记点间距离实际值/cm标记点间像素个数标记点间距离测量值/cm测量误差/%2.9982312.9760.7343.5122753.5320.5693.9723103.9810.2274.4903524.5200.6684.9223874.9700.9755.5364335.5610.452
3.2误差分析
3.2.1量化误差
通过标记点之间像素点个数计算电缆护套标记点之间的长度必然会出现量化误差,假设相邻像素之间在现实世界中的实际距离为Lp,那么量化误差的大小为±Lp。因此相机拍摄图片分辨率越高,则量化误差越小。
3.2.2倾斜误差
如果电缆护套所在平面与相机拍摄平面不平行,则会产生倾斜测量误差,如图7所示。电缆护套的实际长度为L,则倾斜测量误差δ为
δ=L-Lcosθ=L(1-cosθ)
(4)
图7 相机拍摄平面未与电缆护套平面平行
3.2.3取舍误差
根据标记点之间的像素个数来计算电缆护套拉伸长度过程中,会用到乘除运算,因此会进行有效位的取舍,产生取舍误差,因为经过校准后的工业相机相邻两个像素间距对应的实际距离为0.012 cm,所以在计算过程中保留到0.001 cm,所以取舍误差为±0.005 cm。
3.2.4畸变误差
在计算机视觉中相机的镜头存在畸变,只有经过精确的校准后才会消除畸变产生的误差,否则图像会出现非线性失真。本实验所使用的镜头畸变小于1%。
4小结
该电缆护套拉伸长度测试系统克服了以前手动测量繁琐的缺点,使用嵌入式技术和OpenCV开源图像处理函数库相结合的方案,既缩短了开发周期,降低了硬件成本,而且增强了系统的可移植性。利用RGB和HSV颜色空间分别处理图像,使用直方图最频值法和最大类间方差法两种阈值分割算法对图像进行二值化,增强了图像处理算法的鲁棒性。使用在灰度期望值附近对灰度值进行遍历的方法,减小了最大类间方差算法的计算量,可以满足图像处理的实时性。通过选取低畸变相机镜头和适宜分辨率的工业相机,保持电缆护套平面与相机拍摄平面平行,计算过程中选取合适的取舍位,可以有效地降低量化误差、倾斜误差、取舍误差和畸变误差。
参考文献:
[1]李锦富,陈乐庚,刘春群,等. 基于嵌入式的橡胶胶片宽度测量系统[J].仪表技术与传感器,2012(9):93 -96.
[2]陈磊. 计算机视觉类库OpenCV在VC中的应用[J].微计算机信息,2007(12):209 -210.
[3]田红鹏,焦鑫. 基于嵌入式Linux和OpenCV的车牌定位方法[J].计算机工程与设计,2014,35(11):3908 -3912.
[4]林洪文,姚作樑,涂丹,等. 基于减背景技术的运动目标检测方法研究[J]. 国防科技大学学报,2003,25(3):66 -69.
[5]王栓,艾海舟,何克忠. 基于差分图像的多运动目标的检测与跟踪[J]. 中国图象图形学报,1999,4(6):470 -474.
[6]SONK A,HLAVAC V,BOYLE R. 图像处理分析与机器视觉[M].2版.艾海舟,武勃,译.北京:人民邮电出版社,2003.
[7]王江涛.基于视频的目标检测,跟踪及行为识别研究[D].南京:南京理工大学模式识别与智能系统,2008.
[8]尹俊超,刘直芳. 基于 OpenCV 的运动目标检测与跟踪[J].计算机工程与设计,2011,32(8):2817 -2820.
[9]吴谨,李娟,刘成云,等. 基于最大熵的灰度阈值选取方法[J]. 武汉科技大学学报(自然科学版),2004,27(1):58 -60.
[10]高永英,张利,吴国威. 一种基于灰度期望值的图象二值化算法[J]. 中国图象图形学报,1999,4(6):524 -528.
[11]祁佳,刘紫燕. 基于融合及形态学的自适应阈值图像边缘检测[J]. 电视技术,2014,38(13):36 -38.
[12]王厚大,梁栋,杨恒新. 自动阈值选取的两种算法[J]. 南京邮电学院学报,2002,22(4):85 -88.
[13]李轶鲲,杨树文,刘涛. 基于多峰直方图的遥感图像阈值自动选取算法[J]. 兰州交通大学学报,2013,32(6):199 -204.
Cable sheath stretched length measurement based on embedded and OpenCV
GAO Zhenbin, LI Pansheng
(SchoolofInformationEngineering,HebeiUniversityofTechnology,Tianjin300401,China)
Abstract:To meet the measurement’s intelligent and stability requirements, cable sheath stretched length is measured using machine vision methods, on the IMX.6Q chip-based embedded platform equipped with a 2.0 megapixel USB industrial cameras. At first, open source image processing libraries OpenCV is transplanted to embedded Linux systems. Secondly, mathematical morphology and color threshold segmentation method is used to locate cable sheath marked point. Histogram most frequent method and Otsu method are used as threshold segmentation method so that cable sheath marked point is tracked in real time and cable sheath stretched length is exactly measured.
Key words:OpenCV; embeded Linux; cable sheath stretched length measurement; machine vision
中图分类号:TN98
文献标志码:A
DOI:10.16280/j.videoe.2016.02.027
基金项目:国家质检总局科技计划项目
作者简介:
高振斌(1973— ),教授,博士,主要研究方向为通信与测控技术;
李盼生(1989— ),硕士研究生,主要研究方向为通信与测控技术。
责任编辑:闫雯雯
收稿日期:2015-06-18
文献引用格式:高振斌,李盼生. 基于嵌入式与OpenCV的电缆护套拉伸长度测量[J].电视技术,2016,40(2):141-145.
GAO Z B, LI P S. Cable sheath stretched length measurement based on embedded and OpenCV [J].Video engineering, 2016,40(2):141-145.